Exemple #1
0
def shell(
        code,
        rollback=None,
        if_not=None,
        only_if=None,
        description='Shell script'
):

    def exec_script(script):
        script = compile_content(script)
        run(script, log_output=True)

    def _apply():
        exec_script(code)

    def _rollback():
        if rollback:
            exec_script(rollback)

    worker.register_resource(
        PythonResource(
            _apply,
            _rollback,
            if_not,
            only_if,
            description=description
        )
    )
Exemple #2
0
def yaml_file(
        filename,
        config
):

    def dict_sum(d1, d2):
        if d1 is None:
            return d2
        if d2 is None:
            return d1
        if isinstance(d1, list) and isinstance(d2, list):
            return list(set(d1 + d2))
        try:
            return d1 + d2
        except TypeError:
            # assume d1 and d2 are dictionaries
            keys = set(d1.keys()) | set(d2.keys())
            return dict((key, dict_sum(d1.get(key), d2.get(key))) for key in keys)

    def _apply():
        debug('Write yaml settings to %s' % filename)
        debug(config)

        cfg = yaml.load(file(filename, 'r'))    # 'document.yaml' contains a single YAML document.
        cfg = dict_sum(cfg, config)
        with open(filename, 'w') as configfile:
            yaml.dump(cfg, configfile)

    worker.register_resource(
        PythonResource(
            _apply,
            description='Ini file'
        )
    )
Exemple #3
0
def ini_file(
        filename,
        config,
        strict_sections=False,
        on_apply=None
):

    def _apply():
        debug('Write ini settings to %s' % filename)
        debug(config)

        cfg = ConfigParser()
        cfg.read(filename)
        for section, values in config.items():
            if not cfg.has_section(section):
                if strict_sections:
                    raise Exception('No section %s in ini file %s' % (section, filename))
                else:
                    cfg.add_section(section)

            for key, val in values.items():
                cfg.set(section, key, val)

        with open(filename, 'w') as configfile:
            cfg.write(configfile)

        event(on_apply)

    worker.register_resource(
        PythonResource(
            _apply,
            description='Ini file'
        )
    )
Exemple #4
0
def bash_script(
        code,
        rollback=None,
        if_not=None,
        only_if=None,
        user=None
):

    def exec_bash_script(script):
        script = compile_content(script)

        if "\n" in script:
            f = NamedTemporaryFile(delete=False)
            f.write(script)
            f.close()
            if user:
                subprocess.call(['chown', user, f.name])
            command = 'bash %s' % f.name
            if user:
                command = 'su -c "%s" - %s ' % (command, user)

            debug('bash$ %s' % command)
            debug('\n\n%s\n' % script)
            run(command)
            os.unlink(f.name)
        else:
            if user:
                script = 'su -c "%s" - %s ' % (script, user)
            run(script, log_output=True)

    def _apply():
        exec_bash_script(code)

    def _rollback():
        exec_bash_script(rollback)

    worker.register_resource(
        PythonResource(
            _apply,
            _rollback,
            if_not,
            only_if,
            description='Bash script'
        )
    )
def service(name, controller='sysv', start=True, process_name=None, cmd_line_contains=None):
    """
    Resource for stopping and running services

    @param start:
    @param controller:
    @param name:
    """
    if controller == 'upstart':
        resource = UpstartServiceResource(name, start, process_name, cmd_line_contains)
    elif controller != 'sysv' and issubclass(controller, ServiceResource):
        resource = controller(name, start, process_name, cmd_line_contains)
    else:
        resource = SysVServiceResource(name, start, process_name, cmd_line_contains)

    worker.register_resource(
        resource
    )

    return resource
def symlink(source, destination, use_bind=False):
    worker.register_resource(
        SymlinkResource(
            source, destination, use_bind
        )
    )
Exemple #7
0
def user(name):
    worker.register_resource(
        UserResource(
            name
        )
    )