diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/Bcfg2/Options.py | 5 | ||||
-rw-r--r-- | src/lib/Bcfg2/Server/Lint/RequiredAttrs.py | 31 | ||||
-rwxr-xr-x | src/sbin/bcfg2-lint | 13 |
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()] |