AnsibleはInventoryファイルやgroup_vars、プレイブックなどに変数を定義することが出来ます。
しかし、デフォルトでは同名の変数は上書きされてしまいます。
これは、たとえばdbというグループとwebというグループを作り、group_varsでwebとdbそれぞれに変数を定義した場合、それぞれのグループで有効。ではなく、すべてはマージされるということです。
では、どういう優先度でマージされるのでしょう?
っと調べてみたのですが、ハッキリした記述は見つけられませんでした。
また、Ansibleではグループを階層構造にすることが出来ます。
階層化したグループ名に対応するgroup_versもまた有効のようですが、同様に同名の変数が有った場合の優先度が不明です。
というわけで、このようなプレイブックを作成し、実際に動かしてみました。
$ ansible-playbook -i hosts.ini site.yml -c paramiko
PLAY [staging2] ***************************************************************
GATHERING FACTS ***************************************************************
ok: [192.168.0.130]
ok: [127.0.0.1]
TASK: [debug var=hoge] ********************************************************
ok: [127.0.0.1] => {
"var": {
"hoge": "web"
}
}
ok: [192.168.0.130] => {
"var": {
"hoge": "db"
}
}
TASK: [debug var=huga] ********************************************************
ok: [127.0.0.1] => {
"var": {
"huga": "www"
}
}
ok: [192.168.0.130] => {
"var": {
"huga": "dbdb"
}
}
PLAY [staging] ****************************************************************
GATHERING FACTS ***************************************************************
ok: [192.168.0.130]
ok: [127.0.0.1]
TASK: [debug var=hoge] ********************************************************
ok: [127.0.0.1] => {
"var": {
"hoge": "vars_hoge"
}
}
ok: [192.168.0.130] => {
"var": {
"hoge": "vars_hoge"
}
}
TASK: [debug var=huga] ********************************************************
ok: [127.0.0.1] => {
"var": {
"huga": "www"
}
}
ok: [192.168.0.130] => {
"var": {
"huga": "dbdb"
}
}
PLAY [web] ********************************************************************
GATHERING FACTS ***************************************************************
ok: [127.0.0.1]
TASK: [debug var=hoge] ********************************************************
ok: [127.0.0.1] => {
"var": {
"hoge": "web"
}
}
TASK: [debug var=huga] ********************************************************
ok: [127.0.0.1] => {
"var": {
"huga": "www"
}
}
PLAY [db] *********************************************************************
GATHERING FACTS ***************************************************************
ok: [192.168.0.130]
TASK: [debug var=hoge] ********************************************************
ok: [192.168.0.130] => {
"var": {
"hoge": "db"
}
}
TASK: [debug var=huga] ********************************************************
ok: [192.168.0.130] => {
"var": {
"huga": "dbdb"
}
}
PLAY [zaiko] ******************************************************************
GATHERING FACTS ***************************************************************
ok: [192.168.0.130]
ok: [127.0.0.1]
TASK: [debug var=hoge] ********************************************************
ok: [127.0.0.1] => {
"var": {
"hoge": "web"
}
}
ok: [192.168.0.130] => {
"var": {
"hoge": "db"
}
}
TASK: [debug var=huga] ********************************************************
ok: [127.0.0.1] => {
"var": {
"huga": "www"
}
}
ok: [192.168.0.130] => {
"var": {
"huga": "dbdb"
}
}
PLAY RECAP ********************************************************************
127.0.0.1 : ok=12 changed=0 unreachable=0 failed=0
192.168.0.130 : ok=12 changed=0 unreachable=0 failed=0
グループ名のアルファベット順で上書きされるのかなと思ったのですが、
どうやらそのホストが所属している一番末端のグループが優先ですが、プレイブック内のvarsセクションでの宣言が一番最優先のようです。
0 件のコメント:
コメントを投稿