Nic*_*Roz 9 variables redefinition ansible
假设我在group_vars中有3个文件:
abc.yml
all.yml
xyz.yml
Run Code Online (Sandbox Code Playgroud)
并且在它们中定义了相同的变量:
- my_var: abc
- my_var: all
- my_var: xyz
Run Code Online (Sandbox Code Playgroud)
Ansible 文档说:
在任何部分中,重新定义var将覆盖先前的实例.如果多个组具有相同的变量,则加载的最后一个组获胜.如果你在play的vars:section中定义了两次变量,那么第二个获胜.
这是否意味着加载顺序是按字母顺序排列的,abc.yml
具有最低优先级,而xyz.yml
最高,或者它取决于组的顺序hosts
?
什么是装货单?
有趣的是,改变组中的组顺序hosts
也是如此,但是以不可预测的方式.
我尝试运行ansible-playbook my_var.yml -c local
(只返回变量值)的所有组合:
[all]
localhost
[xyz]
localhost
[abc]
localhost
Run Code Online (Sandbox Code Playgroud)
但我仍然无法弄清楚它是如何工作的.
小智 7
ansible 文档现在对这种行为非常清楚......
https://docs.ansible.com/ansible/2.6/user_guide/intro_inventory.html#how-variables-are-merged
当同一父/子级别的组合并时,按字母顺序完成,最后加载的组会覆盖之前的组。例如,a_group 将与 b_group 合并,匹配的 b_group 变量将覆盖 a_group 中的变量。
从 Ansible 2.4 版本开始,用户可以使用组变量 ansible_group_priority 来更改同级别组的合并顺序(在父/子顺序解决后)。数字越大,合并越晚,优先级越高。如果未设置,此变量默认为 1。例如:
Run Code Online (Sandbox Code Playgroud)a_group: testvar: a ansible_group_priority: 10 b_group testvar: b
在这个例子中,如果两个组具有相同的优先级,结果通常是 testvar == b,但由于我们给 a_group 更高的优先级,结果将是 testvar == a。