mito’s blog

IT技術メインの雑記。思い立ったが吉日。

【Ansible】junos_interfaces の使い方と junos_config との違い

はじめに

Ansible の junos_interfaces モジュールを使いながら、junos_config モジュールとの違いを確認します。


環境

Ansible

  • ansible 2.9.17
  • paramiko インストール
  • ncclient インストール

Router

  • JUNOS 18.3R1.9
  • netconf 有効


junos_interfaces モジュールと junos_config モジュールの違い

  • junos_interfaces

    • check_commit がない
    • configuration に set interfaces ge-0/0/0 enable が明示的に表示されない
    • 結果に、netconf のコマンドが格納される
  • junos_config

    • check_commit がある
    • configuration に set interfaces ge-0/0/0 enable が明示的に表示される


インターフェース ge-0/0/0 を有効にする

junos_interfaces

Playbook

---
- hosts: r1
  gather_facts: no

  tasks:
    - name: enabled interfaces ge-0/0/0
      junos_interfaces:
        config:
          - name: ge-0/0/0
            enabled: true
        state: overridden
      register: result

    - name: debug
      debug:
        msg: "{{ result }}"

モジュールの説明

  • junos_interfaces モジュール
    • インターフェースの構成を管理します
    • configure exclusive 相当の動作です
      • 他のユーザが configure モードに遷移していると失敗します
      • 未 commit の設定変更があると失敗します
    • config
      • リスト形式で、複数のインターフェースを設定変更できます
      • name
        • インターフェース名を記載します
      • enabled
        • インターフェースの有効/無効を指定します
    • state
      • junos_interfaces モジュール実行後の状態を指定します
      • インターフェースを up / down させるなら、overridden、または replaced を指定します

その他のオプション

  • junos_interfaces モジュール
    • config
      • description
        • インターフェースの説明を記載します
    • duplex
      • automatic、full-duplex、half-duplex を指定します

実行ログ

● Playbook実行前のjunos
> show interfaces ge-0/0/0 terse
Interface               Admin Link Proto    Local                 Remote
ge-0/0/0                down  down
ge-0/0/0.0              up    down inet     172.16.1.1/24
                                   multiservice

> show configuration | display set | grep "set interfaces ge-0/0/0"
set interfaces ge-0/0/0 disable
set interfaces ge-0/0/0 unit 0 family inet address 172.16.1.1/24

● Playbook実行
# ansible-playbook -i inventory.ini port_up2.yml

PLAY [r1] **********************************************************************

TASK [enabled interfaces ge-0/0/0] *********************************************
changed: [r1]

TASK [debug] *******************************************************************
ok: [r1] => {
    "msg": {
        "after": [
            {
                "enabled": true,
                "name": "ge-0/0/0"
            },
            {
                "enabled": true,
                "name": "ge-0/0/1"
            },
            {
                "enabled": true,
                "name": "fxp0"
            },
            {
                "enabled": true,
                "name": "lo0"
            }
        ],
        "before": [
            {
                "enabled": false,
                "name": "ge-0/0/0"
            },
            {
                "enabled": true,
                "name": "ge-0/0/1"
            },
            {
                "enabled": true,
                "name": "fxp0"
            },
            {
                "enabled": true,
                "name": "lo0"
            }
        ],
        "changed": true,
        "commands": [
            "<nc:interfaces xmlns:nc=\"urn:ietf:params:xml:ns:netconf:base:1.0\"><nc:interface><nc:name>ge-0/0/0</nc:name><nc:description delete=\"delete\"/><nc:speed delete=\"delete\"/><nc:mtu delete=\"delete\"/><nc:link-mode delete=\"delete\"/><nc:disable delete=\"delete\"/><nc:hold-time><nc:up delete=\"delete\"/><nc:down delete=\"delete\"/></nc:hold-time></nc:interface><nc:interface><nc:name>ge-0/0/0</nc:name></nc:interface><nc:interface><nc:name>ge-0/0/1</nc:name><nc:description delete=\"delete\"/><nc:speed delete=\"delete\"/><nc:mtu delete=\"delete\"/><nc:link-mode delete=\"delete\"/><nc:disable delete=\"delete\"/><nc:hold-time><nc:up delete=\"delete\"/><nc:down delete=\"delete\"/></nc:hold-time></nc:interface><nc:interface><nc:name>fxp0</nc:name><nc:description delete=\"delete\"/><nc:speed delete=\"delete\"/><nc:link-mode delete=\"delete\"/><nc:disable delete=\"delete\"/><nc:hold-time><nc:up delete=\"delete\"/><nc:down delete=\"delete\"/></nc:hold-time></nc:interface><nc:interface><nc:name>lo0</nc:name><nc:description delete=\"delete\"/><nc:disable delete=\"delete\"/><nc:hold-time><nc:up delete=\"delete\"/><nc:down delete=\"delete\"/></nc:hold-time></nc:interface></nc:interfaces>"
        ],
        "failed": false
    }
}

PLAY RECAP *********************************************************************
r1   : ok=2  changed=1  unreachable=0  failed=0  skipped=0  rescued=0  ignored=0 

● Playbook実行後のjunos
> show configuration | display set | grep "set interfaces ge-0/0/0"
set interfaces ge-0/0/0 unit 0 family inet address 172.16.1.1/24

> show interfaces ge-0/0/0 terse
Interface               Admin Link Proto    Local                 Remote
ge-0/0/0                up    up
ge-0/0/0.0              up    up   inet     172.16.1.1/24
                                   multiservice

戻り値

  • after ‐ モジュール実行後のインターフェース構成
  • before ‐ モジュール実行前のインターフェース構成
  • commands ‐ netconf のコマンド


junos_config

junos_config モジュールを使って、ge-0/0/0 を up します。 Playbook はこちらの記事を参照してください。

実行ログ

● Playbook実行前のjunos
> show configuration | display set | grep "set interfaces ge-0/0/0"
set interfaces ge-0/0/0 disable
set interfaces ge-0/0/0 unit 0 family inet address 172.16.1.1/24

> show interfaces ge-0/0/0 terse
Interface               Admin Link Proto    Local                 Remote
ge-0/0/0                down  down
ge-0/0/0.0              up    down inet     172.16.1.1/24
                                   multiservice

● Playbook実行
# ansible-playbook -i inventory.ini port_up.yml

PLAY [r1] **********************************************************************

TASK [commit interfaces enable] ************************************************
changed: [r1]

PLAY RECAP *********************************************************************
r1   : ok=1  changed=1  unreachable=0  failed=0  skipped=0  rescued=0  ignored=0

● Playbook実行後のjunos
> show configuration | display set | grep "set interfaces ge-0/0/0"
set interfaces ge-0/0/0 enable
set interfaces ge-0/0/0 unit 0 family inet address 172.16.1.1/24

> show interfaces ge-0/0/0 terse
Interface               Admin Link Proto    Local                 Remote
ge-0/0/0                up    up
ge-0/0/0.0              up    up   inet     172.16.1.1/24
                                   multiservice


インターフェースの設定はどちらのモジュールを使ったほうが良いか

check commit が必要なら、junos_config を使う。ほかは、cnfiguration にインターフェース enable の記載が無くてもいいなら、 junos_interfaces のほうが良さそう。モジュール実行前後のステータスを表示してくれるし。


雑記

state: deleted で、インターフェースの disable を消して up してみた。出来たw
あとから見直すと混乱の元なので、お勧めは出来ない。