在ansible中将组的交集指定为group_vars文件

时间:2014-12-31 09:13:04

标签: ansible

我有特定的变量需要根据ansible中的组的交叉点来应用。例如,如果服务器处于prod模式且具有网站功能,我可以使用tag_function_website:&tag_mode_prod在剧本中指定它。这很好,但是如果我需要为具有交集特定变量的交集创建组变量文件,我该怎么办(即我不想为dev和prod使用相同的db,但我也有不同的dbs用于不同功能的盒子)。我无法在文件名中使用&符号,因此如何创建组vars文件以仅指定到达所需交叉点的框?

2 个答案:

答案 0 :(得分:1)

也许我并没有真正回答你的问题,而是分享了我对Ansible的一些经验。

首先,你应该考虑为不同的环境提供单独的清单(你提到了dev和prod)。我最初也开始使用单一库存,我发现这个建议绝对令人惊讶:How to Differentiate Staging vs Production

您用作示例的数据库可能更好地通过单独的变量(即hrDb和acctDb)引用。

答案 1 :(得分:0)

我有一个类似的目标,我能够想出一些似乎有用的东西。这取决于Marcin的观察,但我会充实一些细节。如果您在prod和stg之间拆分库存,那么您可以执行以下操作...

在您的产品目录中,定义组:

[prod_website]
#hosts go here...

[website:children]
prod_website

然后在您的stg清单中,定义类似的组:

[stg_website]
#hosts go here...

[website:children]
stg_website

然后,在group_vars中,您将在prod_website和stg_website下创建组交集变量。当您调用ansible并指定要使用的库存时,它将引入您想要的组交集变量,但在您的剧本中,您仍然可以引用一般网站组,该组在prod和stg中都有。