mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
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")
|
||||
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)
|
||||
|
||||
|
|
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())
|
||||
|
||||
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()
|
||||
|
|
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):
|
||||
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):
|
||||
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()
|
||||
|
|
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):
|
||||
self._cache.delete(self._make_key(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):
|
||||
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):
|
||||
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)
|
||||
|
|
Loading…
Reference in a new issue