はじめに
Ansible は VyOS にも対応していて、設定の変更や、各種 show コマンドの実行による情報取得ができます。
この記事では、VyOS モジュールを利用するためのインベントリファイルの作成、認証情報の定義などの準備と、簡単な show コマンドを実行するサンプルをご紹介します。
- 動作確認環境
- Ansilbe 2.9.6
- VyOS Vagrant Box higebu/vyos
- 手軽に試せる Box を用意いただきありがとうございます。
【目次】
■ VyOS モジュールの基本
具体的なサンプルを紹介する前に、少しだけ VyOS モジュールの基本的なことを紹介します。
モジュールの例
Ansible 2.9 現在、15個の VyOS 用のモジュールがあります(非推奨除く)。
いくつか概要を紹介します。
モジュール名 | 概要 | 備考 |
---|---|---|
vyos_command |
主に show 系のコマンドを実行 |
|
vyos_config |
configure 後に設定するコマンドを実行 |
|
vyos_interfaces |
基本的なインターフェース設定(有効/無効、descriptionなど ) | Ansible 2.9 で追加。以前のバージョンでは、vyos_interface が利用可 |
vyos_l3_interfaces |
L3レベルのインターフェース設定(IPアドレスなど) | Ansible 2.9 で追加。以前のバージョンでは、vyos_l3_interface が利用可 |
vyos_user |
ユーザーの作成、削除など |
各モジュールの説明ページには、オプションの説明や使用例が掲載されています。
今回は、show version
コマンドを実行するため、vyos_command
モジュールを利用します。
接続・認証情報の指定方法
各 VyOS モジュール共通で定義が必要な、接続や認証情報については、各モジュールの説明ページに掲載されていません。
これらの情報は、以下の VyOS Platform Options
というページに掲載されています。
利用例はこの記事のあとでも紹介します。
■ 想定構成
以下の構成、を想定します。
- Ansible から VyOS の機器へは SSH 接続可能
- VyOS の機器の IP アドレスは 10.0.0.254
■ 各種ファイルの作成
今回は、以下のような構成で、ファイル、ディレクトリを作成します。
. ├── group_vars # グループ変数定義ファイル格納ディレクトリ │ └── vyos.yml # vyos グループ変数定義ファイル ├── inventory.ini # インベントリファイル └── show.yml # show コマンド実行 Playook
インベントリファイルの作成
まずは、接続先の情報を記載するインベントリファイルを作成します。
inventory.ini
[vyos] vyos1 ansible_host=10.0.0.254
意味は以下のとおりです。
vyos
グループがあるvyos
グループ内に、ホストvyos1
が定義されている(Ansibleが扱う便宜上の名前)- ホスト
vyos1
に接続するための IP アドレスは10.0.0.254
- もし、Ansible が
vyos1
を名前解決できる場合は、ansible_host
の指定不要
- もし、Ansible が
なお、デフォルトでは SSH 接続にポート 22/TCP を利用します。もし、環境の都合でそれ以外のポートで VyOS に接続する場合は、ansible_port
変数で指定します。
[vyos] vyos1 ansible_host=10.0.0.254 ansible_port=2222
変数定義ファイル
次に、vyos
グループ共通で利用する変数を定義するファイルを作成します。
group_vars/グループ名.yml
というパスで定義しておくと、そのグループに所属するホスト共通のグループ変数になります。vyos
グループの変数であれば、group_vars/vyos.yml
というファイルに名にします。
内容は、接続の方式や、認証情報を定義します。
group_vars/vyos.yml
--- ansible_network_os: vyos # ネットワークOS ansible_connection: network_cli # 接続方式 ansible_user: test_user # ユーザー名 ansible_password: test_passwrod # パスワード
各変数について説明します。
変数名 | 概要 | 備考 |
---|---|---|
ansible_network_os |
Ansible が、どのネットワークOSを対象とするか認識するための指定。VyOS が対象であれば vyos |
ansible_network_os で指定する値の一覧はこちら |
ansible_connection |
接続方式の指定。Ansible が内部でSSH でログインして CLI 操作するタイプは network_cli |
ネットワークOSと接続方式の対応表はこちら |
ansible_user |
VyOS にログインするユーザー名 | |
ansible_password |
VyOS にログインするパスワード |
なお、この記事では、説明を簡単にするために ansible_password
に平文を指定していますが、実際に利用する場合は、ansible-vault
や、Ansible Tower の Credential
機能などで暗号化を検討してください。
また、パスワード認証ではなく、公開鍵暗号方式で認証する場合は、ansible_password
変数の代わりに、ansible_private_key_file
変数で秘密鍵ファイルのパスを指定します。
- 秘密鍵指定の例
ansible_private_key_file: ~/.ssh/id_rsa
Playbook
次は、実際の処理内容を定義する Playbook を作成します。
--- - hosts: vyos # 対象を指定(実際は vyos1 1台) gather_facts: false tasks: - name: show version # (1) show version を実行するタスク vyos_command: commands: - show version register: result_version # コマンド実行結果を変数に保存 - name: debug version # (2) show version の結果を表示するタスク debug: msg: "{{ result_version.stdout_lines[0] }}"
各タスクについて説明します。
(1) show version を実行するタスク
vyos_command
モジュール を利用して、show version
コマンドを実行するタスクです。
実行するコマンドは、commands
オプションにリスト形式で指定します。リスト形式なので、複数commandの指定もできます。
コマンド実行結果は、register
ディレクティブを利用して、変数 result_version
に格納します。
(2) show version の結果を表示するタスク
debug
モジュール を利用して、コマンド実行結果を画面に表示するタスクです。
コマンド実行結果は、前のタスクで、変数 result_version
に格納したので、result_version
を利用します。
実際は、result_version
には付加情報が含まれています。コマンド実行結果そのものは、result_version.stdout
や result_version.stdout_lines
の中にあります。
上記 Playbook で指定している result_version.stdout_lines[0]
の意味は以下のとおりです。
stdout_lines
には、コマンド実行結果が1行1要素のリストとして格納される- 一方
stdout
には、改行コードを含めてそのまま格納される
- 一方
stdout_lines[0]
の[0]
は、vyos_command
モジュールのcommadns
の1番目に指定したコマンド(ここではshow version
)の結果が格納される- もし、2番目にも show コマンドを指定した場合は、
stdout_lines[1]
に格納される
- もし、2番目にも show コマンドを指定した場合は、
■ 実行
いよいよ Playbook の実行です。
Playbook の実行は、ansible-playbook
コマンドを利用します。
-i
オプションで、作成したインベントリファイル inventory.ini
を指定します。
そのあとに、作成した Playbook show.yml
を指定します(実際は順番は関係ないですが)。
$ ansible-playbook -i inventory.ini show.yml PLAY [vyos] ****************************************************************************************************** TASK [show version] ********************************************************************************************** ok: [vyos1] TASK [debug version] ********************************************************************************************* ok: [vyos1] => { "msg": [ "Version: VyOS 1.1.7", "Description: VyOS 1.1.7 (helium)", "Copyright: 2016 VyOS maintainers and contributors", "Built by: maintainers@vyos.net", "Built on: Wed Feb 17 09:57:31 UTC 2016", "Build ID: 1602170957-4459750", "System type: x86 64-bit", "Boot via: image", "Hypervisor: KVM", "HW model: VirtualBox", "HW S/N: 0", "HW UUID: 1CF07A22-373F-4D2D-B66A-BDA33E71AA02", "Uptime: 04:45:02 up 3:48, 2 users, load average: 0.00, 0.01, 0.05" ] } PLAY RECAP ******************************************************************************************************* vyos1 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
無事に show version
コマンドの結果が表示されました。
■ [少し応用編] コマンド実行結果をファイルに出力する
少しだけ応用した Playbook の紹介です。先程は コマンド実行結果を画面に表示する Playbook でした。今度は、画面ではなくファイルに出力してみます。コマンドを show configuration
に差し替えれば、コンフィグのバックアップとしても利用できす。
Playbook 作成
--- - hosts: vyos gather_facts: false tasks: - name: show version vyos_command: commands: - show version register: result_version - name: save to file copy: content: "{{ result_version.stdout[0] }}" dest: "show_version.log"
先程の Playbook と異なる点は、2個目タスクで copy
モジュールを利用している点です。
content
オプションで、ファイルの元ネタ、つまりコマンド実行結果を含む変数を指定します。ファイルには、改行コード含めて出力するため、stdout_lines[0]
ではなく stdout[0]
と指定します。
dest
オプションで、出力先のファイル名を指定します。ちょっとした工夫として、ファイル名の頭にインベントリ名(今回は vyos1
)を付加します。
Playbook 実行
$ ansible-playbook -i inventory.ini show_to_file.yml PLAY [vyos] ******************************************************************************************************* TASK [show version] *********************************************************************************************** ok: [vyos1] TASK [save to file] *********************************************************************************************** changed: [vyos1] PLAY RECAP ******************************************************************************************************** vyos1 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
確認
出力されたファイルの内容を確認します。
$ cat vyos1_show_version.log Version: VyOS 1.1.7 Description: VyOS 1.1.7 (helium) Copyright: 2016 VyOS maintainers and contributors Built by: maintainers@vyos.net Built on: Wed Feb 17 09:57:31 UTC 2016 Build ID: 1602170957-4459750 System type: x86 64-bit Boot via: image Hypervisor: KVM HW model: VirtualBox HW S/N: 0 HW UUID: 1CF07A22-373F-4D2D-B66A-BDA33E71AA02 Uptime: 05:03:19 up 4:06, 2 users, load average: 0.00, 0.01, 0.05
無事に出力されました。
■ おわりに
Ansible で VyOS を操作するための取っ掛かりになりそうな情報をまとめました。 今後、VyOS を対象にして、もう少し的をしぼった内容があれば、また投稿しようと思います。
参考
- vyos モジュール一覧
- vyos 向け接続・認証情報の定義法方
- VyOS を対象とした Playbook 例が掲載されている書籍(Ansible 2.8)