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
我试图让它只适用于我的开发和 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