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/beacons/ |
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/beacons/salt_monitor.py |
""" A beacon to execute salt execution module functions. This beacon will fire only if the return data is "truthy". The function return, function name and args and/or kwargs, will be passed as data in the event. The configuration can accept a list of salt functions to execute every interval. Make sure to allot enough time via 'interval' key to allow all salt functions to execute. The salt functions will be executed sequentially. The elements in list of functions can be either a simple string (with no arguments) or a dictionary with a single key being the salt execution module and sub keys indicating args and / or kwargs. See example config below. .. code-block:: yaml beacons: salt_monitor: - salt_fun: - slsutil.renderer: args: - salt://states/apache.sls kwargs: - default_renderer: jinja - test.ping - interval: 3600 # seconds """ import salt.utils.beacons def _parse_args(args_kwargs_dict): args = args_kwargs_dict.get("args", []) kwargs = args_kwargs_dict.get("kwargs", {}) if kwargs: _kwargs = {} list(map(_kwargs.update, kwargs)) kwargs = _kwargs return args, kwargs def validate(config): config = salt.utils.beacons.list_to_dict(config) if isinstance(config["salt_fun"], str): # a simple str is taking as the single function with no args / kwargs fun = config["salt_fun"] if fun not in __salt__: return False, f"{fun} not in __salt__" else: for entry in config["salt_fun"]: if isinstance(entry, dict): # check dict is of correct form fun, args_kwargs_dict = next(iter(entry.items())) for key in args_kwargs_dict: if key == "args": if not isinstance(args_kwargs_dict[key], list): return ( False, f"args key for fun {fun} must be list", ) elif key == "kwargs": if not isinstance(args_kwargs_dict[key], list): return ( False, "kwargs key for fun {} must be list of key value pairs".format( fun ), ) for key_value in args_kwargs_dict[key]: if not isinstance(key_value, dict): return ( False, f"{key_value} is not a key / value pair", ) else: return ( False, f"key {key} not allowed under fun {fun}", ) else: # entry must be function itself fun = entry if fun not in __salt__: return False, f"{fun} not in __salt__" return True, "valid config" def beacon(config): events = [] config = salt.utils.beacons.list_to_dict(config) if isinstance(config["salt_fun"], str): # support for single salt_fun with no args / kwargs supplied as str fun = config["salt_fun"] ret = __salt__[fun]() return [{"salt_fun": fun, "ret": ret}] # else, we should have an iterable for entry in config["salt_fun"]: if isinstance(entry, dict): fun, args_kwargs_dict = list(entry.items())[0] args, kwargs = _parse_args(args_kwargs_dict) else: fun = entry args = () kwargs = {} ret = __salt__[fun](*args, **kwargs) if ret: _ret = {"salt_fun": fun, "ret": ret} if args: _ret["args"] = args if kwargs: _ret["kwargs"] = kwargs events.append(_ret) return events