From 473e2febc05ce651b9b0ceaa35140fb334854d41 Mon Sep 17 00:00:00 2001 From: Pranesh Pandurangan Date: Tue, 10 Jun 2014 11:04:46 -0700 Subject: [PATCH] Add an audit unregister option Allow users to remove audit scripts through a simple CLI call. The unregister-audit call will remove an audit script from audit.cfg, thus stopping the execution of all but the currently scheduled audit scripts. partially implements blueprint simple api Change-Id: I1d5328d87b607c2f5cfdaebb7448a11673f38d48 --- entropy/__main__.py | 25 +++++++++++++++++++++++++ entropy/backends/base.py | 4 ++++ entropy/backends/file_backend.py | 18 ++++++++++++++++++ 3 files changed, 47 insertions(+) diff --git a/entropy/__main__.py b/entropy/__main__.py index 1fd080b..e5e68ec 100644 --- a/entropy/__main__.py +++ b/entropy/__main__.py @@ -60,6 +60,15 @@ def _add_to_list(engine, script_type, script_name, **script_args): return False +def _remove_from_list(engine, script_type, script_name): + backend = _get_backend_from_engine(engine) + try: + backend.remove_script(script_type, script_name) + except Exception: + LOG.exception("Could not remove %s script %s", + script_type, script_name) + + def register_audit(args): LOG.info('Registering audit script %s', args.name) @@ -74,6 +83,14 @@ def register_audit(args): LOG.info('Registered audit %s', args.name) +def unregister_audit(args): + LOG.info('Unregistering audit script %s', args.name) + if not args.name and args.engine: + LOG.error('Need a audit name and engine to unregister') + return + _remove_from_list(args.engine, 'audit', args.name) + + def register_repair(args): LOG.info('Registering repair script %s', args.name) @@ -151,6 +168,14 @@ def parse(): help='Engine') register_audit_parser.set_defaults(func=register_audit) + unregister_audit_parser =\ + subparsers.add_parser('unregister-audit', + help='Unregister a repair script') + unregister_audit_parser.add_argument('-n', dest='name', action='store', + help='Repair script name') + unregister_audit_parser.add_argument('-e', dest='engine', action='store', + help='Engine') + unregister_audit_parser.set_defaults(func=unregister_audit) register_repair_parser =\ subparsers.add_parser('register-repair', help='Register a repair script') diff --git a/entropy/backends/base.py b/entropy/backends/base.py index 439a670..dcf3da7 100644 --- a/entropy/backends/base.py +++ b/entropy/backends/base.py @@ -67,3 +67,7 @@ class Backend(object): @abc.abstractmethod def add_script(self, script_type, data): pass + + @abc.abstractmethod + def remove_script(self, script_type, script_name): + pass diff --git a/entropy/backends/file_backend.py b/entropy/backends/file_backend.py index 5645c26..0b62571 100644 --- a/entropy/backends/file_backend.py +++ b/entropy/backends/file_backend.py @@ -69,3 +69,21 @@ class FileBackend(base.Backend): def add_script(self, script_type, data): script_metadata = self.get_script_cfg(script_type) utils.write_yaml(data, script_metadata) + + @staticmethod + def remove_script_from_cfg(metadata, name): + scripts = utils.load_yaml(metadata) + try: + scripts.pop(name) + except KeyError: + raise + return scripts + + def remove_script(self, script_type, script_name): + try: + script_metadata = self.get_script_cfg(script_type) + final_data = FileBackend.remove_script_from_cfg(script_metadata, + script_name) + utils.write_yaml(final_data, script_metadata, append=False) + except Exception: + raise