Posted at

Ansible で設定をファイルに外出しする

More than 3 years have passed since last update.

接続するユーザー名とか、単一ホストであれば 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') }}