接続するユーザー名とか、単一ホストであれば IP アドレスとか、あるよね ?
こういうファイルを作っておいて読み込ませたい !!
conf.yml
---
ip_address: 192.168.50.120
host_name: web01.example.com
こういうときに使える Ansible の仕組みは 2 つ。
vars_files
こういう感じで指定する。
playbook.yml
---
- hosts: web01
vars_files:
- conf.yml
roles:
- common
- web
するとテンプレート内で以下のように使える。 hosts に自分の IP アドレスとホスト名を付け加える例。
hosts.j2
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
{{ ip_address }} {{ host_name }}
ansible-playbook の --extra-vars オプション
vars_files
は指定されたファイルが存在していることが前提みたい。ないと怒られる。
ファイル指定しなくても動くけどしたら設定値書き換えられるよ、ということがしたい場合は以下のように playbook 実行時に指定してやる。
play-with-extra-vars.sh
ansible-playbook playbook.yml --extra-vars="@conf.yml"
注意点として Ansible は基本的に定義されてない変数名があるとエラー吐いて止まるのでテンプレート内とかで使うときには default フィルターを使ってここらへんを迂回してやる。上記の hosts の例だと以下のようになる。
hosts-with-defaults.j2
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
{{ ip_address | default('192.168.50.100') }} {{ host_name | default('web01.example.com') }}