2015年12月11日金曜日

Ansibleのグループ変数(?)について調べてみた

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 件のコメント:

コメントを投稿