Ansible - Using a logical OR to match host groups
You can use group_names
which is a list (array) of all the groups the current host is in. See magic variables.
Like:
when: ('dev-all' in group_names) or ('hydra' in group_names)
or:
when: ['dev-all', 'hydra'] | intersect(group_names) | count > 0
Tony-Caffe
Sr. Linux System Administrator CentOS Amazon Linux RHEL Major Star Wars and DC fan, among many other Comics as well. JW for life!
Updated on June 20, 2022Comments
-
Tony-Caffe almost 2 years
I am trying to get this to only apply to my dev and hydra servers. I have 2 host files with hosts in them. The dev-all host group is
[dev-all:children] dev-group1 dev-group2
The hydra group only contains one server but is in a different host file. When I run ansible I use a command like such for hydra group
ansible-playbook -i environments/hydra site.yml
and for dev groups I use this commandansible-playbook -i environments/dev site.yml
.My question is, how do I get this when condition to apply only to hydra when I call hydra or only to dev-all when I call dev? This would help me avoid adding this group to prod servers in another host file. The dev-all group contains many dev server groups in the dev file and I am basically trying to include all of them from the host file so I made the dev-all:children group to grab them all.
I cant seem to get them to match the when OR condition. Perhaps there is a better way to write the when statement.
- 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'])