From ae9e38daf831505790ac8a8cbdd3f80b79aa1b78 Mon Sep 17 00:00:00 2001 From: James Cammarata Date: Thu, 5 Sep 2013 23:04:16 -0500 Subject: [PATCH] Change hostvars to a mutable mapping to more closely resemble a dict Fixes #4030 --- lib/ansible/runner/__init__.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/lib/ansible/runner/__init__.py b/lib/ansible/runner/__init__.py index 6d98588a76..465a560e7f 100644 --- a/lib/ansible/runner/__init__.py +++ b/lib/ansible/runner/__init__.py @@ -81,13 +81,20 @@ def _executor_hook(job_queue, result_queue, new_stdin): except: traceback.print_exc() -class HostVars(collections.Mapping): +class HostVars(collections.MutableMapping): ''' A special view of setup_cache that adds values from the inventory when needed. ''' def __init__(self, setup_cache, inventory): self.setup_cache = setup_cache self.inventory = inventory - self.lookup = {} + self.lookup = dict() + self.update(setup_cache) + + def __setitem__(self, host, value): + self.lookup[host] = value + + def __delitem__(self, host): + del self.lookup[host] def __getitem__(self, host): if not host in self.lookup: @@ -97,10 +104,10 @@ class HostVars(collections.Mapping): return self.lookup[host] def __iter__(self): - return (host.name for host in self.inventory.get_group('all').hosts) + return iter(self.lookup) def __len__(self): - return len(self.inventory.get_group('all').hosts) + return len(self.lookup) class Runner(object):