ryb*_*bit 1 ansible ansible-inventory
我有一种情况,我们有3层盒子,在每一层我们应用不同的变量设置(如缓存目录所在的位置),但有一堆默认值.我还需要在每个节点上覆盖,这通常通过主机本身的库存变量来完成.我不确定组织主机的最佳方法是什么,以便优先顺序对我有利.
以下是我尝试过的不同内容.在每种情况下,我在库存文件中都有这样的条目:
[bots-fancy]
fancy-1
[bots-super-fancy]
super-1
[bots-magical]
magic-1
magic-2 provider=aws
Run Code Online (Sandbox Code Playgroud)
起初,我让每个人都有一长串变量定义.我也有不同的group_var/bots/[bots-magical | bots-super-fancy | bots-fancy].yaml文件.这很快变得难以为继.
尝试1:使用playbook变量在剧本中我有这样的事情:
---
hosts:
- bots
vars_files:
- "group_vars/bots/defaults.yml"
- "group_vars/bots/{{ groups_names[0] }}.yml"
roles:
- somethign
Run Code Online (Sandbox Code Playgroud)
这工作(虽然是脆弱的)但它不会让我覆盖每个主机.我不得不偶尔在节点上设置不同的东西,但不是整个组.
尝试2:group_vars每个人使用
我补充道
[bots:children]
bots-fancy
bots-super-fancy
bots-magical
Run Code Online (Sandbox Code Playgroud)
到hosts文件.vars_files从剧本中删除任何内容并group_vars为每个组创建.我添加了默认/共享设置group_vars/bots.yaml.当我运行playbook时,它只会加载bots它看起来的group_vars.理想情况下,我希望它加载bots,然后用它覆盖它bots-fancy.然后最后来自hosts文件的值.
我不确定构建这些组的最佳方法,所以任何输入都会非常有用!
不确定你的问题是什么.你应该没问题:
主机:
[bots-a]
bot1
[bots-b]
bot2
[bots:children]
bots-a
bots-b
Run Code Online (Sandbox Code Playgroud)
迪尔斯:
./group_vars/bots.yml
./group_vars/bots-a.yml
./group_vars/bots-b.yml
Run Code Online (Sandbox Code Playgroud)
Ansible中存在组深度的概念(至少在最近的版本中).在此示例中,bot2将按以下顺序填充主机的组变量:
深度0:组all,all.yml(在这里丢失,忽略)
深度1:组bots,bots.yml
深度2:组bots-b,bots-b.yml
您可以查看详细信息和处理顺序这里的源代码.
因此,如果您定义默认值bots.yml和特定值bots-b.yml,您应该达到预期的效果.
| 归档时间: |
|
| 查看次数: |
5341 次 |
| 最近记录: |