0

假设我有这种类型的库存,其中包含主组下子组的相似名称,但最后具有不同的服务器 IP。名称是相似的,因为那是我想使用的命名约定,我只希望最后的服务器 ip 不同。

[maingroup] 
group1 
group2

[group1] 
subgroup1
subgroup2 
subgroup3 

[group2]
subgroup1 
subgroup2 
subgroup3 

[subgroup1]
server1
server2
server3

[subgroup2]
server4
server5
server6

我想要一个接受一些参数的python/shell脚本,例如:

python test.py maingroup group1 subgroup1 

然后在传递 vars 时在特定主机上运行 ansible 角色(不确定是否正确):

ansible-playbook -i host.yml --extra-vars "variable_maingroup=maingroup variable_group=group variable_subgroup=subgroup"

我想确保我只在具有以下路径的服务器上运行 ansible:maingroup>group1>subgroup1 并将其作为要运行的主机传递给我的 ansible 角色。

所以我的问题是,我如何才能仅针对 subgroup1 中的服务器,该服务器位于 maingroup.group1 下,与传递给脚本而不是 group2 的参数顺序相同作为变量?

我知道我可以将主机作为一个额外的变量传递,但我如何能够实现这个特定的结构?

有这样的想法:

- hosts: {{ hostvars[groups['maingroup']['group1']['subgroup1'] }}

非常感谢!

4

1 回答 1

0

经过一番挖掘,我找到了我的问题的答案,所以这可以通过使用patterns来完成。

内部任务/角色:

- hosts: "{{subgroup}}:&{{group}}:&{{maingroup}}"

命令:

ansible-playbook -i hosts test.yml --extra-vars "maingroup=maingroup group=group1 subgroup=subgroup1"

这将在特定组和特定主组中包含的子组上运行

如在命令中:它将仅在 group1 中包含的 subgroup1 上运行

于 2019-01-07T12:26:40.847 回答