From 460183ce47cc31f3176187a25bfa784be066f89b Mon Sep 17 00:00:00 2001 From: Brian Coca Date: Thu, 12 Jul 2018 09:59:00 -0400 Subject: [PATCH] Error on empty group/host name (#42584) * error on false host/group name (cherry picked from commit 12a8363fae9db871a478e12cd82af9b5fa2ccd5a) --- changelogs/fragments/empty_gh_error.yaml | 2 + lib/ansible/inventory/data.py | 78 +++++++++++++----------- 2 files changed, 44 insertions(+), 36 deletions(-) create mode 100644 changelogs/fragments/empty_gh_error.yaml diff --git a/changelogs/fragments/empty_gh_error.yaml b/changelogs/fragments/empty_gh_error.yaml new file mode 100644 index 00000000000..bd1523610cb --- /dev/null +++ b/changelogs/fragments/empty_gh_error.yaml @@ -0,0 +1,2 @@ +bugfixes: + - emtpy host/group name is an error https://github.com/ansible/ansible/issues/42044 diff --git a/lib/ansible/inventory/data.py b/lib/ansible/inventory/data.py index dc730ff6065..7eb626d1e32 100644 --- a/lib/ansible/inventory/data.py +++ b/lib/ansible/inventory/data.py @@ -161,13 +161,16 @@ class InventoryData(object): def add_group(self, group): ''' adds a group to inventory if not there already ''' - if group not in self.groups: - g = Group(group) - self.groups[group] = g - self._groups_dict_cache = {} - display.debug("Added group %s to inventory" % group) + if group: + if group not in self.groups: + g = Group(group) + self.groups[group] = g + self._groups_dict_cache = {} + display.debug("Added group %s to inventory" % group) + else: + display.debug("group %s already in inventory" % group) else: - display.debug("group %s already in inventory" % group) + raise AnsibleError("Invalid empty/false group name provided: %s" % group) def remove_group(self, group): @@ -183,38 +186,41 @@ class InventoryData(object): def add_host(self, host, group=None, port=None): ''' adds a host to inventory and possibly a group if not there already ''' - g = None - if group: - if group in self.groups: - g = self.groups[group] - else: - raise AnsibleError("Could not find group %s in inventory" % group) - - if host not in self.hosts: - h = Host(host, port) - self.hosts[host] = h - if self.current_source: # set to 'first source' in which host was encountered - self.set_variable(host, 'inventory_file', self.current_source) - self.set_variable(host, 'inventory_dir', basedir(self.current_source)) - else: - self.set_variable(host, 'inventory_file', None) - self.set_variable(host, 'inventory_dir', None) - display.debug("Added host %s to inventory" % (host)) - - # set default localhost from inventory to avoid creating an implicit one. Last localhost defined 'wins'. - if host in C.LOCALHOST: - if self.localhost is None: - self.localhost = self.hosts[host] - display.vvvv("Set default localhost to %s" % h) + if host: + g = None + if group: + if group in self.groups: + g = self.groups[group] else: - display.warning("A duplicate localhost-like entry was found (%s). First found localhost was %s" % (h, self.localhost.name)) - else: - h = self.hosts[host] + raise AnsibleError("Could not find group %s in inventory" % group) + + if host not in self.hosts: + h = Host(host, port) + self.hosts[host] = h + if self.current_source: # set to 'first source' in which host was encountered + self.set_variable(host, 'inventory_file', self.current_source) + self.set_variable(host, 'inventory_dir', basedir(self.current_source)) + else: + self.set_variable(host, 'inventory_file', None) + self.set_variable(host, 'inventory_dir', None) + display.debug("Added host %s to inventory" % (host)) + + # set default localhost from inventory to avoid creating an implicit one. Last localhost defined 'wins'. + if host in C.LOCALHOST: + if self.localhost is None: + self.localhost = self.hosts[host] + display.vvvv("Set default localhost to %s" % h) + else: + display.warning("A duplicate localhost-like entry was found (%s). First found localhost was %s" % (h, self.localhost.name)) + else: + h = self.hosts[host] - if g: - g.add_host(h) - self._groups_dict_cache = {} - display.debug("Added host %s to group %s" % (host, group)) + if g: + g.add_host(h) + self._groups_dict_cache = {} + display.debug("Added host %s to group %s" % (host, group)) + else: + raise AnsibleError("Invalid empty host name provided: %s" % host) def remove_host(self, host):