summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib/Bcfg2/Options.py5
-rw-r--r--src/lib/Bcfg2/Server/Lint/RequiredAttrs.py31
-rwxr-xr-xsrc/sbin/bcfg2-lint13
3 files changed, 24 insertions, 25 deletions
diff --git a/src/lib/Bcfg2/Options.py b/src/lib/Bcfg2/Options.py
index aff8c0733..c0a274e23 100644
--- a/src/lib/Bcfg2/Options.py
+++ b/src/lib/Bcfg2/Options.py
@@ -827,6 +827,11 @@ LINT_CONFIG = \
cmd='--lint-config',
odesc='<conffile>',
long_arg=True)
+LINT_PLUGINS = \
+ Option('bcfg2-lint plugin list',
+ default=None, # default is Bcfg2.Server.Lint.__all__
+ cf=('lint', 'plugins'),
+ cook=list_split)
LINT_SHOW_ERRORS = \
Option('Show error handling',
default=False,
diff --git a/src/lib/Bcfg2/Server/Lint/RequiredAttrs.py b/src/lib/Bcfg2/Server/Lint/RequiredAttrs.py
index 3c130731b..61b737a82 100644
--- a/src/lib/Bcfg2/Server/Lint/RequiredAttrs.py
+++ b/src/lib/Bcfg2/Server/Lint/RequiredAttrs.py
@@ -78,12 +78,8 @@ class RequiredAttrs(Bcfg2.Server.Lint.ServerPlugin):
hasattr(Bcfg2.Client.Tools.VCS,
"Install%s" % v)),
revision=None, sourceurl=None)),
- Service={
- "chkconfig": dict(name=None),
- "deb": dict(name=None),
- "rc-update": dict(name=None),
- "smf": dict(name=None, FMRI=None),
- "upstart": dict(name=None)},
+ Service={"__any__": dict(name=None),
+ "smf": dict(name=None, FMRI=None)},
Action={None: dict(name=None,
timing=lambda v: v in ['pre', 'post', 'both'],
when=lambda v: v in ['modified', 'always'],
@@ -98,7 +94,7 @@ class RequiredAttrs(Bcfg2.Server.Lint.ServerPlugin):
v)),
mask=dict(perms=lambda v: re.match('^([0-7]|[rwx\-]{0,3}',
v))),
- Package={None: dict(name=None)},
+ Package={"__any__": dict(name=None)},
SEBoolean={None: dict(name=None,
value=lambda v: v in ['on', 'off'])},
SEModule={None: dict(name=None, __text__=None)},
@@ -212,17 +208,16 @@ class RequiredAttrs(Bcfg2.Server.Lint.ServerPlugin):
(tag, self.RenderXML(entry)))
return
- if isinstance(self.required_attrs[tag], dict):
- etype = entry.get('type')
- if etype in self.required_attrs[tag]:
- required_attrs = self.required_attrs[tag][etype]
- else:
- self.LintError("unknown-entry-type",
- "Unknown %s type %s: %s" %
- (tag, etype, self.RenderXML(entry)))
- return
+ etype = entry.get('type')
+ if etype in self.required_attrs[tag]:
+ required_attrs = self.required_attrs[tag][etype]
+ elif '__any__' in self.required_attrs[tag]:
+ required_attrs = self.required_attrs[tag]['__any__']
else:
- required_attrs = self.required_attrs[tag]
+ self.LintError("unknown-entry-type",
+ "Unknown %s type %s: %s" %
+ (tag, etype, self.RenderXML(entry)))
+ return
attrs = set(entry.attrib.keys())
if 'dev_type' in required_attrs:
@@ -236,6 +231,7 @@ class RequiredAttrs(Bcfg2.Server.Lint.ServerPlugin):
required_attrs[entry.get('scope')] = is_username
if '__text__' in required_attrs:
+ fmt = required_attrs['__text__']
del required_attrs['__text__']
if (not entry.text and
not entry.get('empty', 'false').lower() == 'true'):
@@ -243,7 +239,6 @@ class RequiredAttrs(Bcfg2.Server.Lint.ServerPlugin):
"Text missing for %s %s in %s: %s" %
(tag, name, filename,
self.RenderXML(entry)))
- fmt = required_attrs['__text__']
if fmt is not None and not fmt(entry.text):
self.LintError(
"required-attr-format",
diff --git a/src/sbin/bcfg2-lint b/src/sbin/bcfg2-lint
index a6efd0ccb..959a2d8ed 100755
--- a/src/sbin/bcfg2-lint
+++ b/src/sbin/bcfg2-lint
@@ -9,7 +9,6 @@ import Bcfg2.Logger
import Bcfg2.Options
import Bcfg2.Server.Core
import Bcfg2.Server.Lint
-from Bcfg2.Compat import ConfigParser
LOGGER = logging.getLogger('bcfg2-lint')
@@ -88,12 +87,11 @@ def load_plugins(setup):
if setup['args']:
plugin_list = setup['args']
elif "bcfg2-repo-validate" in sys.argv[0]:
- plugin_list = 'Duplicates,RequiredAttrs,Validate'.split(',')
+ plugin_list = 'RequiredAttrs,Validate'.split(',')
+ elif setup['lint_plugins']:
+ plugin_list = setup['lint_plugins']
else:
- try:
- plugin_list = setup.cfp.get('lint', 'plugins').split(',')
- except (ConfigParser.NoOptionError, ConfigParser.NoSectionError):
- plugin_list = Bcfg2.Server.Lint.__all__
+ plugin_list = Bcfg2.Server.Lint.__all__
allplugins = dict()
for plugin in plugin_list:
@@ -144,7 +142,7 @@ def main():
showerrors=Bcfg2.Options.LINT_SHOW_ERRORS,
stdin=Bcfg2.Options.LINT_FILES_ON_STDIN,
schema=Bcfg2.Options.SCHEMA_PATH,
- plugins=Bcfg2.Options.SERVER_PLUGINS)
+ lint_plugins=Bcfg2.Options.LINT_PLUGINS)
optinfo.update(Bcfg2.Options.CLI_COMMON_OPTIONS)
optinfo.update(Bcfg2.Options.SERVER_COMMON_OPTIONS)
setup = Bcfg2.Options.OptionParser(optinfo)
@@ -156,6 +154,7 @@ def main():
Bcfg2.Logger.setup_logging('bcfg2-info', **log_args)
setup.cfp.read(setup['lint_config'])
+ setup.reparse()
if setup['stdin']:
files = [s.strip() for s in sys.stdin.readlines()]