てくなべ (tekunabe)

ansible / network / automation

[Ansible] VyOS で任意のファイル名で save するには、cli_config モジュールを利用する

はじめに

VyOS では、コンフィギュレーションモードで save コマンドを実行すると、コンフィグを機器内に保存できます。

Ansible としては、vyos_config モジュールsave オプションの指定により、同じことができます。

一方で save my_config.txt のように、任意のファイル名で機器内に保存することはできません。

これを実現するには、cli_config モジュールを利用します。

この記事では、cli_config モジュールを利用して、任意のファイル名で save する Playbook を紹介します。

なお、一般的な Ansible と 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_commandcli_config モジュールの説明ページを確認してみることをおすすめします。

参考

www.redhat.com