我试图让这只适用于我的开发和九头蛇服务器。我有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'])
这工作!谢谢!有没有办法将它应用到整个任务文件而不是特定的实例?就像有一个main.yml,hydra.yml,dev-web1.yml等。那样的话,你不必像上面那样对文件中的所有内容进行条件处理? –
制作单独的yml文件并在main.yml中使用'include' +'when'。 –
你能举个例子吗?我明白'include'放在main.yml中,但是如何获得包含的yml文件中所有项目的'when'条件? –