【问题标题】:Ansible group_vars files to match multiple groupsAnsible group_vars 文件以匹配多个组
【发布时间】:2019-09-23 10:42:25
【问题描述】:

这可能是一个奇怪的问题,我确信我已经看到了这个问题,但忽略了为它添加书签。

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

[group1]
host1

[group2]
host2

[group3]
host1
host3

我想为这些主机设置组变量文件(这是简单明显的部分):

group_vars/group1.yml
group_vars/group2.yml
group_vars/group3.yml

,并且还使用以下模式对存在的主机进行分组:

group1:&group3

这可以通过 group_vars 文件来完成吗?示例:

group_vars/group1:&group3.yml

我确定我见过具有这种模式样式的文件名,但我不知道如何让它工作。

【问题讨论】:

    标签: ansible ansible-inventory


    【解决方案1】:

    (编辑:这个答案大部分仍然有效,但下面有更新)

    documentation 的摘录

    注意:

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

    因此,基于此,您几乎可以做的就是:

    • 让 group3 成为 group1 和 group2 的父组。为 group3 定义的变量将自动用于 group1 和 group2:

      [group1]
      host1
      
      [group2]
      host2
      
      [group3:children]
      group1
      group2
      
    • 在任何地方定义变量并依赖于它们的加载顺序或使用ansible_group_priority 在您的库存源中修复此顺序。

    现在如果你想根据你在游戏中的目标组来设置不同的变量值,那就忘了它:无论你的目标是什么,ansible 都会从你的库存/剧本中的所有组加载所有变量.

    我建议你深入阅读explanations regarding where to place a variable


    (更新)

    自从我上面的回答以来,情况发生了一些变化。尽管结论并没有真正改变,并且您仍然无法根据游戏中的 hosts 目标来决定要获取哪个变量值,但 ansible 引入了一些灵活性,让您可以定义 ansible_group_priority 以覆盖库存中的默认 ASCII 顺序解析时间。

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

    现在在文档的新部分中对此进行了解释:How variables are merged。相关摘录:

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

    • 所有组(因为它是所有其他组的“父级”)
    • 父组
    • 子组
    • 主持人

    默认情况下,Ansible 按 ASCII 顺序合并同一父/子级别的组,最后加载的组会覆盖之前的组。例如,a_group 将与 b_group 合并,匹配的 b_group 变量将覆盖 a_group 中的变量。

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

    【讨论】:

    • 有点在那条轨道上,但不完全是我想要的。我理解父子关系,这是一个关于限制的问题。如果你看这个例子,第 3 组不是儿童的容器,它是一个混合体。我想为组 1 组 3 中存在的服务器指定 group_vars,而不是两者中,因此模式 group1:&group3,所以应该只匹配 host1。
    • patterns 让您决定目标主机。正如我在上面的回答中所说,这对加载组变量的方式没有影响。无论您在游戏中使用什么模式,所有这些都是。
    猜你喜欢
    • 2021-12-01
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    相关资源
    最近更新 更多