概要
- 開発環境・stage環境・本番環境等....
環境が増えてくると、環境の違いにより、設定値が異なってきたりして、手動で変えるなんてもう面倒臭すぎるのでホスト変数を使って楽々運用にする。
環境情報
種類 | バージョン |
---|---|
OS | centos6.7 |
ansible | 2.3.1.0 |
python | 2.6.6 |
- また、今回は対象のサーバも下記のように用意しています。
環境 | IP | OS |
---|---|---|
dev | 192.168.33.11 | CentOS6.7 |
stage | 192.168.33.12 | CentOS6.7 |
production | 192.168.33.13 | CentOS6.7 |
ディレクトリ構成
こんなシンプルなもので大丈夫です。秒で作れますね
(仮想環境は必ず1台以上用意してください。)
.
├── test.yml
├── group_vars
│ └── main.yml
└── hosts
ansibleの環境構築に関してはこちらを参考にしてください。
ホスト変数とは
簡単にいうと、特定のホスト固有の変数....ですかね...
ホスト変数の設定
-
inventoryファイルにはまず、環境ごとにグループ分けをしましょう
hosts[dev] 192.168.33.11 [stage] 192.168.33.12 [prod] 192.168.33.13
-
ホスト変数の設定
- 書き方は2通りくらいあるが、私は下記の書き方が好きです。
hosts[dev] 192.168.33.11 [stage] 192.168.33.12 [prod] 192.168.33.13 [dev:vars] dev=yes stage=no prod=no [stage:vars] dev=no stage=yes prod=no [prod:vars] dev=no stage=no prod=yes
それぞれにdev
、stage
、prod
と言うホスト変数を用意して、
実行対象のグループによって、どの変数にどんな値を入れるか、環境によって分けれます。
-
動作確認
- main.ymlに簡単なタスクを作って動作確認してみます。
main.yml--- - hosts: all remote_user: vagrant tasks: - name: debug debug: msg="{{ dev }},{{ stage }},{{ prod }}" tags: debug
- 実行
$ ansible-playbook -i hosts main.yml --diff --tags debug PLAY [all] ************************************************************************************************************************************************************************** TASK [Gathering Facts] ************************************************************************************************************************************************************** ok: [192.168.33.11] ok: [192.168.33.12]
ok: [192.168.33.13]
TASK [debug] ************************************************************************************************************************************************************************
ok: [192.168.33.11] => {
"msg": "yes,no,no"
}
ok: [192.168.33.12] => {
"msg": "no,yes,no"
}
ok: [192.168.33.13] => {
"msg": "no,no,yes"
}
PLAY RECAP **************************************************************************************************************************************************************************
192.168.33.11 : ok=2 changed=0 unreachable=0 failed=0
192.168.33.12 : ok=2 changed=0 unreachable=0 failed=0
192.168.33.13 : ok=2 changed=0 unreachable=0 failed=0
```
- ↑のようにホスト変数の値は、dev,stage,prodで適切な値が格納されていることがわかります。
ホスト変数活用(条件分岐)
それではホスト変数も設定できたことですし、その値によって条件分岐をさせてみましょう
今回は、環境によって変わってくるパスワードを設定することを仮定して、passwordという変数の値をホスト変数の値によって条件分岐させて変える。
値の確認はdebugモジュール
でpasswordという変数の中身を確認してみます。
-
ホスト変数を設定
hosts[dev]
192.168.33.11
[stage]
192.168.33.12
[prod]
192.168.33.13
[dev:vars]
dev=true
stage=
prod=
[stage:vars]
dev=
stage=true
prod=
[prod:vars]
dev=
stage=
prod=true
```
-
グループ変数を設定
ansibleの条件分岐はjinja2 というテンプレートエンジンを利用して下記のように書けます。var1: "{% if hoge %}true{% else %}false{% endif %}" var2: "{% if hoge %}true{% elif fuga %}true{% else %}false{% endif %}"
上記を参考にpasswordに値を設定する。
- dev環境: dev_password
- stage環境: stage_password
- 本番環境: prod_password
group_vars/main.yml--- password: "{% if dev %}dev_password{% elif stage %}stage_password{% elif prod %}prod_password{% endif %}"
-
動作確認
main.ymlにまた簡単なタスクを作って動作確認してみます。main.yml--- - hosts: all remote_user: vagrant tasks: - name: debug debug: msg="{{ password }}" tags: debug
-
実行
$ ansible-playbook -i hosts main.yml --diff --tags debug PLAY [all] ************************************************************************************************************************************************************************** TASK [Gathering Facts] ************************************************************************************************************************************************************** ok: [192.168.33.11] ok: [192.168.33.12] ok: [192.168.33.13] TASK [debug] ************************************************************************************************************************************************************************ ok: [192.168.33.11] => { "msg": "dev_password"
}
ok: [192.168.33.12] => {
"msg": "stage_password"
}
ok: [192.168.33.13] => {
"msg": "prod_password"
}
PLAY RECAP **************************************************************************************************************************************************************************
192.168.33.11 : ok=2 changed=0 unreachable=0 failed=0
192.168.33.12 : ok=2 changed=0 unreachable=0 failed=0
192.168.33.13 : ok=2 changed=0 unreachable=0 failed=0
```
↑を見ていただければわかるように、環境ごとに適当な値が入っていることがわかります。
- dev環境: passwordにdev_password
- stage環境: passwordにstage_password
- 本番環境: passwordにprod_password