【问题标题】:Ansible - running playbook on specific host group with same naming convention in inventoryAnsible - 在清单中具有相同命名约定的特定主机组上运行剧本
【发布时间】: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


    【解决方案1】:

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

    内部任务/角色:

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

    命令:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-15
      • 2022-08-12
      • 1970-01-01
      • 1970-01-01
      • 2018-06-30
      • 1970-01-01
      相关资源
      最近更新 更多