summaryrefslogtreecommitdiffstats
path: root/src/sbin/bcfg2-lint
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2012-09-25 11:49:15 -0400
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2012-09-25 11:58:48 -0400
commiteac71fc1109f2edc6b71e62a6cff38d762bebe63 (patch)
tree203cf372e31b92dfc0cf7ea57c451c44e5e1e54b /src/sbin/bcfg2-lint
parent3f16355e18cdceb37828a00a8181d9cc60815cd0 (diff)
downloadbcfg2-eac71fc1109f2edc6b71e62a6cff38d762bebe63.tar.gz
bcfg2-eac71fc1109f2edc6b71e62a6cff38d762bebe63.tar.bz2
bcfg2-eac71fc1109f2edc6b71e62a6cff38d762bebe63.zip
expanded pylint coverage
Diffstat (limited to 'src/sbin/bcfg2-lint')
-rwxr-xr-xsrc/sbin/bcfg2-lint134
1 files changed, 72 insertions, 62 deletions
diff --git a/src/sbin/bcfg2-lint b/src/sbin/bcfg2-lint
index f1f91b7f4..0321d3045 100755
--- a/src/sbin/bcfg2-lint
+++ b/src/sbin/bcfg2-lint
@@ -9,108 +9,89 @@ import Bcfg2.Logger
import Bcfg2.Options
import Bcfg2.Server.Core
import Bcfg2.Server.Lint
-# Compatibility imports
from Bcfg2.Compat import ConfigParser
-logger = logging.getLogger('bcfg2-lint')
+LOGGER = logging.getLogger('bcfg2-lint')
-def run_serverless_plugins(plugins, config=None, setup=None, errorhandler=None):
- logger.debug("Running serverless plugins")
+
+def run_serverless_plugins(plugins, setup=None, errorhandler=None, files=None):
+ """ Run serverless plugins """
+ LOGGER.debug("Running serverless plugins")
for plugin_name, plugin in list(plugins.items()):
run_plugin(plugin, plugin_name, errorhandler=errorhandler,
- setup=setup, config=config, files=files)
+ setup=setup, files=files)
+
-def run_server_plugins(plugins, config=None, setup=None, errorhandler=None):
+def run_server_plugins(plugins, setup=None, errorhandler=None, files=None):
+ """ run plugins that require a running server to run """
core = load_server(setup)
- logger.debug("Running server plugins")
+ LOGGER.debug("Running server plugins")
for plugin_name, plugin in list(plugins.items()):
run_plugin(plugin, plugin_name, args=[core], errorhandler=errorhandler,
- setup=setup, config=config, files=files)
+ setup=setup, files=files)
+
def run_plugin(plugin, plugin_name, setup=None, errorhandler=None,
- args=None, config=None, files=None):
- logger.debug(" Running %s" % plugin_name)
+ args=None, files=None):
+ """ run a single plugin, server-ful or serverless. """
+ LOGGER.debug(" Running %s" % plugin_name)
if args is None:
args = []
if errorhandler is None:
- errorhandler = get_errorhandler(config)
+ errorhandler = get_errorhandler(setup)
- if config is not None and config.has_section(plugin_name):
+ if setup is not None and setup.cfp.has_section(plugin_name):
arg = setup
- for key, val in config.items(plugin_name):
+ for key, val in setup.cfp.items(plugin_name):
arg[key] = val
args.append(arg)
else:
args.append(setup)
-
- # older versions of python do not support mixing *-magic and
- # non-*-magic (e.g., "plugin(*args, files=files)", so we do this
- # all with *-magic
- kwargs = dict(files=files, errorhandler=errorhandler)
-
- return plugin(*args, **kwargs).Run()
-
-def get_errorhandler(config):
+
+ return plugin(*args, files=files, errorhandler=errorhandler).Run()
+
+
+def get_errorhandler(setup):
""" get a Bcfg2.Server.Lint.ErrorHandler object """
- if config.has_section("errors"):
- conf = dict(config.items("errors"))
+ if setup.cfp.has_section("errors"):
+ conf = dict(setup.cfp.items("errors"))
else:
conf = None
return Bcfg2.Server.Lint.ErrorHandler(config=conf)
+
def load_server(setup):
""" load server """
core = Bcfg2.Server.Core.BaseCore(setup)
core.fam.handle_events_in_interval(4)
return core
+
def load_plugin(module, obj_name=None):
+ """ load a single plugin """
parts = module.split(".")
if obj_name is None:
obj_name = parts[-1]
mod = __import__(module)
- for p in parts[1:]:
- mod = getattr(mod, p)
+ for part in parts[1:]:
+ mod = getattr(mod, part)
return getattr(mod, obj_name)
-if __name__ == '__main__':
- optinfo = dict(config=Bcfg2.Options.LINT_CONFIG,
- showerrors=Bcfg2.Options.LINT_SHOW_ERRORS,
- stdin=Bcfg2.Options.LINT_FILES_ON_STDIN,
- schema=Bcfg2.Options.SCHEMA_PATH,
- plugins=Bcfg2.Options.SERVER_PLUGINS)
- optinfo.update(Bcfg2.Options.CLI_COMMON_OPTIONS)
- optinfo.update(Bcfg2.Options.SERVER_COMMON_OPTIONS)
- setup = Bcfg2.Options.OptionParser(optinfo)
- setup.parse(sys.argv[1:])
-
- log_args = dict(to_syslog=setup['syslog'], to_console=logging.WARNING)
- if setup['verbose']:
- log_args['to_console'] = logging.DEBUG
- Bcfg2.Logger.setup_logging('bcfg2-info', **log_args)
-
- config = ConfigParser.SafeConfigParser()
- config.read(setup['configfile'])
- config.read(setup['config'])
- # get list of plugins to run
+def load_plugins(setup):
+ """ get list of plugins to run """
if setup['args']:
plugin_list = setup['args']
elif "bcfg2-repo-validate" in sys.argv[0]:
plugin_list = 'Duplicates,RequiredAttrs,Validate'.split(',')
else:
try:
- plugin_list = config.get('lint', 'plugins').split(',')
+ plugin_list = setup.cfp.get('lint', 'plugins').split(',')
except (ConfigParser.NoOptionError, ConfigParser.NoSectionError):
plugin_list = Bcfg2.Server.Lint.__all__
- if setup['stdin']:
- files = [s.strip() for s in sys.stdin.readlines()]
- else:
- files = None
-
allplugins = dict()
for plugin in plugin_list:
try:
@@ -121,12 +102,12 @@ if __name__ == '__main__':
load_plugin("Bcfg2.Server.Plugins." + plugin,
obj_name=plugin + "Lint")
except (ImportError, AttributeError):
- err = sys.exc_info()[1]
- logger.error("Failed to load plugin %s: %s" %
- (plugin + "Lint", err))
+ err = sys.exc_info()[1]
+ LOGGER.error("Failed to load plugin %s: %s" %
+ (plugin + "Lint", err))
except AttributeError:
err = sys.exc_info()[1]
- logger.error("Failed to load plugin %s: %s" % (plugin, err))
+ LOGGER.error("Failed to load plugin %s: %s" % (plugin, err))
serverplugins = dict()
serverlessplugins = dict()
@@ -136,21 +117,47 @@ if __name__ == '__main__':
serverplugins[plugin_name] = plugin
else:
serverlessplugins[plugin_name] = plugin
+ return (serverlessplugins, serverplugins)
+
+
+def main():
+ optinfo = dict(lint_config=Bcfg2.Options.LINT_CONFIG,
+ showerrors=Bcfg2.Options.LINT_SHOW_ERRORS,
+ stdin=Bcfg2.Options.LINT_FILES_ON_STDIN,
+ schema=Bcfg2.Options.SCHEMA_PATH,
+ plugins=Bcfg2.Options.SERVER_PLUGINS)
+ optinfo.update(Bcfg2.Options.CLI_COMMON_OPTIONS)
+ optinfo.update(Bcfg2.Options.SERVER_COMMON_OPTIONS)
+ setup = Bcfg2.Options.OptionParser(optinfo)
+ setup.parse(sys.argv[1:])
+
+ log_args = dict(to_syslog=setup['syslog'], to_console=logging.WARNING)
+ if setup['verbose']:
+ log_args['to_console'] = logging.DEBUG
+ Bcfg2.Logger.setup_logging('bcfg2-info', **log_args)
- errorhandler = get_errorhandler(config)
+ setup.cfp.read(setup['lint_config'])
+
+ if setup['stdin']:
+ files = [s.strip() for s in sys.stdin.readlines()]
+ else:
+ files = None
+
+ (serverlessplugins, serverplugins) = load_plugins(setup)
+
+ errorhandler = get_errorhandler(setup)
if setup['showerrors']:
for plugin in serverplugins.values() + serverlessplugins.values():
errorhandler.RegisterErrors(getattr(plugin, 'Errors')())
print("%-35s %-35s" % ("Error name", "Handler"))
- for err, handler in errorhandler._handlers.items():
+ for err, handler in errorhandler.errors.items():
print("%-35s %-35s" % (err, handler.__name__))
raise SystemExit(0)
- run_serverless_plugins(serverlessplugins,
- errorhandler=errorhandler,
- config=config, setup=setup)
+ run_serverless_plugins(serverlessplugins, errorhandler=errorhandler,
+ setup=setup, files=files)
if serverplugins:
if errorhandler.errors:
@@ -166,7 +173,7 @@ if __name__ == '__main__':
"plugins")
else:
run_server_plugins(serverplugins, errorhandler=errorhandler,
- config=config, setup=setup)
+ setup=setup, files=files)
if errorhandler.errors or errorhandler.warnings or setup['verbose']:
print("%d errors" % errorhandler.errors)
@@ -176,3 +183,6 @@ if __name__ == '__main__':
raise SystemExit(2)
elif errorhandler.warnings:
raise SystemExit(3)
+
+if __name__ == '__main__':
+ sys.exit(main())