让我们说一下,我有这种清单,它由主要组下的子组相似的名称组成,但末尾具有不同的服务器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角色作为要在其上运行的主机。
所以我的问题是,我如何才能仅将maingroup.group1下的subgroup1中的服务器作为目标,与传递给脚本的参数顺序相同,而不是在group2中,并且我需要在任务中将哪些内容更改为将此主机作为var传递?
我知道我可以将主机作为一个额外的变量传递,但是我将如何实现这种特定的结构?
有这样的想法:
- hosts: {{ hostvars[groups['maingroup']['group1']['subgroup1'] }}
非常感谢!
答案 0 :(得分:0)
经过一番挖掘,我找到了问题的答案,因此可以使用 patterns 完成。
内部任务/角色:
- hosts: "{{subgroup}}:&{{group}}:&{{maingroup}}"
命令:
ansible-playbook -i hosts test.yml --extra-vars "maingroup=maingroup group=group1 subgroup=subgroup1"
这将仅在特定组和特定主要组中包含的子组上运行
如命令中所示:它将仅在group1中包含的subgroup1上运行