如何在ansible的清单中分离主机列表和组层次结构?

How to separate host list and group hiererachy in ansible's inventory?

我在 Ansible 下有一个大项目。其中有很多组,其中大多数是为了清晰起见。例如,有组 'dbaccess'、'java' 等,可帮助查找需要访问数据库的主机、安装 java 等。其中一些嵌套(f.e.'collector' 组是 'java' 组的子组,因为所有收集器都需要 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

我想要一种更改暂存主机列表但保持组之间关系完整的方法。

将您的库存分成两个文件 -- 一个名为 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 按字母顺序从清单目录中读取文件,并且 hosts/groups 必须在组组之前定义。