假设我在group_vars中有3个文件:
abc.yml
all.yml
xyz.yml
并在其中定义相同的变量:
- my_var: abc
- my_var: all
- my_var: xyz
Ansible documentation说:
在任何部分中,重新定义var将覆盖先前的实例 . 如果多个组具有相同的变量,则最后一个变量将获胜 . 如果你在play的vars:section中定义了两次变量,那么第二个获胜 .
这是否意味着加载顺序是按字母顺序排列的,而 abc.yml
具有最低优先级,而 xyz.yml
是最高的,或者它取决于 hosts
中组的顺序?
What is the loading order?
有趣的是,改变 hosts
中组的顺序也改变了结果,但是以不可预测的方式 .
我尝试使用以下所有组合运行 ansible-playbook my_var.yml -c local
(仅返回变量值):
[all]
localhost
[xyz]
localhost
[abc]
localhost
但我仍然无法弄清楚它是如何工作的 .
3 回答
看起来来自Ansible git存储库的以下问题可能已经解决了您描述的行为:Ansible group_vars from inventory don't support repeated hosts
查看关联提交中的code changes,看起来现在组应按深度排序,然后按名称(按字母顺序)排序 .
值得注意的是,这种行为可能会根据您运行的Ansible版本而有所不同,因为这些更改仅合并到Ansible存储库的stable-2.2分支中 .
现在这个行为的ansible文档非常清楚......
https://docs.ansible.com/ansible/2.6/user_guide/intro_inventory.html#how-variables-are-merged
我想说Ansible在这种情况下的行为是未指明的 .