当前位置:  开发笔记 > 编程语言 > 正文

Ansible:使用带有vars的嵌套组

如何解决《Ansible:使用带有vars的嵌套组》经验,为你挑选了1个好方法。

我有一种情况,我们有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:使用playbook变量在剧本中我有这样的事情:

---
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

到hosts文件.vars_files从剧本中删除任何内容并group_vars为每个组创建.我添加了默认/共享设置group_vars/bots.yaml.当我运行playbook时,它只会加载bots它看起来的group_vars.理想情况下,我希望它加载bots,然后用它覆盖它bots-fancy.然后最后来自hosts文件的值.

我不确定构建这些组的最佳方法,所以任何输入都会非常有用!



1> Konstantin S..:

不确定你的问题是什么.你应该没问题:

主机:

[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

您可以查看详细信息和处理顺序这里的源代码.

因此,如果您定义默认值bots.yml和特定值bots-b.yml,您应该达到预期的效果.

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有