如何在ansible的库存中分离主机列表和组hiererachy?

时间:2017-11-14 11:04:23

标签: ansible hierarchy ansible-inventory

我在Ansible下有一个大项目。其中有许多组,其中大部分是为了清晰起见。例如,有组'dbaccess','java'等,它们有助于查找需要访问数据库的主机,安装java等等。其中一些是嵌套的(fe'collector'组是'java的子代'group,因为所有收藏家都需要java)。

使用'group:children'技术将所有内容保存在库存中。

但是当我想创建临时库存时,我遇到了一个问题:我不仅需要在库存中提供新主机,还需要重新创建整个组层次结构。

我想知道是否有办法以这样的方式分离库存,以便将组层次结构与主机列表分开?

或者,也许,在Ansible中还有其他一些组织这种层次结构的方法吗?

(我真实库存的例子):

[collectors]
(host list)
[publishers-http]
(host list)
[publishers-smtp]
(host list)
[central]
(host list)

[java:children]
collectors
publishers-http
central

[postgre_access:children]
collectors
publishers
central

[mongo_access:children]
collectors
publishers-smtp
central

[redis_access:children]
central
publishers

我想要一种方法来更改主机列表以进行暂存,但保持组之间的关系不变。

1 个答案:

答案 0 :(得分:1)

将您的广告资源拆分为两个文件 - 一个名为01_hosts的文件包含:

[collectors]
(host list)
[publishers-http]
(host list)
[publishers-smtp]
(host list)
[central]
(host list)

另一个名为02_groups的内容包含:

[java:children]
collectors
publishers-http
central

[postgre_access:children]
collectors
publishers
central

[mongo_access:children]
collectors
publishers-smtp
central

[redis_access:children]
central
publishers

将它们保存到my_inventory目录,使用my_inventory的路径作为清单的参数(在CLI或ansible.cfg中)。

使用符号链接为02_groups提供单一来源。

我建议使用01_02_前缀,因为Ansible按字母顺序从库存目录中读取文件,并且必须在组的组之前定义主机/组。