On Tuesday, October 23, 2018 at 8:25:12 PM UTC-4, Gonzalo Servat wrote:
>
> On Wed, Oct 24, 2018 at 2:29 AM flowerysong <[email protected]
> <javascript:>> wrote:
>
>> On Tuesday, October 23, 2018 at 2:24:59 AM UTC-4, Gonzalo Servat wrote:
>>>
>>> Hi All
>>>
>>> When working with host patterns
>>> <https://docs.ansible.com/ansible/2.7/user_guide/intro_patterns.html>,
>>> is it possible to craft one that says "must be in group X *and* must be in
>>> either group Y, W and Z"?
>>>
>>> e.g. host must be in group "webserver" but it *must* also be in either
>>> group dc1, dc2 or dc3.
>>>
>>> I can see how to check that webserver is part of dc1 (webserver,&dc1)
>>> but not sure how to build it with multiple "OR" on the "AND" (something
>>> like "webserver,&(dc1,dc2,dc3)" is what I'm looking for but it doesn't work)
>>>
>>
>> You're trying to do it backwards. Build the union of your other groups
>> and do the intersection with webserver.
>>
>> &webserver,dc1,dc2,dc3
>>
>
> Thanks, good suggestion. I suppose there's no way to say "must be
> webserver OR dbserver AND in (dc1 OR dc2 OR dc3)"?
>
Not in a host pattern. no. If you can't do it in the inventory, you can do
it with a dynamic group:
- hosts: localhost
gather_facts: false
tasks:
- add_host:
name: "{{ item }}"
groups: target_hosts
when: hostvars[item].group_names | intersect(['dc1', 'dc2', 'dc3'])
loop: "{{ groups.webserver | union(groups.dbserver) }}"
- hosts: target_hosts
tasks:
- command: /bin/true
--
You received this message because you are subscribed to the Google Groups
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/3be73ef6-851f-4168-9e8e-9dd9e84e4af5%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.