ansible の role を作っている際に、ansible.cfg
を置かずにデフォルトのままだと、become(sudo) をしてくれなかったり、失敗した時に playbook.retry を作成してくれます。
しかし、毎回実行時引数で設定するのは面倒なので、以下のようにansible.cfg
で設定するのはよくやると思います。
[defaults]
retry_files_enabled = False
[privilege_escalation]
become = True
これを、Molecule1 で実行する ansible でも適用したいときにどうすればいいでしょうか。
前提条件
- molecule の driver を vagrant にしている
- おそらく vagrant 以外は発生しない
だめだった例
molecule.yml
で provisioner の env として ANSIBLE_CONFIG を与える方法
provisioner:
name: ansible
env:
ANSIBLE_CONFIG: PATH/TO/ansible.cfg
一見良さそうですが、provisioner を vagrant にした時(network 設定を変えるテストをしたいときとか)に失敗しました。
molecule はテスト用の vagrant も ansible 経由で立ち上げますが、その際にも上記の ansible.cfg
が適用されてしまい、実行環境で sudo をしようとして、molecule の実行ユーザに sudo の権限がないと provision が失敗します。
正解
provisioner:
name: ansible
options:
become: True
config_options:
defaults:
retry_files_enabled: False
provisioner
に option
や config_options
で指定してあげると、vagrant で上げる時は適用されずに、provision 時にのみ効くようになります。
ちなみに、config_options
で全部設定できるのでは?と思いましたが、キーとしては defaults
か privilege_escalation
だけのようです。2