diff --git a/lib/ansible/inventory/__init__.py b/lib/ansible/inventory/__init__.py index abb8b0b082f..2ac869cc0bd 100644 --- a/lib/ansible/inventory/__init__.py +++ b/lib/ansible/inventory/__init__.py @@ -439,10 +439,14 @@ class Inventory(object): for group in groups.values(): if pattern == 'all': for host in group.get_hosts(): + if host.implicit: + continue __append_host_to_results(host) else: if self._match(group.name, pattern) and group.name not in ('all', 'ungrouped'): for host in group.get_hosts(): + if host.implicit: + continue __append_host_to_results(host) else: matching_hosts = self._match_list(group.get_hosts(), 'name', pattern) @@ -457,6 +461,7 @@ class Inventory(object): def _create_implicit_localhost(self, pattern): new_host = Host(pattern) new_host.address = "127.0.0.1" + new_host.implicit = True new_host.vars = self.get_host_vars(new_host) new_host.set_variable("ansible_connection", "local") if "ansible_python_interpreter" not in new_host.vars: diff --git a/lib/ansible/inventory/group.py b/lib/ansible/inventory/group.py index 482fe2a18fc..63c297aaa47 100644 --- a/lib/ansible/inventory/group.py +++ b/lib/ansible/inventory/group.py @@ -140,10 +140,14 @@ class Group: for kk in kid_hosts: if kk not in seen: seen[kk] = 1 + if self.name == 'all' and kk.implicit: + continue hosts.append(kk) for mine in self.hosts: if mine not in seen: seen[mine] = 1 + if self.name == 'all' and mine.implicit: + continue hosts.append(mine) return hosts diff --git a/lib/ansible/inventory/host.py b/lib/ansible/inventory/host.py index 6263dcbc80d..36cc90f5377 100644 --- a/lib/ansible/inventory/host.py +++ b/lib/ansible/inventory/host.py @@ -60,6 +60,7 @@ class Host: uuid=self._uuid, gathered_facts=self._gathered_facts, groups=groups, + implicit=self.implicit, ) def deserialize(self, data): @@ -69,6 +70,7 @@ class Host: self.vars = data.get('vars', dict()) self.address = data.get('address', '') self._uuid = data.get('uuid', uuid.uuid4()) + self.implicit= data.get('implicit', False) groups = data.get('groups', []) for group_data in groups: @@ -89,6 +91,7 @@ class Host: self._gathered_facts = False self._uuid = uuid.uuid4() + self.implicit = False def __repr__(self): return self.get_name()