はじめに
VyOS では、コンフィギュレーションモードで save
コマンドを実行すると、コンフィグを機器内に保存できます。
Ansible としては、vyos_config
モジュールの save
オプションの指定により、同じことができます。
一方で save my_config.txt
のように、任意のファイル名で機器内に保存することはできません。
これを実現するには、cli_config
モジュールを利用します。
この記事では、cli_config
モジュールを利用して、任意のファイル名で save する Playbook を紹介します。
なお、一般的な Ansible と VyOS の組み合わせの情報は以下の記事を参照してください。
- [Ansible] VyOS モジュール利用のことはじめ - てくなべ (tekunabe)
[Ansible] vyos_config モジュールで VyOS の設定変更をする - てくなべ (tekunabe)
動作確認環境
- Ansible 2.9.6
- VyOS Vagrant Box higebu/vyos
■ Playbook 作成
--- - hosts: vyos gather_facts: false tasks: - name: configuration cli_config: config: save my_config.txt
cli_config
モジュールの config
オプションに、save my_config.txt
コマンドを指定します。
この config オプションは、vyos_config
モジュールの lines
オプションのようにリストではなく、文字列で指定する点にご注意ください。
■ Playbook 実行
Playbook を実行します。
$ ansible-playbook -i inventory.ini save_config_other.yml PLAY [vyos] ************************************************************************************************************ TASK [configuration] *************************************************************************************************** ok: [vyos1] PLAY RECAP ************************************************************************************************************* vyos1 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
(chenged
にはなりませんでした。このあたりちゃんとするにはもうひと工夫必要そうです。)
確認
VyOS 側で、my_config.txt
ができたか確認します。
vagrant@vyos:~$ vagrant@vyos:~$ configure [edit] vagrant@vyos# ls -al /config/ total 40 drwxrwsr-x 8 root vyattacfg 4096 Apr 14 08:44 . drwxr-xr-x 1 root root 4096 Apr 14 06:47 .. -rw-r--r-- 1 root vyattacfg 0 Oct 3 2016 .vyatta_config drwxrwsr-x 2 root vyattacfg 4096 Apr 14 07:50 archive drwxrwsr-x 2 root vyattacfg 4096 Feb 17 2016 auth -rwxrwxr-x 1 root vyattacfg 2269 Apr 14 06:47 config.boot -rw-rw-r-- 1 root vyattacfg 2368 Apr 14 08:44 my_config.txt drwxrwsr-x 2 root vyattacfg 4096 Feb 17 2016 scripts drwxrwsr-x 2 root vyattacfg 4096 Feb 17 2016 support drwxr-sr-x 3 root vyattacfg 4096 Feb 17 2016 url-filtering drwxrwsr-x 2 root vyattacfg 4096 Feb 17 2016 user-data [edit] vagrant@vyos# cat /config/my_config.txt interfaces { ethernet eth0 { address dhcp duplex auto ...(略)...
無事に、my_config.txt
ができていました。
なお、config.boot
のほうが、通常の save
でできたファイルです。
■ 参考: 他のモジュールではどのようなエラーになるか
記事を書く前に、実際はまず vyos_config
や、vyos_command
モジュールを利用して同様のことを試しました。
それぞれどのようなエラーになったのか、参考までに記載しあmす。
vyos_config
モジュールの場合
vyos_config
モジュールで試した場合です。やや強引に lines
オプションに指定します。
- name: vyos_config: lines: - save my_config.txt
エラーは以下の通り。詳細は調べられていませんが、どこかで set save my_config.txt
のように、投入コマンドの頭に set
が付加されるようです。結果的には、そんな set
できないと、と言うエラーです。
fatal: [vyos1]: FAILED! => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "msg": "set save my_config.txt\r\n\r\n Configuration path: [save] is not valid\r\n Set failed\r\n\r\n[edit]\r\r\nvagrant@vyos# "}
vyos_commnad
モジュールの場合
vyos_command
モジュールで試した場合です。こちこらもやや強引に commands
オプションに指定します。
- name: vyos_command: commands: - save my_config.txt
エラーは以下の通り。コンフィギュレーションモードに入る前に save my_config.txt
コマンドを実行しようとするので、そもそも save
コマンドがないよ、というエラーです。
fatal: [vyos1]: FAILED! => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "msg": "save my_config.txt\r\n\r\n Invalid command: [save]\r\n\r\nvagrant@vyos:~$ "}
■ おわりに
vyos_*
や junos_*
のようなネットワークOS専用モジュールでできなくても、cli_*
モジュールならできる、ということを何度か経験しています。
あきらめる前に、一度 cli_command
や cli_config
モジュールの説明ページを確認してみることをおすすめします。