Implement fact cache flushing alongside a command-line argument to invoke it.

This commit is contained in:
Josh Drake 2014-07-03 14:02:26 -05:00 committed by Michael DeHaan
parent aa419044c4
commit 917e868f65
7 changed files with 32 additions and 7 deletions

View file

@ -83,6 +83,8 @@ def main(args):
help="start the playbook at the task matching this name")
parser.add_option('--force-handlers', dest='force_handlers', action='store_true',
help="run handlers even if a task fails")
parser.add_option('--flush-cache', dest='flush_cache', action='store_true',
help="flush to fact cache")
options, args = parser.parse_args(args)
@ -191,6 +193,10 @@ def main(args):
force_handlers=options.force_handlers
)
if options.flush_cache:
display(callbacks.banner("FLUSHING FACT CACHE"))
pb.SETUP_CACHE.flush()
if options.listhosts or options.listtasks or options.syntax:
print ''
print 'playbook: %s' % playbook
@ -313,4 +319,3 @@ if __name__ == "__main__":
except KeyboardInterrupt, ke:
display("ERROR: interrupted", color='red', stderr=True)
sys.exit(1)

View file

@ -50,10 +50,12 @@ class FactCache(MutableMapping):
return len(self._plugin.keys())
def copy(self):
"""
Return a primitive copy of the keys and values from the cache.
"""
""" Return a primitive copy of the keys and values from the cache. """
return dict([(k, v) for (k, v) in self.iteritems()])
def keys(self):
return self._plugin.keys()
def flush(self):
""" Flush the fact cache of all keys. """
self._plugin.flush()

View file

@ -13,3 +13,6 @@ class BaseCacheModule(object):
def delete(self, key):
raise NotImplementedError("Subclasses of {} must implement the '{}' method".format(self.__class__.__name__, self.__name__))
def flush(self):
raise NotImplementedError("Subclasses of {} must implement the '{}' method".format(self.__class__.__name__, self.__name__))

View file

@ -47,13 +47,13 @@ class CacheModule(MemoryCacheModule):
def set(self, *args, **kwargs):
super(CacheModule, self).set(*args, **kwargs)
self.flush()
self.fsync()
def delete(self, *args, **kwargs):
super(CacheModule, self).delete(*args, **kwargs)
self.flush()
self.fsync()
def flush(self):
def fsync(self):
temp = tempfile.TemporaryFile('r+b')
try:
@ -63,3 +63,7 @@ class CacheModule(MemoryCacheModule):
shutil.copyfileobj(temp, f)
finally:
temp.close()
def flush(self):
super(CacheModule, self).flush()
self.fsync()

View file

@ -110,3 +110,7 @@ class CacheModule(BaseCacheModule):
def delete(self, key):
self._cache.delete(self._make_key(key))
self._keys.discard(key)
def flush(self):
for key in self.keys():
self.delete(key)

View file

@ -35,3 +35,6 @@ class CacheModule(object):
def delete(self, key):
del self._cache[key]
def flush(self):
self._cache = {}

View file

@ -106,3 +106,7 @@ class CacheModule(BaseCacheModule):
def delete(self, key):
self._cache.delete(self._make_key(key))
self._cache.zrem(self._keys_set, key)
def flush(self):
for key in self.keys():
self.delete(key)