summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2012-05-11 13:57:01 -0400
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2012-05-11 13:57:01 -0400
commitdc63ebe24b7c76b721aa8ed7d8fae278f1a8aa11 (patch)
tree0f83c1712c17dea06051041c64ff0c58a1ea19b0
parentafeeb2b6430875cc3979ae4ad690d2a3efc0ac68 (diff)
downloadbcfg2-dc63ebe24b7c76b721aa8ed7d8fae278f1a8aa11.tar.gz
bcfg2-dc63ebe24b7c76b721aa8ed7d8fae278f1a8aa11.tar.bz2
bcfg2-dc63ebe24b7c76b721aa8ed7d8fae278f1a8aa11.zip
added ability to disable Cfg file validation
-rw-r--r--src/lib/Bcfg2/Options.py12
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Cfg/__init__.py54
-rwxr-xr-xsrc/sbin/bcfg2-test1
3 files changed, 44 insertions, 23 deletions
diff --git a/src/lib/Bcfg2/Options.py b/src/lib/Bcfg2/Options.py
index 32c3c02e4..dfb062341 100644
--- a/src/lib/Bcfg2/Options.py
+++ b/src/lib/Bcfg2/Options.py
@@ -411,6 +411,11 @@ CLIENT_SYSTEM_ETC_PATH = Option('System etc path', cf=('APT', 'etc_path'),
LOGGING_FILE_PATH = Option('Set path of file log', default=None,
cmd='-o', odesc='<path>', cf=('logging', 'path'))
+# Plugin-specific options
+CFG_VALIDATION = Option('Run validation on Cfg files', default=True,
+ cf=('cfg', 'validation'), cmd='--cfg-validation',
+ long_arg=True, cook=get_bool)
+
class OptionParser(OptionSet):
"""
OptionParser bootstraps option parsing,
@@ -428,8 +433,13 @@ class OptionParser(OptionSet):
return
if event.code2str() == 'deleted':
return
- for key, opt in self.optinfo:
+ self.reparse()
+
+ def reparse(self):
+ for key, opt in self.optinfo.items():
self[key] = opt
+ if "args" not in self.optinfo:
+ del self['args']
self.parse(self.argv, self.do_getopt)
def parse(self, argv, do_getopt=True):
diff --git a/src/lib/Bcfg2/Server/Plugins/Cfg/__init__.py b/src/lib/Bcfg2/Server/Plugins/Cfg/__init__.py
index f59890574..6c7585993 100644
--- a/src/lib/Bcfg2/Server/Plugins/Cfg/__init__.py
+++ b/src/lib/Bcfg2/Server/Plugins/Cfg/__init__.py
@@ -8,12 +8,14 @@ import pkgutil
import logging
import binascii
import lxml.etree
+import Bcfg2.Options
import Bcfg2.Server.Plugin
from Bcfg2.Bcfg2Py3k import u_str
logger = logging.getLogger(__name__)
PROCESSORS = None
+SETUP = None
class CfgBaseFileMatcher(Bcfg2.Server.Plugin.SpecificData):
__basenames__ = []
@@ -246,28 +248,26 @@ class CfgEntrySet(Bcfg2.Server.Plugin.EntrySet):
for fltr in filters:
data = fltr.modify_data(entry, metadata, data)
- # TODO: disable runtime verification in config, but let
- # bcfg2-test turn it back on dynamically. need to sort out
- # config files first.
-
- # we can have multiple verifiers, but we only want to use the
- # best matching verifier of each class
- verifiers_by_class = dict()
- for verifier in verifiers:
- cls = verifier.__class__.__name__
- if cls not in verifiers_by_class:
- verifiers_by_class[cls] = [verifier]
- else:
- verifiers_by_class[cls].append(verifier)
- for verifiers in verifiers_by_class.values():
- verifier = self.best_matching(metadata, verifiers)
- try:
- verifier.verify_entry(entry, metadata, data)
- except CfgVerificationError:
- msg = "Data for %s for %s failed to verify: %s" % \
- (entry.get('name'), metadata.hostname, sys.exc_info()[1])
- logger.error(msg)
- raise Bcfg2.Server.Plugin.PluginExecutionError(msg)
+ if SETUP['validate']:
+ # we can have multiple verifiers, but we only want to use the
+ # best matching verifier of each class
+ verifiers_by_class = dict()
+ for verifier in verifiers:
+ cls = verifier.__class__.__name__
+ if cls not in verifiers_by_class:
+ verifiers_by_class[cls] = [verifier]
+ else:
+ verifiers_by_class[cls].append(verifier)
+ for verifiers in verifiers_by_class.values():
+ verifier = self.best_matching(metadata, verifiers)
+ try:
+ verifier.verify_entry(entry, metadata, data)
+ except CfgVerificationError:
+ msg = "Data for %s for %s failed to verify: %s" % \
+ (entry.get('name'), metadata.hostname,
+ sys.exc_info()[1])
+ logger.error(msg)
+ raise Bcfg2.Server.Plugin.PluginExecutionError(msg)
if entry.get('encoding') == 'base64':
data = binascii.b2a_base64(data)
@@ -378,6 +378,16 @@ class Cfg(Bcfg2.Server.Plugin.GroupSpool,
es_cls = CfgEntrySet
es_child_cls = Bcfg2.Server.Plugin.SpecificData
+ def __init__(self, core, datastore):
+ global SETUP
+ Bcfg2.Server.Plugin.GroupSpool.__init__(self, core, datastore)
+ Bcfg2.Server.Plugin.PullTarget.__init__(self)
+
+ SETUP = core.setup
+ if 'validate' not in SETUP:
+ SETUP['validate'] = Bcfg2.Options.CFG_VALIDATION
+ SETUP.reparse()
+
def AcceptChoices(self, entry, metadata):
return self.entries[entry.get('name')].list_accept_choices(entry,
metadata)
diff --git a/src/sbin/bcfg2-test b/src/sbin/bcfg2-test
index 472534152..e3cfd27cc 100755
--- a/src/sbin/bcfg2-test
+++ b/src/sbin/bcfg2-test
@@ -71,6 +71,7 @@ def main():
'verbose': Bcfg2.Options.VERBOSE,
'noseopts': Bcfg2.Options.TEST_NOSEOPTS,
'ignore': Bcfg2.Options.TEST_IGNORE,
+ 'validate': Bcfg2.Options.CFG_VALIDATION,
}
setup = Bcfg2.Options.OptionParser(optinfo)
setup.hm = \