diff --git a/lib/ansible/inventory/__init__.py b/lib/ansible/inventory/__init__.py index 1f0317c4548..fc808e3ca36 100644 --- a/lib/ansible/inventory/__init__.py +++ b/lib/ansible/inventory/__init__.py @@ -170,6 +170,11 @@ class Inventory(object): host.vars = combine_vars(host.vars, self.get_host_variables(host.name)) self.get_host_vars(host) + # clear ungrouped of any incorrectly stored by parser + mygroups = host.get_groups() + if len(mygroups) > 2 and ungrouped in mygroups: + host.remove_group(ungrouped) + def _match(self, str, pattern_str): try: if pattern_str.startswith('~'): diff --git a/lib/ansible/inventory/group.py b/lib/ansible/inventory/group.py index a6ab35c3e9f..73d432e545f 100644 --- a/lib/ansible/inventory/group.py +++ b/lib/ansible/inventory/group.py @@ -114,6 +114,12 @@ class Group: host.add_group(self) self.clear_hosts_cache() + def remove_host(self, host): + + self.hosts.remove(host) + host.remove_group(self) + self.clear_hosts_cache() + def set_variable(self, key, value): self.vars[key] = value diff --git a/lib/ansible/inventory/host.py b/lib/ansible/inventory/host.py index 8d0fc9a52c7..3902471e54a 100644 --- a/lib/ansible/inventory/host.py +++ b/lib/ansible/inventory/host.py @@ -110,6 +110,10 @@ class Host: self.groups.append(group) + def remove_group(self, group): + + self.groups.remove(group) + def set_variable(self, key, value): self.vars[key]=value