des*_*key 3 ansible ansible-inventory
这可能是一个奇怪的问题,我确信我已经看到了这个问题,但忽略了将其添加为书签。
我的主机存在于多个组中:
[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_group_priority 取代最后一个,所有组的默认值为 1。这个变量 ansible_group_priority 只能在清单源中设置,不能在 group_vars/ 中设置,因为该变量用于加载 group_vars/。
因此,基于此,您几乎可以做的就是:
让 group3 作为 group1 和 group2 的父组。为 group3 定义的变量将自动用于 group1 和 group2:
[group1]
host1
[group2]
host2
[group3:children]
group1
group2
在任何地方定义 vars 并依赖它们的加载顺序或在您的库存源中使用ansible_group_priority.
现在,如果您考虑根据您在游戏中定位的组使用不同的 vars 值,请忘记它:无论您的目标是什么,ansible 都会加载库存/剧本中所有组的所有变量。
(更新)
自从我上面的回答以来,情况发生了一些变化。尽管结论并没有真正改变,并且您仍然无法根据hosts您的游戏中的目标决定获取哪个变量值,但 ansible 引入了一些灵活性,让您定义 anansible_group_priority以在库存解析时覆盖默认的 ASCII 顺序。
请注意,此变量只能在清单源中设置,而不能在group_vars文件中设置
现在在文档的新部分对此进行了解释:如何合并变量。相关摘录:
顺序/优先级是(从最低到最高):
- 所有组(因为它是所有其他组的“父”)
- 家长组
- 儿童组
- 主持人
默认情况下,Ansible 以 ASCII 顺序合并同一父/子级别的组,最后加载的组会覆盖之前的组。例如,a_group 将与 b_group 合并,匹配的 b_group 变量将覆盖 a_group 中的变量。
您可以通过设置组变量 ansible_group_priority 来更改相同级别组的合并顺序(在解决父/子顺序后)来更改此行为。数字越大,合并越晚,优先级越高。如果未设置,此变量默认为 1。
| 归档时间: | 
 | 
| 查看次数: | 2503 次 | 
| 最近记录: |