Example #1
0
def _create_scan_dir_winss(scan_dir, finish_timeout, kill_svc=None, **kwargs):
    """Create a scan directory.

    :param ``str`` scan_dir:
        Location of the scan directory.
    :param ``int`` finish_timeout:
        The finish script timeout.
    :param ``str`` kill_svc:
        The service to kill before shutdown.
    :returns ``_service_dir_base.ServiceDirBase``:
        Instance of a service dir
    """
    if not isinstance(scan_dir, sup_impl.ScanDir):
        scan_dir = sup_impl.ScanDir(scan_dir)

    svscan_finish_script = templates.generate_template(
        'winss.svscan.finish',
        timeout=finish_timeout,
        scan_dir=scan_dir.directory,
        _alias=subproc.get_aliases())
    scan_dir.finish = svscan_finish_script
    svscan_sigterm_script = templates.generate_template(
        'winss.svscan.sigterm',
        kill_svc=kill_svc,
        _alias=subproc.get_aliases())
    scan_dir.sigterm = svscan_sigterm_script
    return scan_dir
Example #2
0
def _create_scan_dir_s6(scan_dir, finish_timeout,
                        wait_cgroups=None,
                        kill_svc=None,
                        finish_commands=None,
                        **kwargs):
    """Create a scan directory.

    :param ``str`` scan_dir:
        Location of the scan directory.
    :param ``int`` finish_timeout:
        The finish script timeout.
    :param ``str`` wait_cgroups:
        Instruct the finish procedure to wait on all processes in the cgroup.
    :param ``str`` kill_svc:
        The service to kill before shutdown.
    :returns ``_service_dir_base.ServiceDirBase``:
        Instance of a service dir
    """
    if not isinstance(scan_dir, sup_impl.ScanDir):
        scan_dir = sup_impl.ScanDir(scan_dir)

    if not finish_commands:
        finish_commands = []

    svscan_finish_script = templates.generate_template(
        's6.svscan.finish',
        timeout=finish_timeout,
        wait_cgroups=wait_cgroups,
        finish_commands=finish_commands,
        _alias=subproc.get_aliases()
    )
    scan_dir.finish = svscan_finish_script
    svscan_sigterm_script = templates.generate_template(
        's6.svscan.sigterm',
        kill_svc=kill_svc,
        _alias=subproc.get_aliases()
    )
    scan_dir.sigterm = svscan_sigterm_script
    svscan_sighup_script = templates.generate_template(
        's6.svscan.sighup',
        kill_svc=kill_svc,
        _alias=subproc.get_aliases()
    )
    scan_dir.sighup = svscan_sighup_script
    svscan_sigint_script = templates.generate_template(
        's6.svscan.sigint',
        kill_svc=kill_svc,
        _alias=subproc.get_aliases()
    )
    scan_dir.sigint = svscan_sigint_script
    svscan_sigquit_script = templates.generate_template(
        's6.svscan.sigquit',
        kill_svc=kill_svc,
        _alias=subproc.get_aliases()
    )
    scan_dir.sigquit = svscan_sigquit_script
    return scan_dir
Example #3
0
def _create_service_winss(base_dir,
                          name,
                          app_run_script,
                          downed=False,
                          environ=None,
                          monitor_policy=None,
                          timeout_finish=None,
                          run_script='winss.run',
                          log_run_script='winss.logger.run',
                          finish_script='winss.finish',
                          **kwargs):
    """Initializes service directory.

    Creates run, finish scripts as well as log directory with appropriate
    run script.
    """
    if isinstance(base_dir, sup_impl.ScanDir):
        # We are given a scandir as base, use it.
        svc = base_dir.add_service(name, _service_base.ServiceType.LongRun)
    else:
        svc = LongrunService(base_dir, name)

    # Setup the environ
    if environ is None:
        svc_environ = {}
    else:
        svc_environ = environ.copy()

    svc.environ = svc_environ

    # Setup the run script
    svc.run_script = templates.generate_template(run_script,
                                                 app_run_script=app_run_script,
                                                 _alias=subproc.get_aliases())

    if monitor_policy is not None:
        # Setup the finish script
        svc.finish_script = templates.generate_template(
            finish_script,
            monitor_policy=monitor_policy,
            _alias=subproc.get_aliases())

    logdir = os.path.join(svc.data_dir, 'log')
    fs.mkdir_safe(logdir)

    if log_run_script is not None:
        # Setup the log run script
        svc.log_run_script = templates.generate_template(
            log_run_script,
            logdir=os.path.relpath(logdir, svc.logger_dir),
            _alias=subproc.get_aliases())

    svc.default_down = bool(downed)
    if monitor_policy is not None:
        svc.timeout_finish = 0
        if monitor_policy['limit'] > 0:
            exits_dir = os.path.join(svc.data_dir, EXITS_DIR)
            fs.mkdir_safe(exits_dir)
            fs.rm_children_safe(exits_dir)
    else:
        svc.timeout_finish = timeout_finish

    svc.write()

    return svc
Example #4
0
def _create_service_s6(base_dir,
                       name,
                       app_run_script,
                       userid='root',
                       downed=False,
                       environ_dir=None,
                       environ=None,
                       environment='prod',
                       monitor_policy=None,
                       trace=None,
                       timeout_finish=None,
                       notification_fd=None,
                       call_before_run=None,
                       call_before_finish=None,
                       run_script='s6.run',
                       log_run_script='s6.logger.run',
                       finish_script='s6.finish',
                       logger_args=None,
                       ionice_prio=None,
                       **kwargs):
    """Initializes service directory.

    Creates run, finish scripts as well as log directory with appropriate
    run script.
    """
    # Disable R0912: Too many branches
    # pylint: disable=R0912
    try:
        home_dir = utils.get_userhome(userid)
        shell = utils.get_usershell(userid)

    except KeyError:
        # Check the identity we are going to run as. It needs to exists on the
        # host or we will fail later on as we try to seteuid.
        _LOGGER.exception('Unable to find userid %r in passwd database.',
                          userid)
        raise

    if isinstance(base_dir, sup_impl.ScanDir):
        # We are given a scandir as base, use it.
        svc = base_dir.add_service(name, _service_base.ServiceType.LongRun)
    else:
        svc = LongrunService(base_dir, name)

    # Setup the environ
    if environ is None:
        svc_environ = {}
    else:
        svc_environ = environ.copy()
    svc_environ['HOME'] = home_dir
    svc.environ = svc_environ

    if ionice_prio is None:
        if environment == 'prod':
            ionice_prio = 5
        else:
            ionice_prio = 6

    # Setup the run script
    svc.run_script = templates.generate_template(
        run_script,
        user=userid,
        shell=shell,
        environ_dir=environ_dir,
        trace=trace,
        ionice_prio=ionice_prio,
        call_before_run=call_before_run,
        _alias=subproc.get_aliases())

    if monitor_policy is not None or call_before_finish is not None:
        # Setup the finish script
        svc.finish_script = templates.generate_template(
            finish_script,
            monitor_policy=monitor_policy,
            trace=trace,
            call_before_finish=call_before_finish,
            _alias=subproc.get_aliases())

    if log_run_script is not None:
        if logger_args is None:
            logger_args = '-b -p T n20 s1000000'

        # Setup the log run script
        svc.log_run_script = templates.generate_template(
            log_run_script,
            logdir=os.path.relpath(os.path.join(svc.data_dir, 'log'),
                                   svc.logger_dir),
            logger_args=logger_args,
            _alias=subproc.get_aliases())

    svc.default_down = bool(downed)
    svc.notification_fd = notification_fd

    if monitor_policy is not None:
        svc.timeout_finish = 0
        if monitor_policy['limit'] > 0:
            exits_dir = os.path.join(svc.data_dir, EXITS_DIR)
            fs.mkdir_safe(exits_dir)
            fs.rm_children_safe(exits_dir)
    else:
        svc.timeout_finish = timeout_finish

    svc.write()

    # Write the app_start script
    supervisor_utils.script_write(os.path.join(svc.data_dir, 'app_start'),
                                  app_run_script)

    return svc