我想知道在我们的许多剧本中使用的全局安装的Ansible角色(/etc/local/ansible
)中使用的自定义/覆盖变量的最佳做法是什么?
此类角色可能包含defaults/main.yml
以及vars/
中的变量。
在我的本地剧本中要求全局安装的角色后,自定义这些变量是很自然的。由于无法直接访问角色的目录,我唯一的选择是覆盖group_vars
/ host_vars
中的这些变量吗?或者,也许直接在剧本中传递压倒性的变量,但这似乎不是一个好主意?
答案 0 :(得分:0)
咨询docs on variable precedence。他们特别指出:
基本上,任何进入“角色默认值”(角色内的默认文件夹)的内容都是最具延展性且容易被覆盖的。角色的vars目录中的任何内容都会覆盖命名空间中该变量的先前版本。这里要遵循的想法是,你在范围上越明确,命令行所需的优先级越多 - 额外的变量总是获胜。主机和/或库存变量可以胜过角色默认值,但不是明确的包括vars目录或include_vars任务。
因此,给定优先级列表,您应该找到最合理的变量。
请注意,Ansible版本1和2之间的优先级规则不同。
答案 1 :(得分:0)
vars of roles并不意味着被覆盖。如果他们是,他们是(或应该)默认。只能使用从命令行传递的--extra-vars
来覆盖变量。
答案 2 :(得分:0)
您可以在JSON / YAML文件中定义要覆盖的所有变量,并使用--extra-vars
传递给剧本。例如:ansible-playbook site.yml -i inventory --extra-vars @vars.json