LoginSignup
3

More than 5 years have passed since last update.

Molecule で ansible の config を設定する

Last updated at Posted at 2018-09-27

ansible の role を作っている際に、ansible.cfg を置かずにデフォルトのままだと、become(sudo) をしてくれなかったり、失敗した時に playbook.retry を作成してくれます。
しかし、毎回実行時引数で設定するのは面倒なので、以下のようにansible.cfg で設定するのはよくやると思います。

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

provisioneroptionconfig_options で指定してあげると、vagrant で上げる時は適用されずに、provision 時にのみ効くようになります。

ちなみに、config_options で全部設定できるのでは?と思いましたが、キーとしては defaultsprivilege_escalation だけのようです。2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3