2017-08-31 83 views
0

我试图让这只适用于我的开发和九头蛇服务器。我有2个主机文件和主机。 dev-all主机组是 [dev-all:children] dev-group1 dev-group2 Ansible - 使用逻辑OR来匹配主机组

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

我的问题是,当我打电话给开发人员时,只有在我打电话给开发人员时才应用于Hydra的条件,但我打电话给开发人员时,如何获得此项?这将帮助我避免添加此组来在另一个主机文件中生成服务器。 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'])

回答

2

您可以使用group_names这是所有组的当前主机处于列表(阵列)。见magic variables

像:

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

或:

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

这工作!谢谢!有没有办法将它应用到整个任务文件而不是特定的实例?就像有一个main.yml,hydra.yml,dev-web1.yml等。那样的话,你不必像上面那样对文件中的所有内容进行条件处理? –

+1

制作单独的yml文件并在main.yml中使用'include' +'when'。 –

+0

你能举个例子吗?我明白'include'放在main.yml中,但是如何获得包含的yml文件中所有项目的'when'条件? –