Contents
AnsibleからJunosへの接続について
Ansible2.5からは netowrk_cli
と netconf
のコネクション方法が追加されています。
network_cli
はsshで接続してコマンドを実行する接続方法です。network_cli
を使う場合は、SSH接続を有効化する必要があります。
netconf
はnetconfプロトコルで操作をする接続方法です。netconf
を使う場合は、netconfを有効化する必要があります。
Junos側の準備
SSHとnetconfの有効化
以下はSSHでrootの接続を許可とnetconfの有効化をしている例です。
1 2 3 |
root# set system services ssh root-login allow root# set system services netconf ssh port 830 |
アクセス許可の有効化
以下は trust
と言うセキュリティゾーンに対して ge-0/0/0
を割り当てて ssh
と netconf
の接続を許可している例です。
1 2 3 |
set security zones security-zone trust interfaces ge-0/0/0.0 host-inbound-traffic system-services ssh set security zones security-zone trust interfaces ge-0/0/0.0 host-inbound-traffic system-services netconf |
Ansible側の準備
必要なモジュールインストール
JuniperのAnsibleモジュールを動作させるために必要なpythonモジュールをインストールします。
1 2 |
[root@localhost ~]# pip install jxmlease ncclient |
動作確認
以下はSSH接続時のfingerprint警告が出るので無視するように設定しています。
1 2 |
[root@localhost ~]# export ANSIBLE_HOST_KEY_CHECKING=False |
network_cli動作確認
ここでは show version
を実行してみます。
Playbook
1 2 3 4 5 6 7 8 9 10 11 12 13 |
--- - name: Junos Module TEST hosts: junos gather_facts: no tasks: - name: show version junos_command: commands: show version register: r when: ansible_network_os == 'junos' - debug: msg="{{ r }}" |
Inventory
1 2 3 4 5 6 7 8 9 |
[junos] 192.168.0.90 [junos:vars] ansible_connection=network_cli ansible_network_os=junos ansible_user=root ansible_ssh_pass=secret |
動作確認
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
[root@localhost ~]# ansible-playbook ansible_junos_test.yml -i inventory PLAY [Junos Module TEST] ******************************************************************************************************************************************************************* TASK [show version] ************************************************************************************************************************************************************************ [WARNING]: arguments wait_for, match, rpcs are not supported when using transport=cli ok: [192.168.0.90] TASK [debug] ******************************************************************************************************************************************************************************* ok: [192.168.0.90] => { "msg": { "changed": false, "failed": false, "stdout": [ "Model: srx300\nJunos: 15.1X49-D45\nJUNOS Software Release [15.1X49-D45]" ], "stdout_lines": [ [ "Model: srx300", "Junos: 15.1X49-D45", "JUNOS Software Release [15.1X49-D45]" ] ], "warnings": [ "arguments wait_for, match, rpcs are not supported when using transport=cli" ] } } PLAY RECAP ********************************************************************************************************************************************************************************* 192.168.0.90 : ok=2 changed=0 unreachable=0 failed=0 |
netconf動作確認
ここでは ge-0/0/1
にdescriptionを追加してみます。
Playbook
1 2 3 4 5 6 7 8 9 10 |
--- - name: Junos Module TEST hosts: junos gather_facts: no tasks: - name: add description junos_interface: name: ge-0/0/1 description: test-string |
Inventory
1 2 3 4 5 6 7 8 9 10 |
[junos] 192.168.0.90 [junos:vars] ansible_connection=netconf ansible_network_os=junos ansible_port=830 ansible_user=root ansible_ssh_pass=secret |
動作確認
1 2 3 4 5 6 7 8 9 10 |
[root@localhost ~]# ansible-playbook ansible_junos_test.yml -i inventory PLAY [Junos Module TEST] ******************************************************************************************************************************************************************* TASK [add description] ********************************************************************************************************************************************************************* ok: [192.168.0.90] PLAY RECAP ********************************************************************************************************************************************************************************* 192.168.0.90 : ok=1 changed=0 unreachable=0 failed=0 |
Junos側でインターフェースにdescriptionが追加されていることを確認します。
1 2 3 |
root> show configuration interfaces ge-0/0/1 description test-string; |
これで network_cli
と netconf
の動作確認ができました 🙂