はじめに
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 モジュールの説明ページを確認してみることをおすすめします。