Ansible - 使用逻辑或来匹配主机组

Ansible - Using a logical OR to match host groups

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

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

我的问题是,当我调用 hydra 时如何将条件仅应用于 hydra 或当我调用 dev 时仅应用于 dev-all?这将帮助我避免将此组添加到另一个主机文件中的生产服务器。 dev-all 组在 dev 文件中包含许多开发服务器组,我基本上是想从主机文件中包含所有这些,所以我创建了 dev-all:children 组来获取它们。

我似乎无法让它们匹配 when 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'])

您可以使用 group_names,它是当前主机所在的所有组的列表(数组)。参见 magic variables

喜欢:

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

或:

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