Ansible - 使用逻辑OR匹配主机组

时间:2017-08-31 21:23:07

标签: ansible ansible-inventory

我试图将此仅适用于我的dev和hydra服务器。我有2个主机文件,其中包含主机。 dev-all主机组是 [dev-all:children] dev-group1 dev-group2

hydra组仅包含一个服务器,但位于不同的主机文件中。当我运行ansible时,我对hydra group ansible-playbook -i environments/hydra site.yml使用类似命令,对于dev组,我使用此命令ansible-playbook -i environments/dev site.yml

我的问题是,当我打电话给Hydra时,如果只适用于hydra,或者当我打电话给dev时,我怎么才能得到这个?这有助于我避免将此组添加到另一个主机文件中的prod服务器。 dev-all组在dev文件中包含许多dev服务器组,我基本上试图从宿主文件中包含所有这些服务器组,所以我让dev-all:children组全部抓住它们。

我似乎无法让它们与OR条件相匹配。也许有更好的方法来编写when语句。

- name: add dev environment sudo user group group: name=dev_sudo state=present gid=8002 tags: - groups - sudo-group when: (inventory_hostname in groups["dev-all"]) or (inventory_hostname in groups['hydra'])

1 个答案:

答案 0 :(得分:6)

您可以使用group_names这是当前主持人所在的所有群组的列表(数组)。请参阅magic variables

像:

when: ('dev-all' in group_names) or ('hydra' in group_names)

或:

when: ['dev-all', 'hydra'] | intersect(group_names) | count > 0