在Ansible playbook中指定默认参数

95次阅读
没有评论

问题描述

在创建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,所以无法告诉你更多。

以上是两种解决方案,你可以根据自己的需求选择适合的方法来指定默认参数。

正文完