てくなべ (tekunabe)

ansible / network / automation / 学習の記録

[Ansible] Junos に対して netconf ではなくSSH (network_cli) でコンフィグ投入する(cli_configモジュール)

はじめに

Ansible の Junos モジュール郡は、コネクションプラグイン(接続方式)として、netconfnetwork_cli (いわゆるSSH)に対応しています。

ただし、各モジュールごとに、利用できるコネクションプラグインが決まっています。

Junos OS Platform Options — Ansible Documentation

たとえば、設定変更コマンド(setdelete)などを投入できる、junos_config モジュールは、netconf のみに対応していて、network_cli には対応していません。

しかし、Junos 専用モジュールではなく、ベンダー抽象化した cli_configというモジュールであれば、Junos に対して network_cli (SSH) で、設定変更コマンドを投入できます。

この記事では、簡単なサンプルで説明します。

サンプルPlaybook

---
- hosts: vmx
  gather_facts: false
  
  vars:
    ansible_connection: network_cli
  
  tasks:
    - name: config test
      cli_config:
        config: set system ntp server 10.0.1.123

junos_config モジュールの lines オプション(複数形)のと違って、cli_config モジュールの config オプションは、リストではなく文字列の指定をする点にご注意ください。

そのため、複数行指定する場合は、以下のような改行入りの文字列として指定します。

    - name: config test
      config: |
        set system ntp server 10.0.1.123
        set system ntp server 10.0.2.123
        set system ntp server 10.0.3.123

file ルックアッププラグインconfig オプションを利用すれば、junos_configsrc オプションのように、コンフィグをファイルから読み込む事もできます。

実行

$ ansible-playbook -i ../inventory.ini config.yml 

PLAY [vmx] *********************************************************************************

TASK [config test] *************************************************************************
changed: [vmx]

PLAY RECAP *********************************************************************************
vmx                        : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0 
ignored=0   

一応、機器側の設定確認をします。

testuser@vMX-addr-0> show configuration system ntp | display set    
set system ntp server 10.0.1.123

無事に設定変更できました。

デフォルトで commit されます。commit オプションで無効にもできます。

他、junos_configcli_config は、どちらかが完全に勝っているというわけではありません。詳細は各モジュールのドキュメントを参照してください。

おわりに

このように、ベンダー専用モジュールでできなくても、cli_* モジュールならできる、ということを何度か経験しています。

あきらめる前に、一度 cli_commandcli_config モジュールの説明ページを確認してみることをおすすめします。