%PDF- %PDF-
Direktori : /proc/thread-self/root/usr/lib/python2.7/site-packages/salt/modules/ |
Current File : //proc/thread-self/root/usr/lib/python2.7/site-packages/salt/modules/daemontools.py |
# -*- coding: utf-8 -*- ''' daemontools service module. This module will create daemontools type service watcher. 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: daemontools ''' from __future__ import absolute_import, print_function, unicode_literals # Import python libs import logging import os import os.path import re # Import salt libs import salt.utils.path from salt.exceptions import CommandExecutionError # Function alias to not shadow built-ins. __func_alias__ = { 'reload_': 'reload' } log = logging.getLogger(__name__) __virtualname__ = 'daemontools' VALID_SERVICE_DIRS = [ '/service', '/var/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 __virtual__(): # Ensure that daemontools is installed properly. BINS = frozenset(('svc', 'supervise', 'svok')) if all(salt.utils.path.which(b) for b in BINS) and SERVICE_DIR: return __virtualname__ return False 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) #-- states.service compatible args def start(name): ''' Starts service via daemontools CLI Example: .. code-block:: bash salt '*' daemontools.start <service name> ''' __salt__['file.remove']('{0}/down'.format(_service_path(name))) cmd = 'svc -u {0}'.format(_service_path(name)) return not __salt__['cmd.retcode'](cmd, python_shell=False) #-- states.service compatible args def stop(name): ''' Stops service via daemontools CLI Example: .. code-block:: bash salt '*' daemontools.stop <service name> ''' __salt__['file.touch']('{0}/down'.format(_service_path(name))) cmd = 'svc -d {0}'.format(_service_path(name)) return not __salt__['cmd.retcode'](cmd, python_shell=False) def term(name): ''' Send a TERM to service via daemontools CLI Example: .. code-block:: bash salt '*' daemontools.term <service name> ''' cmd = 'svc -t {0}'.format(_service_path(name)) return not __salt__['cmd.retcode'](cmd, python_shell=False) #-- states.service compatible def reload_(name): ''' Wrapper for term() CLI Example: .. code-block:: bash salt '*' daemontools.reload <service name> ''' term(name) #-- states.service compatible def restart(name): ''' Restart service via daemontools. This will stop/start service CLI Example: .. code-block:: bash salt '*' daemontools.restart <service name> ''' ret = 'restart False' if stop(name) and start(name): ret = 'restart True' return ret #-- states.service compatible def full_restart(name): ''' Calls daemontools.restart() function CLI Example: .. code-block:: bash salt '*' daemontools.full_restart <service name> ''' restart(name) #-- states.service compatible def status(name, sig=None): ''' Return the status for a service via daemontools, return pid if running CLI Example: .. code-block:: bash salt '*' daemontools.status <service name> ''' cmd = 'svstat {0}'.format(_service_path(name)) out = __salt__['cmd.run_stdout'](cmd, python_shell=False) try: pid = re.search(r'\(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 '*' daemontools.available foo ''' return name in get_all() def missing(name): ''' The inverse of daemontools.available. Returns ``True`` if the specified service is not available, otherwise returns ``False``. CLI Example: .. code-block:: bash salt '*' daemontools.missing foo ''' return name not in get_all() def get_all(): ''' Return a list of all available services CLI Example: .. code-block:: bash salt '*' daemontools.get_all ''' if not SERVICE_DIR: raise CommandExecutionError("Could not find service directory.") #- List all daemontools services in return sorted(os.listdir(SERVICE_DIR)) def enabled(name, **kwargs): ''' Return True if the named service is enabled, false otherwise A service is considered enabled if in your service directory: - an executable ./run file exist - a file named "down" does not exist .. versionadded:: 2015.5.7 name Service name CLI Example: .. code-block:: bash salt '*' daemontools.enabled <service name> ''' if not available(name): log.error('Service {0} not found'.format(name)) return False run_file = os.path.join(SERVICE_DIR, name, 'run') down_file = os.path.join(SERVICE_DIR, name, 'down') return ( os.path.isfile(run_file) and os.access(run_file, os.X_OK) and not os.path.isfile(down_file) ) def disabled(name): ''' Return True if the named service is enabled, false otherwise .. versionadded:: 2015.5.6 CLI Example: .. code-block:: bash salt '*' daemontools.disabled <service name> ''' return not enabled(name)