diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 16:04:21 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 16:04:21 +0000 |
commit | 8a754e0858d922e955e71b253c139e071ecec432 (patch) | |
tree | 527d16e74bfd1840c85efd675fdecad056c54107 /lib/ansible/vars/fact_cache.py | |
parent | Initial commit. (diff) | |
download | ansible-core-upstream/2.14.3.tar.xz ansible-core-upstream/2.14.3.zip |
Adding upstream version 2.14.3.upstream/2.14.3upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | lib/ansible/vars/fact_cache.py | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/lib/ansible/vars/fact_cache.py b/lib/ansible/vars/fact_cache.py new file mode 100644 index 0000000..868a905 --- /dev/null +++ b/lib/ansible/vars/fact_cache.py @@ -0,0 +1,72 @@ +# Copyright: (c) 2014, Michael DeHaan <michael.dehaan@gmail.com> +# Copyright: (c) 2018, Ansible Project +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + + +from __future__ import (absolute_import, division, print_function) +__metaclass__ = type + +from collections.abc import MutableMapping + +from ansible import constants as C +from ansible.errors import AnsibleError +from ansible.plugins.loader import cache_loader +from ansible.utils.display import Display + + +display = Display() + + +class FactCache(MutableMapping): + + def __init__(self, *args, **kwargs): + + self._plugin = cache_loader.get(C.CACHE_PLUGIN) + if not self._plugin: + raise AnsibleError('Unable to load the facts cache plugin (%s).' % (C.CACHE_PLUGIN)) + + super(FactCache, self).__init__(*args, **kwargs) + + def __getitem__(self, key): + if not self._plugin.contains(key): + raise KeyError + return self._plugin.get(key) + + def __setitem__(self, key, value): + self._plugin.set(key, value) + + def __delitem__(self, key): + self._plugin.delete(key) + + def __contains__(self, key): + return self._plugin.contains(key) + + def __iter__(self): + return iter(self._plugin.keys()) + + def __len__(self): + return len(self._plugin.keys()) + + def copy(self): + """ Return a primitive copy of the keys and values from the cache. """ + return dict(self) + + def keys(self): + return self._plugin.keys() + + def flush(self): + """ Flush the fact cache of all keys. """ + self._plugin.flush() + + def first_order_merge(self, key, value): + host_facts = {key: value} + + try: + host_cache = self._plugin.get(key) + if host_cache: + host_cache.update(value) + host_facts[key] = host_cache + except KeyError: + pass + + super(FactCache, self).update(host_facts) |