问题描述
在创建Ansible playbook时,通常会在顶部添加一个注释部分,说明如何运行Ansible playbook。随着Ansible中可用选项的增多,命令行参数的列表似乎也在增长。这让用户好奇是否有办法在playbook中指定这些参数的默认值。
例如,用户的playbook需要以下参数:
– 主机文件:-i hosts
– become密码:-K
– vault密码:--ask-vault-pass
– playbook的名称:myplaybook.yml
如果用户能够只运行以下命令(特别是对于同事来说),将会更方便:
ansible-playbook myplaybook.yml
并且在playbook中指定默认情况下应该查找hosts
清单文件并询问sudo和vault密码。当然,用户可以创建一个脚本来包装playbook命令,但这会增加额外的层次。
用户想知道是否可以在playbook中添加类似以下内容:
vars:
inventory_file: hosts
ask_become_pass: true
ask_vault_pass: true
是否有这样的可能性?
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
用户可以使用配置文件来实现这个目的。在运行ansible
命令的目录中创建一个ansible.cfg
文件,内容如下:
[defaults]
inventory = hosts
ask_vault_pass = True
[privilege_escalation]
become_ask_pass = True
更多配置文件的详细信息可以参考http://docs.ansible.com/ansible/latest/reference_appendices/config.html。
在工作目录中的ansible.cfg
文件将覆盖/etc/ansible/ansible.cfg
文件。完整的搜索顺序在上面链接的页面中有描述。通过命令行传递的选项将覆盖所有配置文件。
方案2
根据回答1的最佳回答,无法在playbook中指定
ask_vault_pass
。可以将vault_password
指定为一个密钥,但我不确定这对你是否可行。我还没有使用过vaults,所以无法告诉你更多。
根据回答1中的最佳回答,无法在playbook中指定ask_vault_pass
。可以将vault_password
指定为一个密钥,但我不确定这对你是否可行。我还没有使用过vaults,所以无法告诉你更多。
以上是两种解决方案,你可以根据自己的需求选择适合的方法来指定默认参数。