Ansible - 运行 清单中具有相同命名约定的特定主机组上的剧本

Ansible - running playbook on specific host group with same naming convention in inventory

假设我有这种类型的库存,其中包含主组下子组的相似名称,但末尾有不同的服务器 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 中,我需要更改什么将此主机作为 var?

传递的任务

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

有这样的想法:

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

非常感谢!

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

里面 task/role:

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

命令:

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

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

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

中的subgroup1上