Fixing new caching related issue with host vars

The vars_cache was not being properly merged with the setup_cache
for all hosts, which was previously not noticed when registered
variables were stored in the setup_cache.

Fixes #8944
This commit is contained in:
James Cammarata 2014-09-09 15:35:08 -05:00
parent 0179c13e04
commit 10afaee108
5 changed files with 20 additions and 2 deletions

View file

@ -36,3 +36,6 @@ class BaseCacheModule(object):
def flush(self):
raise exceptions.NotImplementedError
def copy(self):
raise exceptions.NotImplementedError

View file

@ -186,3 +186,6 @@ class CacheModule(BaseCacheModule):
def flush(self):
for key in self.keys():
self.delete(key)
def copy(self):
return self._keys.copy()

View file

@ -15,7 +15,9 @@
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
class CacheModule(object):
from ansible.cache.base import BaseCacheModule
class CacheModule(BaseCacheModule):
def __init__(self, *args, **kwargs):
self._cache = {}
@ -37,3 +39,6 @@ class CacheModule(object):
def flush(self):
self._cache = {}
def copy(self):
return self._cache.copy()

View file

@ -93,3 +93,10 @@ class CacheModule(BaseCacheModule):
def flush(self):
for key in self.keys():
self.delete(key)
def copy(self):
# FIXME: there is probably a better way to do this in redis
ret = dict()
for key in self.keys():
ret[key] self.get(key)
return ret

View file

@ -598,7 +598,7 @@ class Runner(object):
# merge the VARS and SETUP caches for this host
combined_cache = self.setup_cache.copy()
combined_cache.setdefault(host, {}).update(self.vars_cache.get(host, {}))
combined_cache.update(self.vars_cache)
hostvars = HostVars(combined_cache, self.inventory, vault_password=self.vault_pass)