diff options
author | Olivier Mauras <olivier@mauras.ch> | 2016-09-16 09:29:16 +0200 |
---|---|---|
committer | Jakub Jirutka <jakub@jirutka.cz> | 2016-09-16 11:33:48 +0200 |
commit | 8bb108c256ed10c31ebf5bf8abfe1c75c06f4284 (patch) | |
tree | eed6cf08fa14a67d8ffc1fc65bf6a4d84a78619b /community/salt/0001-alpine-support.patch | |
parent | 756fa0ec3b74f05188e38b16c6e066480451eaaf (diff) | |
download | aports-8bb108c256ed10c31ebf5bf8abfe1c75c06f4284.tar.bz2 aports-8bb108c256ed10c31ebf5bf8abfe1c75c06f4284.tar.xz |
community/salt: pkg/service modules improvements
Diffstat (limited to 'community/salt/0001-alpine-support.patch')
-rw-r--r-- | community/salt/0001-alpine-support.patch | 338 |
1 files changed, 324 insertions, 14 deletions
diff --git a/community/salt/0001-alpine-support.patch b/community/salt/0001-alpine-support.patch index 3963ea8173..b403431523 100644 --- a/community/salt/0001-alpine-support.patch +++ b/community/salt/0001-alpine-support.patch @@ -1,12 +1,11 @@ -Patch has been merged upstream through PR https://github.com/saltstack/salt/pull/36207 -Will keep the patch until the feature appears in the next version +Upstream code not yet released --- diff --git a/salt/modules/apk.py b/salt/modules/apk.py new file mode 100644 -index 0000000..40bf38f +index 0000000..c7cf312 --- /dev/null +++ b/salt/modules/apk.py -@@ -0,0 +1,571 @@ +@@ -0,0 +1,583 @@ +# -*- coding: utf-8 -*- +''' +Support for apk @@ -17,7 +16,7 @@ index 0000000..40bf38f + *'pkg.install' is not available*), see :ref:`here + <module-provider-override>`. + -+.. versionadded: 2016.3.0 ++.. versionadded: Nitrogen + +''' +from __future__ import absolute_import @@ -46,9 +45,6 @@ index 0000000..40bf38f + return __virtualname__ + return (False, "Module apk only works on Alpine Linux based systems") + -+# Unavailable functions -+#def version(*names, **kwargs): -+# return 'Not available' +#def autoremove(list_only=False, purge=False): +# return 'Not available' +#def hold(name=None, pkgs=None, sources=None, **kwargs): # pylint: disable=W0613 @@ -78,6 +74,21 @@ index 0000000..40bf38f +#def info_installed(*names): +# return 'Not available' + ++def version(*names, **kwargs): ++ ''' ++ Returns a string representing the package version or an empty string if not ++ installed. If more than one package name is specified, a dict of ++ name/version pairs is returned. ++ ++ CLI Example: ++ ++ .. code-block:: bash ++ ++ salt '*' pkg.version <package name> ++ salt '*' pkg.version <package1> <package2> <package3> ... ++ ''' ++ return __salt__['pkg_resource.version'](*names, **kwargs) ++ + +def refresh_db(): + ''' @@ -579,15 +590,314 @@ index 0000000..40bf38f + + return ret diff --git a/salt/modules/gentoo_service.py b/salt/modules/gentoo_service.py -index 6345ae3..32dfcde 100644 +index 92cf48a..32dfcde 100644 --- a/salt/modules/gentoo_service.py +++ b/salt/modules/gentoo_service.py -@@ -31,6 +31,8 @@ def __virtual__(): +@@ -12,6 +12,14 @@ to the correct service manager + + # Import Python libs + from __future__ import absolute_import ++import logging ++ ++# Import salt libs ++import salt.utils.systemd ++import salt.utils.odict as odict ++ ++# Set up logging ++log = logging.getLogger(__name__) + + # Define the module's virtual name + __virtualname__ = 'service' +@@ -19,12 +27,65 @@ __virtualname__ = 'service' + + def __virtual__(): ''' - if __grains__['os'] == 'Gentoo' and not salt.utils.systemd.booted(__context__): - return __virtualname__ -+ if __grains__['os'] == 'Alpine': +- Only work on systems which default to systemd ++ Only work on systems which default to OpenRC + ''' +- if __grains__['os'] == 'Gentoo': ++ if __grains__['os'] == 'Gentoo' and not salt.utils.systemd.booted(__context__): + return __virtualname__ ++ if __grains__['os'] == 'Alpine': + return __virtualname__ return (False, 'The gentoo_service execution module cannot be loaded: ' - 'only available on Gentoo/Open-RC systems.') +- 'only available on Gentoo systems.') ++ 'only available on Gentoo/Open-RC systems.') ++ ++ ++def _ret_code(cmd): ++ log.debug('executing [{0}]'.format(cmd)) ++ sts = __salt__['cmd.retcode'](cmd, python_shell=False) ++ return sts ++ ++ ++def _list_services(): ++ return __salt__['cmd.run']('rc-update -v show').splitlines() ++ ++ ++def _get_service_list(include_enabled=True, include_disabled=False): ++ enabled_services = dict() ++ disabled_services = set() ++ lines = _list_services() ++ for line in lines: ++ if '|' not in line: ++ continue ++ service = [l.strip() for l in line.split('|')] ++ # enabled service should have runlevels ++ if service[1]: ++ if include_enabled: ++ enabled_services.update({service[0]: sorted(service[1].split())}) ++ continue ++ # in any other case service is disabled ++ if include_disabled: ++ disabled_services.update({service[0]: []}) ++ return enabled_services, disabled_services ++ ++ ++def _enable_delta(name, requested_runlevels): ++ all_enabled = get_enabled() ++ current_levels = set(all_enabled[name] if name in all_enabled else []) ++ enabled_levels = requested_runlevels - current_levels ++ disabled_levels = current_levels - requested_runlevels ++ return enabled_levels, disabled_levels ++ ++ ++def _disable_delta(name, requested_runlevels): ++ all_enabled = get_enabled() ++ current_levels = set(all_enabled[name] if name in all_enabled else []) ++ return current_levels & requested_runlevels ++ ++ ++def _service_cmd(*args): ++ return '/etc/init.d/{0} {1}'.format(args[0], ' '.join(args[1:])) ++ ++ ++def _enable_disable_cmd(name, command, runlevels=()): ++ return 'rc-update {0} {1} {2}'.format(command, name, ' '.join(sorted(runlevels))).strip() + + + def get_enabled(): +@@ -37,15 +98,8 @@ def get_enabled(): + + salt '*' service.get_enabled + ''' +- ret = set() +- lines = __salt__['cmd.run']('rc-update show').splitlines() +- for line in lines: +- if '|' not in line: +- continue +- if 'shutdown' in line: +- continue +- ret.add(line.split('|')[0].strip()) +- return sorted(ret) ++ (enabled_services, disabled_services) = _get_service_list() ++ return odict.OrderedDict(enabled_services) + + def get_disabled(): +@@ -58,17 +112,9 @@ def get_disabled(): + + salt '*' service.get_disabled + ''' +- ret = set() +- lines = __salt__['cmd.run']('rc-update -v show').splitlines() +- for line in lines: +- if '|' not in line: +- continue +- elif 'shutdown' in line: +- continue +- comps = line.split() +- if len(comps) < 3: +- ret.add(comps[0]) +- return sorted(ret) ++ (enabled_services, disabled_services) = _get_service_list(include_enabled=False, ++ include_disabled=True) ++ return sorted(disabled_services) + + + def available(name): +@@ -82,7 +128,9 @@ def available(name): + + salt '*' service.available sshd + ''' +- return name in get_all() ++ (enabled_services, disabled_services) = _get_service_list(include_enabled=True, ++ include_disabled=True) ++ return name in enabled_services or name in disabled_services + + + def missing(name): +@@ -97,7 +145,7 @@ def missing(name): + + salt '*' service.missing sshd + ''' +- return name not in get_all() ++ return not available(name) + + + def get_all(): +@@ -110,7 +158,10 @@ def get_all(): + + salt '*' service.get_all + ''' +- return sorted(get_enabled() + get_disabled()) ++ (enabled_services, disabled_services) = _get_service_list(include_enabled=True, ++ include_disabled=True) ++ enabled_services.update(dict([(s, []) for s in disabled_services])) ++ return odict.OrderedDict(enabled_services) + + + def start(name): +@@ -123,8 +174,8 @@ def start(name): + + salt '*' service.start <service name> + ''' +- cmd = '/etc/init.d/{0} start'.format(name) +- return not __salt__['cmd.retcode'](cmd, python_shell=False) ++ cmd = _service_cmd(name, 'start') ++ return not _ret_code(cmd) + + + def stop(name): +@@ -137,8 +188,8 @@ def stop(name): + + salt '*' service.stop <service name> + ''' +- cmd = '/etc/init.d/{0} stop'.format(name) +- return not __salt__['cmd.retcode'](cmd, python_shell=False) ++ cmd = _service_cmd(name, 'stop') ++ return not _ret_code(cmd) + + + def restart(name): +@@ -151,8 +202,36 @@ def restart(name): + + salt '*' service.restart <service name> + ''' +- cmd = '/etc/init.d/{0} restart'.format(name) +- return not __salt__['cmd.retcode'](cmd, python_shell=False) ++ cmd = _service_cmd(name, 'restart') ++ return not _ret_code(cmd) ++ ++ ++def reload_(name): ++ ''' ++ Reload the named service ++ ++ CLI Example: ++ ++ .. code-block:: bash ++ ++ salt '*' service.reload <service name> ++ ''' ++ cmd = _service_cmd(name, 'reload') ++ return not _ret_code(cmd) ++ ++ ++def zap(name): ++ ''' ++ Resets service state ++ ++ CLI Example: ++ ++ .. code-block:: bash ++ ++ salt '*' service.zap <service name> ++ ''' ++ cmd = _service_cmd(name, 'zap') ++ return not _ret_code(cmd) + + + def status(name, sig=None): +@@ -167,7 +246,10 @@ def status(name, sig=None): + + salt '*' service.status <service name> [service signature] + ''' +- return __salt__['status.pid'](sig if sig else name) ++ if sig: ++ return bool(__salt__['status.pid'](sig)) ++ cmd = _service_cmd(name, 'status') ++ return not _ret_code(cmd) + + + def enable(name, **kwargs): +@@ -178,10 +260,26 @@ def enable(name, **kwargs): + + .. code-block:: bash + +- salt '*' service.enable <service name> ++ salt '*' service.enable <service name> <runlevels=single-runlevel> ++ salt '*' service.enable <service name> <runlevels=[runlevel1,runlevel2]> + ''' +- cmd = 'rc-update add {0} default'.format(name) +- return not __salt__['cmd.retcode'](cmd, python_shell=False) ++ if 'runlevels' in kwargs: ++ requested_levels = set(kwargs['runlevels'] if isinstance(kwargs['runlevels'], ++ list) else [kwargs['runlevels']]) ++ enabled_levels, disabled_levels = _enable_delta(name, requested_levels) ++ commands = [] ++ if disabled_levels: ++ commands.append(_enable_disable_cmd(name, 'delete', disabled_levels)) ++ if enabled_levels: ++ commands.append(_enable_disable_cmd(name, 'add', enabled_levels)) ++ if not commands: ++ return True ++ else: ++ commands = [_enable_disable_cmd(name, 'add')] ++ for cmd in commands: ++ if _ret_code(cmd): ++ return False ++ return True + + + def disable(name, **kwargs): +@@ -192,10 +290,18 @@ def disable(name, **kwargs): + + .. code-block:: bash + +- salt '*' service.disable <service name> ++ salt '*' service.disable <service name> <runlevels=single-runlevel> ++ salt '*' service.disable <service name> <runlevels=[runlevel1,runlevel2]> + ''' +- cmd = 'rc-update delete {0} default'.format(name) +- return not __salt__['cmd.retcode'](cmd, python_shell=False) ++ levels = [] ++ if 'runlevels' in kwargs: ++ requested_levels = set(kwargs['runlevels'] if isinstance(kwargs['runlevels'], ++ list) else [kwargs['runlevels']]) ++ levels = _disable_delta(name, requested_levels) ++ if not levels: ++ return True ++ cmd = _enable_disable_cmd(name, 'delete', levels) ++ return not _ret_code(cmd) + + + def enabled(name, **kwargs): +@@ -206,9 +312,17 @@ def enabled(name, **kwargs): + + .. code-block:: bash + +- salt '*' service.enabled <service name> ++ salt '*' service.enabled <service name> <runlevels=single-runlevel> ++ salt '*' service.enabled <service name> <runlevels=[runlevel1,runlevel2]> + ''' +- return name in get_enabled() ++ enabled_services = get_enabled() ++ if name not in enabled_services: ++ return False ++ if 'runlevels' not in kwargs: ++ return True ++ requested_levels = set(kwargs['runlevels'] if isinstance(kwargs['runlevels'], ++ list) else [kwargs['runlevels']]) ++ return len(requested_levels - set(enabled_services[name])) == 0 + + + def disabled(name): +@@ -219,6 +333,6 @@ def disabled(name): + + .. code-block:: bash + +- salt '*' service.disabled <service name> ++ salt '*' service.disabled <service name> <runlevels=[runlevel]> + ''' + return name in get_disabled() |