■ はじめに
例えば、グループ名が junos
の場合、 gourp_vars/junos.yml
のような ファイルを用意して、グループ共通で利用する変数を定義すできます。このとき、ファイル名はグループ名(ここでは junos
)を含む形式に固定されます。
応用的なやり方として、gourp_vars/junos
ディレクトリ を用意すると、そのディレクトリ配下に、複数の任意の名前の変数ファイルを置くことができます。
- グループ名ディレクトリを利用した変数ファイルの配置例
. |-- group_vars | `-- junos # グループ名のディレクトリ | |-- commands.yml # junos が利用する変数ファイル | |-- general.yml # junos が利用する変数ファイル | `-- login.yml # junos が利用する変数ファイル
group_vars/グループ名
ディレクトリだけでなく, host_vars/ホスト名
ディレクトリでも同じです。
公式ドキュメント上の記載
As an advanced use case, you can create directories named after your groups or hosts, and Ansible will read all the files in these directories in lexicographical order.
なお、複数ファイルで変数定義が競合した場合はファイル名順で後にロードされたものが採用されます。(Ansible 徹底入門 P152から)
■ サンプル
具体的なサンプルで動作例をご紹介します。
ここでは group_vars/junos
ディレクトリ を作成し、その中にログイン情報、汎用的な情報、コマンド情報を定義した3つの変数フィアルを用意しています。
- ファイル構成
. |-- group_vars | `-- junos | |-- commands.yml | |-- general.yml | `-- login.yml |-- inventory `-- varstest.yml
インベントリファイル
- inventory
[junos] vsrx1 ansible_host=172.16.0.1
変数ファイル
- group_vars/junos/login.yml (ログイン情報を定義)
--- ansible_network_os: junos ansible_connection: netconf ansible_user: admin ansible_password: admin9999
- group_vars/junos/commands.yml (実行したいコマンドを定義)
--- show_commands: - show version - show configuration - show interfaces
- group_vars/junos/general.yml(汎用的な変数を定義)
--- greeting_msg: Hello, Junos!
Playbook
- varstest.yml
- hosts: junos gather_facts: no tasks: - name: command test junos_command: commands: "{{ item }}" loop: "{{ show_commands }}" # group_vars/junos/commands.yml 内の変数 - name: debug test debug: msg: "{{ greeting_msg }}" # group_vars/junos/general.yml 内の変数
実行結果
$ ansible-playbook -i inventory varstest.yml PLAY [junos] *************************************************************** TASK [command test] ******************************************************** ok: [vsrx1] => (item=show version) ok: [vsrx1] => (item=show configuration) ok: [vsrx1] => (item=show interfaces) TASK [debug test] ********************************************************** ok: [vsrx1] => { "msg": "Hello, Junos!" } PLAY RECAP ***************************************************************** vsrx1 : ok=2 changed=0 unreachable=0 failed=0
これにより、以下の 3つのことが確認できました。
group_vars/junos/login.yml
で定義したログイン情報によってログインしたgroup_vars/junos/commands.yml
で定義したコマンドを実行したgroup_vars/junos/general.yml
で定義したあいさつ文が表示された