%PDF- %PDF-
Direktori : /lib/python2.7/site-packages/salt/modules/ |
Current File : //lib/python2.7/site-packages/salt/modules/s6.py |
# -*- coding: utf-8 -*- ''' s6 service module This module is compatible with the :mod:`service <salt.states.service>` states, so it can be used to maintain services using the ``provider`` argument: .. code-block:: yaml myservice: service: - running - provider: s6 Note that the ``enabled`` argument is not available with this provider. :codeauthor: Marek Skrobacki <skrobul@skrobul.com> ''' from __future__ import absolute_import, unicode_literals, print_function # Import python libs import os import re # Import salt libs from salt.exceptions import CommandExecutionError __func_alias__ = { 'reload_': 'reload' } VALID_SERVICE_DIRS = [ '/service', '/etc/service', ] SERVICE_DIR = None for service_dir in VALID_SERVICE_DIRS: if os.path.exists(service_dir): SERVICE_DIR = service_dir break def _service_path(name): ''' build service path ''' if not SERVICE_DIR: raise CommandExecutionError("Could not find service directory.") return '{0}/{1}'.format(SERVICE_DIR, name) def start(name): ''' Starts service via s6 CLI Example: .. code-block:: bash salt '*' s6.start <service name> ''' cmd = 's6-svc -u {0}'.format(_service_path(name)) return not __salt__['cmd.retcode'](cmd) def stop(name): ''' Stops service via s6 CLI Example: .. code-block:: bash salt '*' s6.stop <service name> ''' cmd = 's6-svc -d {0}'.format(_service_path(name)) return not __salt__['cmd.retcode'](cmd) def term(name): ''' Send a TERM to service via s6 CLI Example: .. code-block:: bash salt '*' s6.term <service name> ''' cmd = 's6-svc -t {0}'.format(_service_path(name)) return not __salt__['cmd.retcode'](cmd) def reload_(name): ''' Send a HUP to service via s6 CLI Example: .. code-block:: bash salt '*' s6.reload <service name> ''' cmd = 's6-svc -h {0}'.format(_service_path(name)) return not __salt__['cmd.retcode'](cmd) def restart(name): ''' Restart service via s6. This will stop/start service CLI Example: .. code-block:: bash salt '*' s6.restart <service name> ''' cmd = 's6-svc -t {0}'.format(_service_path(name)) return not __salt__['cmd.retcode'](cmd) def full_restart(name): ''' Calls s6.restart() function CLI Example: .. code-block:: bash salt '*' s6.full_restart <service name> ''' restart(name) def status(name, sig=None): ''' Return the status for a service via s6, return pid if running CLI Example: .. code-block:: bash salt '*' s6.status <service name> ''' cmd = 's6-svstat {0}'.format(_service_path(name)) out = __salt__['cmd.run_stdout'](cmd) try: pid = re.search(r'up \(pid (\d+)\)', out).group(1) except AttributeError: pid = '' return pid def available(name): ''' Returns ``True`` if the specified service is available, otherwise returns ``False``. CLI Example: .. code-block:: bash salt '*' s6.available foo ''' return name in get_all() def missing(name): ''' The inverse of s6.available. Returns ``True`` if the specified service is not available, otherwise returns ``False``. CLI Example: .. code-block:: bash salt '*' s6.missing foo ''' return name not in get_all() def get_all(): ''' Return a list of all available services CLI Example: .. code-block:: bash salt '*' s6.get_all ''' if not SERVICE_DIR: raise CommandExecutionError("Could not find service directory.") service_list = [dirname for dirname in os.listdir(SERVICE_DIR) if not dirname.startswith('.')] return sorted(service_list)