使用 Molecule 进行 Ansible 配置的设置
当创建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 时(比如在进行网络配置更改测试时),失败了。
分子将通过ansible在测试Vagrant上启动,但在此过程中也将应用上述的ansible.cfg,并且在执行环境中尝试使用sudo进行操作时,由于分子执行用户缺少sudo权限,因此provision会失败。
答案正确
provisioner:
name: ansible
options:
become: True
config_options:
defaults:
retry_files_enabled: False
当通过选项和配置选项将其指定给提供程序时,它不会在启动vagrant时应用,而仅在提供时生效。
顺便问一下,在config_options中是否可以进行所有的设置呢?我认为只有默认或特权提升这两个键可以设置。
分子的资料在这里: https://qiita.com/ysknkd/items/c738bb01f355dc378e94 ↩
https://github.com/metacloud/molecule/blob/6fabd378ed5cd8d9ec1803df2a777afd95e41037/molecule/model/schema_v2.py#L273-L296 ↩