AnsibleでJUNOS(JUNiper Operating System)へ接続する方法を説明します。JUNOSへの接続方法は「network_cli」から「netconf」への過渡期の状況です。2020年時点の最新Ansibleでは旧方式「network_cli」は切り捨てられ「netconf」のみの接続を許容するAnsibleモジュールもあります。
旧バージョンのAnsibleを使わざるを得ない方向けに、このページでは「network_cli」による接続方法を説明します。
事前準備
JUNOS SSH接続の確認
Ansibleでネットワーク機器を操作するにはsshで接続する必要があります。telnetによる接続方法もありますが、telnetは従来のTeraTermマクロのようなexpectの仕組みを使うため、非常に難解な実装を求められます。そのため、特別な理由がない限りはsshを接続許可しましょう。
JUNOSはSSH接続許可のための明示的な設定は必要ありません。それではSSHログインが可能である事を確かめましょう。
[root@ansible70 ~]# ssh 192.168.9.63 -l admin Warning: Permanently added '192.168.9.63' (ECDSA) to the list of known hosts. Password: --- JUNOS 19.3R2.9 Kernel 64-bit JNPR-11.0-20191120.0ebd4bf_buil admin@R63> admin@R63> configure Entering configuration mode Users currently editing the configuration: root terminal u0 (pid 16640) on since 2020-08-29 11:14:01 UTC, idle 00:00:32 [edit] [edit] admin@R63#
paramikoインストール
Ansibleでネットワーク機器を操作するにはparamikoと呼ばれるモジュールが必要です。paramiko未インストールの場合は以下のようなエラーメッセージが出力されます。
# ansible-playbook -i inventory.ini junos_show_version.yml PLAY [junos] ******************************************************************* TASK [send show version] ******************************************************* fatal: [junos63]: FAILED! => {"msg": "paramiko is not installed: No module named 'paramiko'"} PLAY RECAP ********************************************************************* junos63 : ok=0 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
それでは、paramikoをインストールしましょう。
pip install paramiko
インベントリファイルの作成
JUNOSと接続できるよう以下のようなインベントリファイルを作成します。
cat << EOF > inventory.ini [junos:vars] ansible_user = 'admin' ansible_password = 'P@ssw0rd' ansible_connection = 'network_cli' ansible_network_os = 'junos' [junos] junos63 ansible_host=192.168.9.63 EOF
ansible_network_osはOSの種類によって適宜変更が必要です。JUNOSを使用する場合は、「ansible_network_os」は「junos」を指定します。
動作確認
「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でnetwork_cliを使うと以下のようなWARNINGが出力される事もあります。これはnetconfによる接続に切り替えると解消されます。
# ansible-playbook -i inventory.ini junos_show_version.yml PLAY [junos] ******************************************************************* TASK [send show version] ******************************************************* [WARNING]: arguments wait_for, match, rpcs are not supported when using transport=cli ok: [junos63] PLAY RECAP ********************************************************************* junos63 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
現時点でshowコマンドの出力結果は表示されていませんが、showコマンドの結果を表示する方法は「Ansible操作例 – JUNOSの操作方法の説明」で紹介します。