PK œqhYî¶J‚ßF ßF ) nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/
Dir : /proc/self/root/opt/saltstack/salt/lib/python3.10/site-packages/salt/cache/ |
Server: Linux ngx353.inmotionhosting.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64 IP: 209.182.202.254 |
Dir : //proc/self/root/opt/saltstack/salt/lib/python3.10/site-packages/salt/cache/localfs.py |
""" Cache data in filesystem. .. versionadded:: 2016.11.0 The ``localfs`` Minion cache module is the default cache module and does not require any configuration. Expiration values can be set in the relevant config file (``/etc/salt/master`` for the master, ``/etc/salt/cloud`` for Salt Cloud, etc). """ import errno import logging import os import os.path import shutil import tempfile import salt.payload import salt.utils.atomicfile import salt.utils.files from salt.exceptions import SaltCacheError log = logging.getLogger(__name__) __func_alias__ = {"list_": "list"} def __cachedir(kwargs=None): if kwargs and "cachedir" in kwargs: return kwargs["cachedir"] return __opts__.get("cachedir", salt.syspaths.CACHE_DIR) def init_kwargs(kwargs): return {"cachedir": __cachedir(kwargs)} def get_storage_id(kwargs): return ("localfs", __cachedir(kwargs)) def store(bank, key, data, cachedir): """ Store information in a file. """ base = os.path.join(cachedir, os.path.normpath(bank)) try: os.makedirs(base) except OSError as exc: if exc.errno != errno.EEXIST: raise SaltCacheError( f"The cache directory, {base}, could not be created: {exc}" ) outfile = os.path.join(base, f"{key}.p") tmpfh, tmpfname = tempfile.mkstemp(dir=base) os.close(tmpfh) try: with salt.utils.files.fopen(tmpfname, "w+b") as fh_: salt.payload.dump(data, fh_) # On Windows, os.rename will fail if the destination file exists. salt.utils.atomicfile.atomic_rename(tmpfname, outfile) except OSError as exc: raise SaltCacheError( f"There was an error writing the cache file, {base}: {exc}" ) def fetch(bank, key, cachedir): """ Fetch information from a file. """ inkey = False key_file = os.path.join(cachedir, os.path.normpath(bank), f"{key}.p") if not os.path.isfile(key_file): # The bank includes the full filename, and the key is inside the file key_file = os.path.join(cachedir, os.path.normpath(bank) + ".p") inkey = True if not os.path.isfile(key_file): log.debug('Cache file "%s" does not exist', key_file) return {} try: with salt.utils.files.fopen(key_file, "rb") as fh_: if inkey: return salt.payload.load(fh_)[key] else: return salt.payload.load(fh_) except OSError as exc: raise SaltCacheError( f'There was an error reading the cache file "{key_file}": {exc}' ) def updated(bank, key, cachedir): """ Return the epoch of the mtime for this cache file """ key_file = os.path.join(cachedir, os.path.normpath(bank), f"{key}.p") if not os.path.isfile(key_file): log.warning('Cache file "%s" does not exist', key_file) return None try: return int(os.path.getmtime(key_file)) except OSError as exc: raise SaltCacheError( f'There was an error reading the mtime for "{key_file}": {exc}' ) def flush(bank, key=None, cachedir=None): """ Remove the key from the cache bank with all the key content. """ if cachedir is None: cachedir = __cachedir() try: if key is None: target = os.path.join(cachedir, os.path.normpath(bank)) if not os.path.isdir(target): return False shutil.rmtree(target) else: target = os.path.join(cachedir, os.path.normpath(bank), f"{key}.p") if not os.path.isfile(target): return False os.remove(target) except OSError as exc: raise SaltCacheError(f'There was an error removing "{target}": {exc}') return True def list_(bank, cachedir): """ Return an iterable object containing all entries stored in the specified bank. """ base = os.path.join(cachedir, os.path.normpath(bank)) if not os.path.isdir(base): return [] try: items = os.listdir(base) except OSError as exc: raise SaltCacheError(f'There was an error accessing directory "{base}": {exc}') ret = [] for item in items: if item.endswith(".p"): ret.append(item.rstrip(item[-2:])) else: ret.append(item) return ret def contains(bank, key, cachedir): """ Checks if the specified bank contains the specified key. """ if key is None: base = os.path.join(cachedir, os.path.normpath(bank)) return os.path.isdir(base) else: keyfile = os.path.join(cachedir, os.path.normpath(bank), f"{key}.p") return os.path.isfile(keyfile)