From a34793d7fba3bee813a3ad9d070183ef0639fa47 Mon Sep 17 00:00:00 2001 From: James Cammarata Date: Mon, 21 Nov 2016 02:03:16 -0600 Subject: [PATCH] When iterating over hostvars yield the hostname not the host object Also fixes HostVars to raise the correct jinja2 error type. Fixes #16836 (cherry picked from commit 0df3767d4d6a522141d6916e5bbe4babe3e4929b) --- lib/ansible/vars/hostvars.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/ansible/vars/hostvars.py b/lib/ansible/vars/hostvars.py index 36adf549063..74262b2ed46 100644 --- a/lib/ansible/vars/hostvars.py +++ b/lib/ansible/vars/hostvars.py @@ -21,7 +21,7 @@ __metaclass__ = type import collections -from jinja2 import Undefined as j2undefined +from jinja2.exceptions import UndefinedError from ansible import constants as C from ansible.template import Templar @@ -73,7 +73,7 @@ class HostVars(collections.Mapping): ''' host = self._find_host(host_name) if host is None: - raise j2undefined + raise UndefinedError("%s not found in hostvars" % host_name) return self._variable_manager.get_vars(loader=self._loader, host=host, include_hostvars=False) @@ -102,7 +102,7 @@ class HostVars(collections.Mapping): def __iter__(self): for host in self._inventory.get_hosts(ignore_limits=True, ignore_restrictions=True): - yield host + yield host.name def __len__(self): return len(self._inventory.get_hosts(ignore_limits=True, ignore_restrictions=True))