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
(更新) 自从我的上述回答以来,情况有了一些变化。尽管结论没有真正改变,而且您仍然无法根据游戏中的
hosts
目标来决定获得哪个变量值,但ansible引入了一些灵活性,允许您定义ansible\u group\u优先级
,以在清单解析时覆盖默认的ASCII顺序
请注意,此变量只能在库存源中设置,而不能在组变量
文件中设置
现在,文档的新部分对此进行了解释:。相关摘录:
顺序/优先级为(从最低到最高):
- 所有组(因为它是所有其他组的“父级”)
- 父组
- 子组
- 主人
有点像那样,但不是我想要的。我理解亲子关系,这是一个关于限制的问题。如果你看这个例子,第三组不是儿童的容器,它是一个混合体。我想为存在于组1和组3中的服务器指定组变量,而不是同时存在于组1和组3中,因此模式
group1:&group3
,因此应该只匹配host1。该模式允许您决定目标主机。正如我在上面的回答中所说,这对组变量的加载方式没有影响。所有这些都是,无论你在游戏中使用什么模式。
[group1]
host1
[group2]
host2
[group3:children]
group1
group2