summaryrefslogtreecommitdiffstats
path: root/src/sbin/bcfg2-lint
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2012-06-14 20:08:47 -0400
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2012-06-14 20:08:47 -0400
commite43040b084d66702efe1887a9d953b9154732512 (patch)
tree4240ab12cd944a752daf78d24d7081c4e9a0787b /src/sbin/bcfg2-lint
parent5dba50f1db4b9807a137a2f40b338010eaf297ea (diff)
downloadbcfg2-e43040b084d66702efe1887a9d953b9154732512.tar.gz
bcfg2-e43040b084d66702efe1887a9d953b9154732512.tar.bz2
bcfg2-e43040b084d66702efe1887a9d953b9154732512.zip
made bcfg2-lint load lint plugins from server plugins where appropriate
Diffstat (limited to 'src/sbin/bcfg2-lint')
-rwxr-xr-xsrc/sbin/bcfg2-lint57
1 files changed, 37 insertions, 20 deletions
diff --git a/src/sbin/bcfg2-lint b/src/sbin/bcfg2-lint
index 4b1fa8686..423c63ba3 100755
--- a/src/sbin/bcfg2-lint
+++ b/src/sbin/bcfg2-lint
@@ -68,11 +68,28 @@ def load_server(setup):
core.fam.handle_events_in_interval(4)
return core
+def load_plugin(module, obj_name=None):
+ parts = module.split(".")
+ if obj_name is None:
+ obj_name = parts[-1]
+
+ try:
+ mod = __import__(module)
+ except ImportError:
+ err = sys.exc_info()[1]
+ logger.error("Failed to load plugin %s: %s" % (obj_name, err))
+ raise
+
+ for p in parts[1:]:
+ mod = getattr(mod, p)
+ 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)
+ 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)
@@ -89,36 +106,36 @@ if __name__ == '__main__':
# get list of plugins to run
if setup['args']:
- allplugins = setup['args']
+ plugin_list = setup['args']
elif "bcfg2-repo-validate" in sys.argv[0]:
- allplugins = 'Duplicates,RequiredAttrs,Validate'.split(',')
+ plugin_list = 'Duplicates,RequiredAttrs,Validate'.split(',')
else:
try:
- allplugins = config.get('lint', 'plugins').split(',')
+ plugin_list = config.get('lint', 'plugins').split(',')
except (ConfigParser.NoOptionError, ConfigParser.NoSectionError):
- allplugins = Bcfg2.Server.Lint.__all__
+ plugin_list = Bcfg2.Server.Lint.__all__
if setup['stdin']:
files = [s.strip() for s in sys.stdin.readlines()]
else:
files = None
- # load plugins
- serverplugins = {}
- serverlessplugins = {}
- for plugin_name in allplugins:
+ # load plugins specified in the config first
+ allplugins = dict()
+ for plugin in plugin_list:
+ allplugins[plugin] = load_plugin("Bcfg2.Server.Lint." + plugin)
+
+ # load lint plugins bundled with bcfg2-server plugins
+ for plugin in setup['plugins']:
try:
- mod = getattr(__import__("Bcfg2.Server.Lint.%s" %
- (plugin_name)).Server.Lint, plugin_name)
- except ImportError:
- try:
- mod = __import__(plugin_name)
- except Exception:
- err = sys.exc_info()[1]
- logger.error("Failed to load plugin %s: %s" % (plugin_name,
- err))
- raise SystemExit(1)
- plugin = getattr(mod, plugin_name)
+ allplugins[plugin] = load_plugin("Bcfg2.Server.Plugins." + plugin,
+ obj_name=plugin + "Lint")
+ except AttributeError:
+ pass
+
+ serverplugins = dict()
+ serverlessplugins = dict()
+ for plugin_name, plugin in allplugins.items():
if [c for c in inspect.getmro(plugin)
if c == Bcfg2.Server.Lint.ServerPlugin]:
serverplugins[plugin_name] = plugin