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上
假设我有这种类型的库存,其中包含主组下子组的相似名称,但末尾有不同的服务器 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上