はじめに
Ansible の junos_interfaces モジュールを使いながら、junos_config モジュールとの違いを確認します。
junos_interfaces
https://docs.ansible.com/ansible/2.9/modules/junos_interfaces_module.htmljunos_config
https://docs.ansible.com/ansible/2.9/modules/junos_config_module.html
環境
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
- インターフェースの説明を記載します
- description
- duplex
- automatic、full-duplex、half-duplex を指定します
- config
実行ログ
● 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
あとから見直すと混乱の元なので、お勧めは出来ない。