Apply inventory host restrictions by host name rather than UUID.

Issue #15633 observes that a meta: inventory_refresh task causes the playbook
to exit. An inventory refresh flushes all caches and rebuilds all host
objects, assigning new UUIDs to each. These new host UUIDs currently fail to
match those on host objects stored for restrictions in the inventory, causing
the playbook to exit for having no hosts to run further tasks against.

This changeset attempts to address this issue by storing host restrictions
by name, and comparing inventory host names against these names when applying
restrictions in get_hosts.
pull/15734/head
Andrew Taumoefolau 9 years ago
parent cf62a62b83
commit bc81c76f86

@ -204,7 +204,7 @@ class Inventory(object):
# exclude hosts mentioned in any restriction (ex: failed hosts) # exclude hosts mentioned in any restriction (ex: failed hosts)
if self._restriction is not None: if self._restriction is not None:
hosts = [ h for h in hosts if h in self._restriction ] hosts = [ h for h in hosts if h.name in self._restriction ]
seen = set() seen = set()
HOSTS_PATTERNS_CACHE[pattern_hash] = [x for x in hosts if x not in seen and not seen.add(x)] HOSTS_PATTERNS_CACHE[pattern_hash] = [x for x in hosts if x not in seen and not seen.add(x)]
@ -600,7 +600,7 @@ class Inventory(object):
return return
elif not isinstance(restriction, list): elif not isinstance(restriction, list):
restriction = [ restriction ] restriction = [ restriction ]
self._restriction = restriction self._restriction = [ h.name for h in restriction ]
def subset(self, subset_pattern): def subset(self, subset_pattern):
""" """

Loading…
Cancel
Save