Reputation: 9878
I'd like to able to run an ansible task only if the host of the current playbook does not belong to a certain group. In semi pseudo code:
- name: my command
command: echo stuff
when: "if {{ ansible_hostname }} not in {{ ansible_current_groups }}"
How should I do this?
Upvotes: 133
Views: 190660
Reputation: 2876
Here's another way to do this:
- name: my command
command: echo stuff
when: "'groupname' not in group_names"
group_names
is a magic variable as documented here:
List of groups the current host is part of, it always reflects the
inventory_hostname
and ignores delegation.
Upvotes: 262
Reputation: 1505
You can set a control variable in vars files located in group_vars/
or directly in hosts file like this:
[vagrant:vars]
test_var=true
[location-1]
192.168.33.10 hostname=apollo
[location-2]
192.168.33.20 hostname=zeus
[vagrant:children]
location-1
location-2
And run tasks like this:
- name: "test"
command: "echo {{test_var}}"
when: test_var is defined and test_var
Upvotes: 26
Reputation: 1082
I have came up with this:
- name: my command
command: echo stuff
when: "inventory_hostname not in groups.get('your-group', [])"
Upvotes: 9