Ansible - 覆盖全局安装角色的变量

时间:2015-11-19 22:01:02

标签: ansible

我想知道在我们的许多剧本中使用的全局安装的Ansible角色(/etc/local/ansible)中使用的自定义/覆盖变量的最佳做法是什么?

此类角色可能包含defaults/main.yml以及vars/中的变量。

在我的本地剧本中要求全局安装的角色后,自定义这些变量是很自然的。由于无法直接访问角色的目录,我唯一的选择是覆盖group_vars / host_vars中的这些变量吗?或者,也许直接在剧本中传递压倒性的变量,但这似乎不是一个好主意?

3 个答案:

答案 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