変数の定義
プレイブック内の設定値を環境によって柔軟に変えられるよう変数が用いられます。
変数には大きくgroup_vars
に定義するグループ単位の環境変数、host_vars
に定義するホストサーバ単位の変数があります。
変数の割り当て処理は下記のように処理されていき、 末端に定義してある変数から優先的に処理されていくようになっています。
- extra vars
- タスクのvars
- ブロックのvars
- ロールのvars/includeした変数ファイル
- set_facts
- 処理でregisterした変数
- 処理内vars_filesで指定のファイルで定義された変数
- 処理内vars_promptでプロンプトから渡された変数
- 処理内のvarsで定義された変数
- ファクト(setupで拾ってきた値)
- Playbookで定義されたhost_vars
- Playbookで定義されたgroup_vars
- インベントリで定義されたhost_vars
- インベントリで定義されたgroup_vars
- インベントリで定義された変数
- ロールのデフォルト(/roles/~/defaults/main.yml)
group_vars
まず大きなくくりで環境に合わせた設定を行っていきます。
group_vars
内には下記のような単位でグループ分けされています。
このグループ名はhosts
に格納したグループ名とリンクしています。
- group_vars
- all
- production
- stage
- develop
各ファイルの意味は同様、all
のみ特別な変数定義ファイルとなっています。
変数の処理順序にあるようにall
で定義された変数はどのような環境であっても最後に必ず読み込まれるファイルになっています。
そのためデフォルト変数を定義するファイルとして利用されます。all
ファイルはデフォルト変数を定義、管理するファイルのため、
利用案件ごとにセットアップするときに編集する事はありません。
逆にall
ファイルには全てのプレイブック用変数が定義してあるため、
内容を確認し、上書きしたい変数を各グループファイルに定義していきます。
例えばSSHの場合デフォルトall
ではrootログインが出来ないように設定する変数となっていますが、
# vim group_vars/all
sshd_rootlogin: 'no'
開発環境ではその制限が不要の場合、下記のように記載します。
# group_vars/develop
sshd_rootlogin: 'yes'
host_vars
ホスト単位で変数を変更したい場合にhost_vars
に変数を格納します。
host_varsに格納するホスト変数ファイルは
hosts`に記載したホスト名とリンクしています。
例えばhosts/production
にて下記のように定義していた場合
[webservers]
pweb-01 ansible_ssh_host=192.168.153.11
このホストに対して変数を定義するファイルはhost_vars/pweb-01
として格納します。