はじめに
前回の記事で、Ansible で VyOS を扱うための準備や、簡単な show コマンドを実行する方法をご紹介しました。
この記事では、vyos_config
モジュールを利用した設定変更の Playbook をご紹介します。
- 動作確認環境
- Ansible 2.9.6
- VyOS Vagrant Box higebu/vyos
【目次】
■ vyos_config モジュールの基本
vyos_config
モジュールは、set
や delete
など VyOS 上で実行するコマンドを指定して実行するモジュールです。
単純なコマンド指定の他にも、Jinja2 テンプレートを活用したコマンドの投入もできます。
また、コンフィグファイルのバックアップもできます。
各オプションや例は公式ドキュメントの説明ページに記載されています。
ほかの vyos モジュールとの比較、使い分け
前回の記事が、主に show 系のコマンドの実行を担うのに対して、こちらのvyos_config
モジュールは、コンフィギューレーションモード移行後の設定変更コマンドの実行を担います。
また、Ansible の vyos
モジュール郡の中には、他にもvyos_interfaces
モジュールや、vyos_l3_interfaces
モジュールなどの、特定の機能専用のモジュールもあります。これらの機能専用のモジュールは、コマンドを直接指定するタイプではなく、モジュールのオプションを駆使して設定変更するモジュールです。
機能専用のモジュールがない場合は、今回紹介する vyos_config
モジュールを利用する形になります。
■ 構成・想定
構成や、インベントリファイル、変数定義ファイルは、前回の記事と同じものとします。
■ 設定変更例1: 単純なベタ書きコマンド指定
まずは、単純に Playbook 内にコマンドをベタ書きする Playbook です。
Playbook 作成
例として、参照 NTP サーバーの設定をします。
実行前は、以下の通りの3大台が設定済みの状態です。
vagrant@vyos:~$ show configuration commands | match ntp set system ntp server '0.pool.ntp.org' set system ntp server '1.pool.ntp.org' set system ntp server '2.pool.ntp.org'
Playbook は以下のとおりです。
confg01_basic.yml
--- - hosts: vyos gather_facts: false tasks: - name: configuration vyos_config: lines: - set system ntp server 10.0.1.123 - set system ntp server 10.0.2.123
lines
オプションに、実行したい設定変更もコマンドをリストで指定します。
これで、commit までされます。
また、vyos_config
モジュールには他にもsave
オプションがあります。デフォルト no
で、設定変更が発生したときのみ save
します。常に save
したい場合は、 yes
を指定します。
Playbook 実行
Playbook を実行します。
$ ansible-playbook -i inventory.ini confg01_basic.yml PLAY [vyos] ******************************************************************************** TASK [configuration] *********************************************************************** changed: [vyos1] PLAY RECAP ********************************************************************************* vyos1 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
実際に設定変更が行われたので、changed
となりました。
なお、もう一度 Playbook を実行すると changed
にはなりません。Playbook で指定したコンフィグがすでに入っていて、Ansible が設定不要と判断するためです。
確認
VyOS 側でコンフィグを確認します。
vagrant@vyos:~$ show configuration commands | match ntp set system ntp server '0.pool.ntp.org' set system ntp server '1.pool.ntp.org' set system ntp server '2.pool.ntp.org' set system ntp server '10.0.1.123' set system ntp server '10.0.2.123'
10.0.1.123
と 10.0.2.123
の分が追加されました。
応用: 安全にコンフィグ差分を確認する
ansible-playbook
コマンドの --cechk
オプションと、--diff
オプションを併用すると、「このPlaybook実行によってどなコンフィグ差分が発生するか」を設定変更を適用せずに確認できます。
$ ansible-playbook -i inventory.ini confg01_basic.yml --check --diff PLAY [vyos] ******************************************************************************************************* TASK [configuration] ********************************************************************************************** [edit system ntp] +server 10.0.1.123 { +} +server 10.0.2.123 { +} [edit] changed: [vyos1] PLAY RECAP ******************************************************************************************************** vyos1 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
■ 設定変更例2: Jinja2 テンプレートを利用したコマンド投入
次に、Playbook 内にコマンドをベタ書きせず、Jinja2 テンプレートを利用して、効率的にコマンドを投入する Playbook です。
Playbook 作成
先程に続いて、参照 NTP サーバーの設定(追加)をします。
続きなので、ここでは以下の通り5台が設定済みの状態です。
vagrant@vyos:~$ show configuration commands | match ntp set system ntp server '0.pool.ntp.org' set system ntp server '1.pool.ntp.org' set system ntp server '2.pool.ntp.org' set system ntp server '10.0.1.123' set system ntp server '10.0.2.123'
Playbook は以下のとおりです。
confg02_tepmplate.yml
--- - hosts: vyos gather_facts: false vars: ntp_servers: # NTP サーバーを変数として定義 - 10.0.3.123 - 10.0.4.123 tasks: - name: configuration vyos_config: src: ntp.j2 # Jinja2 テンプレートファイルを読み込む
src
オプションに、読み込む Jinja2 ファイル名を指定します(あとで作成します)。
Jinja2 テンプレートファイルの作成
先どの Playbook が読み込む ntp.j2
を作成します。
ntp.j2
{% for n in ntp_servers %} set system ntp server {{ n }} {% endfor %}
変数 ntp_servers
は、今回の場合、Playbook の Play の vars
で指定したものを示します。
変数 ntp_servers
には、10.0.3.123
、10.0.4.123
の2台のアドレスが定義されているので、この for
は2会繰り返すことになり、結果として以下の set
文を生成します。
set system ntp server 10.0.3.123 set system ntp server 10.0.4.123
Playbook 実行
Playbook を実行します。
$ ansible-playbook -i inventory.ini confg02_tepmplate.yml PLAY [vyos] ************************************************************************************************************ TASK [configuration] *************************************************************************************************** changed: [vyos1] PLAY RECAP ************************************************************************************************************* vyos1 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
実際に設定変更が行われたので、changed
となりました。やはり、もう一度 Playbook を実行すると changed
にはなりません。
確認
一応、VyOS 側でコンフィグを確認します。
vagrant@vyos:~$ show configuration commands | match ntp set system ntp server '0.pool.ntp.org' set system ntp server '1.pool.ntp.org' set system ntp server '2.pool.ntp.org' set system ntp server '10.0.1.123' set system ntp server '10.0.2.123' set system ntp server '10.0.3.123' set system ntp server '10.0.4.123'
10.0.3.123
と 10.0.4.123
の分が追加されました。
■ おわりに
vyos_config
モジュールを利用して、コマンドべた書きと、テンプレートを利用したコマンド投入 Playbook 例をご紹介しました。
他の機能についてか、公式ドキュメントを参照してください。(再掲)