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/modules/ |
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/modules/dnsmasq.py |
""" Module for managing dnsmasq """ import logging import os import salt.utils.files import salt.utils.platform from salt.exceptions import CommandExecutionError log = logging.getLogger(__name__) def __virtual__(): """ Only work on POSIX-like systems. """ if salt.utils.platform.is_windows(): return ( False, "dnsmasq execution module cannot be loaded: only works on " "non-Windows systems.", ) return True def version(): """ Shows installed version of dnsmasq. CLI Example: .. code-block:: bash salt '*' dnsmasq.version """ cmd = "dnsmasq -v" out = __salt__["cmd.run"](cmd).splitlines() comps = out[0].split() return comps[2] def fullversion(): """ Shows installed version of dnsmasq and compile options. CLI Example: .. code-block:: bash salt '*' dnsmasq.fullversion """ cmd = "dnsmasq -v" out = __salt__["cmd.run"](cmd).splitlines() comps = out[0].split() version_num = comps[2] comps = out[1].split() return {"version": version_num, "compile options": comps[3:]} def set_config(config_file="/etc/dnsmasq.conf", follow=True, **kwargs): """ Sets a value or a set of values in the specified file. By default, if conf-dir is configured in this file, salt will attempt to set the option in any file inside the conf-dir where it has already been enabled. If it does not find it inside any files, it will append it to the main config file. Setting follow to False will turn off this behavior. If a config option currently appears multiple times (such as dhcp-host, which is specified at least once per host), the new option will be added to the end of the main config file (and not to any includes). If you need an option added to a specific include file, specify it as the config_file. :param string config_file: config file where settings should be updated / added. :param bool follow: attempt to set the config option inside any file within the ``conf-dir`` where it has already been enabled. :param kwargs: key value pairs that contain the configuration settings that you want set. CLI Examples: .. code-block:: bash salt '*' dnsmasq.set_config domain=mydomain.com salt '*' dnsmasq.set_config follow=False domain=mydomain.com salt '*' dnsmasq.set_config config_file=/etc/dnsmasq.conf domain=mydomain.com """ dnsopts = get_config(config_file) includes = [config_file] if follow is True and "conf-dir" in dnsopts: for filename in os.listdir(dnsopts["conf-dir"]): if filename.startswith("."): continue if filename.endswith("~"): continue if filename.endswith("bak"): continue if filename.endswith("#") and filename.endswith("#"): continue includes.append("{}/{}".format(dnsopts["conf-dir"], filename)) ret_kwargs = {} for key in kwargs: # Filter out __pub keys as they should not be added to the config file # See Issue #34263 for more information if key.startswith("__"): continue ret_kwargs[key] = kwargs[key] if key in dnsopts: if isinstance(dnsopts[key], str): for config in includes: __salt__["file.sed"]( path=config, before=f"^{key}=.*", after=f"{key}={kwargs[key]}", ) else: __salt__["file.append"](config_file, f"{key}={kwargs[key]}") else: __salt__["file.append"](config_file, f"{key}={kwargs[key]}") return ret_kwargs def get_config(config_file="/etc/dnsmasq.conf"): """ Dumps all options from the config file. config_file The location of the config file from which to obtain contents. Defaults to ``/etc/dnsmasq.conf``. CLI Examples: .. code-block:: bash salt '*' dnsmasq.get_config salt '*' dnsmasq.get_config config_file=/etc/dnsmasq.conf """ dnsopts = _parse_dnamasq(config_file) if "conf-dir" in dnsopts: for filename in os.listdir(dnsopts["conf-dir"]): if filename.startswith("."): continue if filename.endswith("~"): continue if filename.endswith("#") and filename.endswith("#"): continue dnsopts.update( _parse_dnamasq("{}/{}".format(dnsopts["conf-dir"], filename)) ) return dnsopts def _parse_dnamasq(filename): """ Generic function for parsing dnsmasq files including includes. """ fileopts = {} if not os.path.isfile(filename): raise CommandExecutionError(f"Error: No such file '{filename}'") with salt.utils.files.fopen(filename, "r") as fp_: for line in fp_: line = salt.utils.stringutils.to_unicode(line) if not line.strip(): continue if line.startswith("#"): continue if "=" in line: comps = line.split("=") if comps[0] in fileopts: if isinstance(fileopts[comps[0]], str): temp = fileopts[comps[0]] fileopts[comps[0]] = [temp] fileopts[comps[0]].append(comps[1].strip()) else: fileopts[comps[0]] = comps[1].strip() else: if "unparsed" not in fileopts: fileopts["unparsed"] = [] fileopts["unparsed"].append(line) return fileopts