LoginSignup
42
46

More than 5 years have passed since last update.

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

Posted at

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
42
46