【发布时间】:2021-08-11 17:59:37
【问题描述】:
我正在管理多个集群,我想将多个清单文件整合到一个清单中,看起来像这样:
all:
children:
cluster_one:
children:
controller:
hosts:
host1:
host2:
host3:
compute:
hosts:
host4:
host5:
host6:
cluster_two:
children:
controller:
hosts:
host11:
host12:
host13:
我原以为最终会像这样解析:
[cluster_one]
host1
host2
host3
host4
host5
host6
[cluster_two]
host11
host12
host13
[controller]
host1
host2
host3
host11
host12
host13
[compute]
host4
host5
host6
有了这个结构,我就可以要求“控制器在
cluster_one" 与主机模式cluster_one:&controller,或者如果
我想要我可以要求的所有集群中的所有控制器
controller。方便!
不幸的是,它实际上是这样解析的:
[cluster_one]
host1
host2
host3
host4
host5
host6
[cluster_two]
host11
host12
host13
[controller]
host1
host2
host3
host11
host12
host13
[compute]
host4
host5
host6
[cluster_one:children]
controller
compute
[cluster_two:children]
controller
请注意底部的两个额外条目,它们构成 controller
和compute 将他们尊敬的“父母”的孩子分组在
YAML 文件,而不是仅将其 hosts 成员设为
父母。
例如,如果我运行ansible -i example.yml --list-hosts cluster_one,我会得到:
hosts (9):
host1
host2
host3
host10
host11
host12
host4
host5
host6
这是出乎意料的,让我很难过。我显然可以重组 库存,以便它工作(例如,通过使用 INI 格式的库存 此处显示,或为类似结构重新构建 YAML),但是 这些解决方案涉及多次列出每个主机,这意味着 事情可能不同步。
有没有一种方法来构建库存,让我分组 不想在多个组中显式列出主机?
【问题讨论】:
-
我认为您对
--list-hosts的结果有误。host10应该是host13?