我有一种情况,我们有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文件的值.
我不确定构建这些组的最佳方法,所以任何输入都会非常有用!
不确定你的问题是什么.你应该没问题:
主机:
[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
,您应该达到预期的效果.