Ansibleでgroup_varsが読み込まれないと思ったら

Ansibleでgroup_varsが読み込まれないとしばらく悩んでいたら、デフォルトでは変数を優先度に従って上書きするようだ。

$ cat group_vars/db.yml
mysql:
  root:
    password: password

$ cat host_vars/db1.yml
mysql:
  cnf:
    server_id: 100

上記の場合、host_varsの方が優先度が高いため、mysqlが上書きされ、mysql.rootは未定義となる。

環境

  • Ansible 2.8

対策

Ansibleの設定hash_behaviourをmergeにする。

$ cat ansible.cfg
[defaults]
hash_behaviour = merge

上記によって、hashがマージされるので、mysql.rootが上書きされることはなくなる。 ただし、Ansibleとしてはおすすめしない設定とのこと。

備考