我有一种情况,我们有 3 层框,在每一层中我们应用不同的变量设置(比如缓存目录在哪里),但是有一堆默认值。我还需要在每个节点的基础上进行覆盖,这通常是通过主机本身的库存变量来完成的。我不确定组织主持人的最佳方式是什么,以便优先权对我有利。
这是我尝试过的不同方法。在每种情况下,我在库存文件中都有这样的条目:
[bots-fancy]
fancy-1
[bots-super-fancy]
super-1
[bots-magical]
magic-1
magic-2 provider=aws
起初,我让它们中的每一个都有一长串变量定义。我也有不同的group_var/bots/[bots-magical | bots-super-fancy | bots-fancy].yaml
文件。这很快就变得站不住脚了。
尝试1:使用剧本变量在剧本中我有这样的事情:
---
hosts:
- bots
vars_files:
- "group_vars/bots/defaults.yml"
- "group_vars/bots/{{ groups_names[0] }}.yml"
roles:
- somethign
这有效(虽然是脆弱的),但它不会让我在每个主机的基础上覆盖。我不得不偶尔在节点上设置不同的东西,但不是在整个组上。
尝试2:group_vars
为每个使用
我添加了
[bots:children]
bots-fancy
bots-super-fancy
bots-magical
到主机文件。vars_files
从剧本中删除任何内容并group_vars
为每个组创建。我将默认/共享设置添加到group_vars/bots.yaml
. 当我运行剧本时,它只会加载bots
它看起来的 group_vars。理想情况下,我希望它加载bots
,然后用bots-fancy
. 最后是主机文件中的值。
我不确定构建这些组的最佳方式,因此任何输入都会非常有帮助!