From 3ba057d28dab0ae4742cade8a117724ffe490c06 Mon Sep 17 00:00:00 2001 From: Brian Coca Date: Wed, 8 Mar 2017 14:58:10 -0500 Subject: [PATCH] backport inventory fix, ensure all/ungrouped --- lib/ansible/inventory/__init__.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/ansible/inventory/__init__.py b/lib/ansible/inventory/__init__.py index 1f0317c454..be24eedc0f 100644 --- a/lib/ansible/inventory/__init__.py +++ b/lib/ansible/inventory/__init__.py @@ -21,7 +21,6 @@ __metaclass__ = type import fnmatch import os -import subprocess import sys import re import itertools @@ -140,7 +139,6 @@ class Inventory(object): display.warning("A duplicate localhost-like entry was found (%s). First found localhost was %s" % (h, self.localhost.name)) display.vvvv("Set default localhost to %s" % h) self.localhost = new_host - all.add_host(new_host) elif self._loader.path_exists(host_list): # TODO: switch this to a plugin loader and a 'condition' per plugin on which it should be tried, restoring 'inventory pllugins' if self.is_directory(host_list): @@ -170,6 +168,16 @@ class Inventory(object): host.vars = combine_vars(host.vars, self.get_host_variables(host.name)) self.get_host_vars(host) + mygroups = host.get_groups() + + # ensure hosts are always in 'all' + if all not in mygroups: + all.add_host(host) + + # clear ungrouped of any incorrectly stored by parser + if len(mygroups) > 2 and ungrouped in mygroups: + host.remove_group(ungrouped) + def _match(self, str, pattern_str): try: if pattern_str.startswith('~'):