diff --git a/lib/ansible/inventory/__init__.py b/lib/ansible/inventory/__init__.py index a984a99ec1..a967553385 100644 --- a/lib/ansible/inventory/__init__.py +++ b/lib/ansible/inventory/__init__.py @@ -252,7 +252,7 @@ class Inventory(object): """ patterns = Inventory.order_patterns(patterns) - hosts = set() + hosts = [] for p in patterns: # avoid resolving a pattern that is a plain host @@ -261,11 +261,12 @@ class Inventory(object): else: that = self._match_one_pattern(p) if p.startswith("!"): - hosts = hosts.difference_update(that) + hosts = [ h for h in hosts if h not in that ] elif p.startswith("&"): - hosts = hosts.intersection_update(that) + hosts = [ h for h in hosts if h in that ] else: - hosts.update(that) + to_append = [ h for h in that if h.name not in [ y.name for y in hosts ] ] + hosts.extend(to_append) return hosts def _match_one_pattern(self, pattern): diff --git a/lib/ansible/vars/hostvars.py b/lib/ansible/vars/hostvars.py index aeecc326ee..9f83342be3 100644 --- a/lib/ansible/vars/hostvars.py +++ b/lib/ansible/vars/hostvars.py @@ -56,7 +56,7 @@ class HostVars(collections.Mapping): new_host.set_variable("ansible_python_interpreter", sys.executable) new_host.set_variable("ansible_connection", "local") new_host.address = '127.0.0.1' - hosts.add(new_host) + hosts.append(new_host) for host in hosts: self._lookup[host.name] = host