gpt4 book ai didi

Ansible:使用带有变量的嵌套组

转载 作者:行者123 更新时间:2023-12-05 01:21:42 34 4
gpt4 key购买 nike

我有一种情况,我们有 3 层盒子,在每一层中我们应用不同的变量设置(比如缓存目录在哪里),但是有一堆默认值。我还需要在每个节点的基础上进行覆盖,这通常是通过主机本身的库存变量来完成的。我不确定组织主机的最佳方式是什么,以便 precedence works对我有利。

这是我尝试过的不同方法。在每种情况下,我在库存文件中都有这样的条目:

[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 覆盖它.最后是主机文件中的值。

我不确定构建这些组的最佳方式,因此任何输入都会非常有帮助!

最佳答案

不知道你的问题是什么。你应该没问题:

主持人:

[bots-a]
bot1

[bots-b]
bot2

[bots:children]
bots-a
bots-b

目录:
./group_vars/bots.yml
./group_vars/bots-a.yml
./group_vars/bots-b.yml

Ansible 中有一个组深度的概念(至少在最近的版本中)。在此示例中,主机 bot2 的组变量将按以下顺序填充:

深度0:组 all , all.yml (此处遗漏,忽略)
深度1:组 bots , bots.yml深度2:群 bots-b , bots-b.yml
您可以查看详细信息和处理订单 here在源代码中。

因此,如果您在 bots.yml 中定义默认值和 bots-b.yml 中的特定值,你应该达到你所期望的。

关于Ansible:使用带有变量的嵌套组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41818280/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com