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 ) )
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' ) )
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' ) )
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 ) )
def user(name): worker.register_resource( UserResource( name ) )