Ansible操作例 – NETCONFを用いたJUNOSへの接続方法

スポンサーリンク

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の操作方法の説明」で紹介します。

タイトルとURLをコピーしました