Ansible group_vars文件以匹配多个组

Ansible group_vars文件以匹配多个组,ansible,ansible-inventory,Ansible,Ansible Inventory,这可能是一个奇怪的问题,我相信我已经看到了这一点,但忽略了书签 我有多个组中存在的主机: [group1] host1 [group2] host2 [group3] host1 host3 我想为这些主机设置组vars文件(这是最简单最明显的部分): ,还可以使用以下模式为存在的主机分组变量: group1:&group3 这可以通过一个group\u vars文件来完成吗?例如: group_vars/group1:&group3.yml 我确信我见过这种样式的文件

这可能是一个奇怪的问题,我相信我已经看到了这一点,但忽略了书签

我有多个组中存在的主机:

[group1]
host1

[group2]
host2

[group3]
host1
host3
我想为这些主机设置组vars文件(这是最简单最明显的部分):

,还可以使用以下模式为存在的主机分组变量:

group1:&group3
这可以通过一个group\u vars文件来完成吗?例如:

group_vars/group1:&group3.yml
我确信我见过这种样式的文件名,但我不知道如何使用它。

(编辑:这个答案基本上仍然有效,但下面有一个更新)

植物提取物

注:

组加载遵循父/子关系。然后按照字母顺序合并相同“父/子”级别的组。最后一个可由用户通过ansible_group_priority(所有组默认为1)取代。此变量ansible\u group\u priority只能在库存源中设置,而不能在group\u vars/中设置,因为该变量用于加载group\u vars/

基于此,你能做的就是:

  • 将group3作为group1和group2的父组。然后,为组3定义的变量将自动用于组1和组2:

    [group1]
    host1
    
    [group2]
    host2
    
    [group3:children]
    group1
    group2
    
  • 在任何地方定义变量,并依赖它们的加载顺序,或使用
    ansible\u group\u priority
    在库存源中修复此顺序

现在如果您考虑根据您在游戏中的目标组使用不同的VAR值,请忘记它:ansible从库存/游戏手册中的所有组加载所有VAR,无论您的目标是什么

我建议你深入阅读这本书


(更新)

自从我的上述回答以来,情况有了一些变化。尽管结论没有真正改变,而且您仍然无法根据游戏中的
hosts
目标来决定获得哪个变量值,但ansible引入了一些灵活性,允许您定义
ansible\u group\u优先级
,以在清单解析时覆盖默认的ASCII顺序

请注意,此变量只能在库存源中设置,而不能在
组变量
文件中设置

现在,文档的新部分对此进行了解释:。相关摘录:

顺序/优先级为(从最低到最高):

  • 所有组(因为它是所有其他组的“父级”)
  • 父组
  • 子组
  • 主人
默认情况下,Ansible以ASCII顺序合并同一父/子级别的组,最后加载的组覆盖以前的组。例如,a_组将与b_组合并,匹配的b_组变量将覆盖a_组中的变量

您可以通过设置组变量ansible_group_priority来更改相同级别组的合并顺序(在解析父/子顺序后),从而更改此行为。数字越大,合并越晚,优先级越高。如果未设置,此变量默认为1


有点像那样,但不是我想要的。我理解亲子关系,这是一个关于限制的问题。如果你看这个例子,第三组不是儿童的容器,它是一个混合体。我想为存在于组1和组3中的服务器指定组变量,而不是同时存在于组1和组3中,因此模式
group1:&group3
,因此应该只匹配host1。该模式允许您决定目标主机。正如我在上面的回答中所说,这对组变量的加载方式没有影响。所有这些都是,无论你在游戏中使用什么模式。
[group1]
host1

[group2]
host2

[group3:children]
group1
group2