【发布时间】:2019-01-06 21:29:10
【问题描述】:
假设我有这种类型的清单,其中包含主组下的子组的相似名称,但最后具有不同的服务器 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'] }}
非常感谢!
【问题讨论】:
标签: ansible ansible-2.x ansible-inventory ansible-role