AnsibleでJUNOS(JUNiper Operating System)へ接続する方法を説明します。JUNOSへの接続方法は「network_cli」から「netconf」への過渡期の状況です。2020年時点の最新Ansibleでは旧方式「network_cli」は切り捨てられ「netconf」のみの接続を許容するAnsibleモジュールもあります。
このページでは「netconf」による接続方法を説明します。
事前準備
netconf 有効化
JUNOSでnetconfを有効にするには以下のコマンドを入力します。
set system services netconf ssh
netconf疎通確認
NETCONFはSSHの上でXMLメッセージを授受する通信プロトコルです。sshコマンドによる動作確認も可能で、以下のように「-p 830」と「-s netconf」オプションを付与する事でNETCONFによる通信が可能です。
もし、JUNOSからXMLのメッセージを受信できれば、NETCONFが有効になっている確認になります。
# ssh 192.168.9.63 -l admin -p 830 -s netconf Password: <!-- No zombies were killed during the creation of this user interface --> <!-- user admin, class j-super-user --> <hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <capabilities> <capability>urn:ietf:params:netconf:base:1.0</capability> <capability>urn:ietf:params:netconf:capability:candidate:1.0</capability> <capability>urn:ietf:params:netconf:capability:confirmed-commit:1.0</capability>
ncclient
AnsibleでNETCONFによる接続を行うためには、pythonのncclientモジュールが必要です。
pip install ncclient
インベントリファイルの作成
NETCONFを使用する場合は、ansible_connectionに「netconf」を使用します。
cat << EOF > inventory.ini [junos:vars] ansible_user = 'admin' ansible_password = 'P@ssw0rd' ansible_connection = 'netconf' ansible_network_os = 'junos' ansible_python_interpreter = '/root/venv-ans28/bin/python' [junos] junos63 ansible_host=192.168.9.63 EOF
Ansible Connectionでnetconfやlocalを指定する時は、ローカルホストにpythonスクリプトを転送してそれを実行する挙動になります。このpythonスクリプトのインタプリタは”/usr/bin/env python”で探索されるpythonです。
ここで注意が必要なのは、venvで指定したpythonと異なるpythonが呼び出される可能性がある事です。もし、venvで指定したpythonと同一のpythonを呼び出したいならば、変数ansible_python_interpreterを明示指定するようにしましょう。
IOS XRだけでなく、BIG-IPやkubernetesを操作する時も同様のトラブルが発生しやすい事に注意ください。
動作確認
「show version」を実行するプレイブックを作成します。
cat << EOF > junos_show_version.yml --- - hosts: junos gather_facts: no tasks: - name: send show version junos_command: commands: "show version" EOF
疎通可能である事を確認するため、実行結果が「OK」となる事を確認します。
# ansible-playbook -i inventory.ini junos_show_version.yml PLAY [junos] ******************************************************************* TASK [send show version] ******************************************************* ok: [junos63] PLAY RECAP ********************************************************************* junos63 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
現時点でshowコマンドの出力結果は表示されていませんが、showコマンドの結果を表示する方法は「Ansible操作例 – JUNOSの操作方法の説明」で紹介します。