首页 文章

Ansible集团优先考虑

提问于
浏览
7

假设我在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 回答

  • 0

    看起来来自Ansible git存储库的以下问题可能已经解决了您描述的行为:Ansible group_vars from inventory don't support repeated hosts

    查看关联提交中的code changes,看起来现在组应按深度排序,然后按名称(按字母顺序)排序 .

    值得注意的是,这种行为可能会根据您运行的Ansible版本而有所不同,因为这些更改仅合并到Ansible存储库的stable-2.2分支中 .

  • 0

    现在这个行为的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 . 例如:a_group:
    testvar:a
    ansible_group_priority:10
    b_group
    testvar:b
    在这个例子中,如果两个组具有相同的优先级,结果通常是testvar == b,但由于我们给a_group一个更高的优先级,结果将是testvar == a .

  • 0

    我想说Ansible在这种情况下的行为是未指明的 .

相关问题