Implement fact cache flushing alongside a command-line argument to invoke it.
This commit is contained in:
parent
aa419044c4
commit
917e868f65
7 changed files with 32 additions and 7 deletions
|
@ -83,6 +83,8 @@ def main(args):
|
||||||
help="start the playbook at the task matching this name")
|
help="start the playbook at the task matching this name")
|
||||||
parser.add_option('--force-handlers', dest='force_handlers', action='store_true',
|
parser.add_option('--force-handlers', dest='force_handlers', action='store_true',
|
||||||
help="run handlers even if a task fails")
|
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)
|
options, args = parser.parse_args(args)
|
||||||
|
|
||||||
|
@ -191,6 +193,10 @@ def main(args):
|
||||||
force_handlers=options.force_handlers
|
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:
|
if options.listhosts or options.listtasks or options.syntax:
|
||||||
print ''
|
print ''
|
||||||
print 'playbook: %s' % playbook
|
print 'playbook: %s' % playbook
|
||||||
|
@ -313,4 +319,3 @@ if __name__ == "__main__":
|
||||||
except KeyboardInterrupt, ke:
|
except KeyboardInterrupt, ke:
|
||||||
display("ERROR: interrupted", color='red', stderr=True)
|
display("ERROR: interrupted", color='red', stderr=True)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
8
lib/ansible/cache/__init__.py
vendored
8
lib/ansible/cache/__init__.py
vendored
|
@ -50,10 +50,12 @@ class FactCache(MutableMapping):
|
||||||
return len(self._plugin.keys())
|
return len(self._plugin.keys())
|
||||||
|
|
||||||
def copy(self):
|
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()])
|
return dict([(k, v) for (k, v) in self.iteritems()])
|
||||||
|
|
||||||
def keys(self):
|
def keys(self):
|
||||||
return self._plugin.keys()
|
return self._plugin.keys()
|
||||||
|
|
||||||
|
def flush(self):
|
||||||
|
""" Flush the fact cache of all keys. """
|
||||||
|
self._plugin.flush()
|
||||||
|
|
3
lib/ansible/cache/base.py
vendored
3
lib/ansible/cache/base.py
vendored
|
@ -13,3 +13,6 @@ class BaseCacheModule(object):
|
||||||
|
|
||||||
def delete(self, key):
|
def delete(self, key):
|
||||||
raise NotImplementedError("Subclasses of {} must implement the '{}' method".format(self.__class__.__name__, self.__name__))
|
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__))
|
||||||
|
|
10
lib/ansible/cache/file.py
vendored
10
lib/ansible/cache/file.py
vendored
|
@ -47,13 +47,13 @@ class CacheModule(MemoryCacheModule):
|
||||||
|
|
||||||
def set(self, *args, **kwargs):
|
def set(self, *args, **kwargs):
|
||||||
super(CacheModule, self).set(*args, **kwargs)
|
super(CacheModule, self).set(*args, **kwargs)
|
||||||
self.flush()
|
self.fsync()
|
||||||
|
|
||||||
def delete(self, *args, **kwargs):
|
def delete(self, *args, **kwargs):
|
||||||
super(CacheModule, self).delete(*args, **kwargs)
|
super(CacheModule, self).delete(*args, **kwargs)
|
||||||
self.flush()
|
self.fsync()
|
||||||
|
|
||||||
def flush(self):
|
def fsync(self):
|
||||||
temp = tempfile.TemporaryFile('r+b')
|
temp = tempfile.TemporaryFile('r+b')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -63,3 +63,7 @@ class CacheModule(MemoryCacheModule):
|
||||||
shutil.copyfileobj(temp, f)
|
shutil.copyfileobj(temp, f)
|
||||||
finally:
|
finally:
|
||||||
temp.close()
|
temp.close()
|
||||||
|
|
||||||
|
def flush(self):
|
||||||
|
super(CacheModule, self).flush()
|
||||||
|
self.fsync()
|
||||||
|
|
4
lib/ansible/cache/memcached.py
vendored
4
lib/ansible/cache/memcached.py
vendored
|
@ -110,3 +110,7 @@ class CacheModule(BaseCacheModule):
|
||||||
def delete(self, key):
|
def delete(self, key):
|
||||||
self._cache.delete(self._make_key(key))
|
self._cache.delete(self._make_key(key))
|
||||||
self._keys.discard(key)
|
self._keys.discard(key)
|
||||||
|
|
||||||
|
def flush(self):
|
||||||
|
for key in self.keys():
|
||||||
|
self.delete(key)
|
||||||
|
|
3
lib/ansible/cache/memory.py
vendored
3
lib/ansible/cache/memory.py
vendored
|
@ -35,3 +35,6 @@ class CacheModule(object):
|
||||||
|
|
||||||
def delete(self, key):
|
def delete(self, key):
|
||||||
del self._cache[key]
|
del self._cache[key]
|
||||||
|
|
||||||
|
def flush(self):
|
||||||
|
self._cache = {}
|
||||||
|
|
4
lib/ansible/cache/redis.py
vendored
4
lib/ansible/cache/redis.py
vendored
|
@ -106,3 +106,7 @@ class CacheModule(BaseCacheModule):
|
||||||
def delete(self, key):
|
def delete(self, key):
|
||||||
self._cache.delete(self._make_key(key))
|
self._cache.delete(self._make_key(key))
|
||||||
self._cache.zrem(self._keys_set, key)
|
self._cache.zrem(self._keys_set, key)
|
||||||
|
|
||||||
|
def flush(self):
|
||||||
|
for key in self.keys():
|
||||||
|
self.delete(key)
|
||||||
|
|
Loading…
Reference in a new issue