From 00b04ab7949e23b625a5dbc90c84f2bb4d8e426d Mon Sep 17 00:00:00 2001 From: Andrew Taumoefolau Date: Thu, 5 May 2016 22:02:13 +1000 Subject: [PATCH] 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. --- lib/ansible/inventory/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/ansible/inventory/__init__.py b/lib/ansible/inventory/__init__.py index 4797b6977f..abb8b0b082 100644 --- a/lib/ansible/inventory/__init__.py +++ b/lib/ansible/inventory/__init__.py @@ -204,7 +204,7 @@ class Inventory(object): # exclude hosts mentioned in any restriction (ex: failed hosts) 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() 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 elif not isinstance(restriction, list): restriction = [ restriction ] - self._restriction = restriction + self._restriction = [ h.name for h in restriction ] def subset(self, subset_pattern): """