Task skipping with when condition with multiple groups

Trying to add a ssh key when a inventory_hostname belong to certain groups. I would assume that the following is saying when inventory_hostname belongs to group hadoop OR report.

when: inventory_hostname in [ groups.hadoop , groups.report ]

ISSUE: The following task is skipping, even though the host belongs to group report.

  • name: add root authorized keys for test key
    authorized_key: user=root key=“{{ item }}”
    when: inventory_hostname in [ groups.hadoop , groups.report ]
    with_items:
  • “ssh-rsa ZzzzzzHV+drdA0PWHRaDw1fqtM/PElGVbysuNCxFJ9JUBebnsbvAqNFQyMDEweMe5xHV+drdA0PWHRaDw1fqtM/PElGVbysuNCxFJ9JUBebnsbvAqNFQyMDEweMe5xHV+drdA0PWHRaDw1fqtM/PElGVbysuNCxFJ9JUBebnsbvAqNFQyMDEweMe5xHV+drdA0PWHRaDw1fqtM/PElGVbysuNCxFJ9JUBebnsbvAqNFQyMDEweMe5x testkey”

TASK: [provision_server | add root authorized keys for test key] ************
skipping: [server1] => (item=ssh-rsa ZzzzzzHV+drdA0PWHRaDw1fqtM/PElGVbysuNCxFJ9JUBebnsbvAqNFQyMDEweMe5xHV+drdA0PWHRaDw1fqtM/PElGVbysuNCxFJ9JUBebnsbvAqNFQyMDEweMe5xHV+drdA0PWHRaDw1fqtM/PElGVbysuNCxFJ9JUBebnsbvAqNFQyMDEweMe5xHV+drdA0PWHRaDw1fqtM/PElGVbysuNCxFJ9JUBebnsbvAqNFQyMDEweMe5x testkey)

Is there something wrong with with my syntax for an OR condition for host groups?

Thanks!

Your “when” statement is a little off.

The following [ groups.hadoop , groups.report ] would produce something like [[hadoop1, hadoop2], [report1, report2]] so it would be able to match like you are expecting.

I think what you want is probably something more like:

when: inventory_hostname in groups.hadoop or inventory_hostname in groups.report

Or maybe even:

when: inventory_hostname in groups.hadoop|union(groups.report)

Thanks Matt.

Both of these work as expected. But, is there a more efficient way of stringing together a bunch of ORs? Rather than using…

when: inventory_hostname in groups.hadoop OR inventory_hostname in groups.report OR inventory_hostname in groups.app OR inventory_hostname in groups.web …

-Mike

Sorry, Looks like the following worked…

when: inventory_hostname in groups.hadoop|union(groups.report)|union(groups.app)

Thanks Again!