summaryrefslogtreecommitdiffstats
path: root/src/lib/Bcfg2/Server/Plugins/Cfg
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2014-12-09 11:10:24 -0600
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2015-02-18 08:24:24 -0600
commit89e7afbf74ffbbb54dd892bf2c4245aedee2a832 (patch)
treeed4623b5c6e39d80c132e9f21f3d4804cabd93be /src/lib/Bcfg2/Server/Plugins/Cfg
parent64b458b380620f84843b1841b441745a0984946f (diff)
downloadbcfg2-89e7afbf74ffbbb54dd892bf2c4245aedee2a832.tar.gz
bcfg2-89e7afbf74ffbbb54dd892bf2c4245aedee2a832.tar.bz2
bcfg2-89e7afbf74ffbbb54dd892bf2c4245aedee2a832.zip
Remove blanket excepts from plugins and lint
This removes most blanket except: clauses from all plugins, including the base plugin libraries, and bcfg2-lint. The few that remain should all be necessary. Most of the changes were quite minor, but this did require some restructuring of the CfgPrivateKeyCreator; as a result, the tests for that module were rewritten.
Diffstat (limited to 'src/lib/Bcfg2/Server/Plugins/Cfg')
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Cfg/CfgGenshiGenerator.py11
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Cfg/CfgPrivateKeyCreator.py33
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Cfg/__init__.py16
3 files changed, 28 insertions, 32 deletions
diff --git a/src/lib/Bcfg2/Server/Plugins/Cfg/CfgGenshiGenerator.py b/src/lib/Bcfg2/Server/Plugins/Cfg/CfgGenshiGenerator.py
index ef4e6a656..c3bf9569b 100644
--- a/src/lib/Bcfg2/Server/Plugins/Cfg/CfgGenshiGenerator.py
+++ b/src/lib/Bcfg2/Server/Plugins/Cfg/CfgGenshiGenerator.py
@@ -10,6 +10,7 @@ from Bcfg2.Server.Plugin import PluginExecutionError, removecomment, \
DefaultTemplateDataProvider, get_template_data
from Bcfg2.Server.Plugins.Cfg import CfgGenerator
from genshi.template import TemplateLoader, NewTextTemplate
+from genshi.template.base import TemplateError
from genshi.template.eval import UndefinedError, Suite
@@ -117,6 +118,8 @@ class CfgGenshiGenerator(CfgGenerator):
quad[2]))
raise
except:
+ # this needs to be a blanket except, since it can catch
+ # any error raised by the genshi template.
self._handle_genshi_exception(sys.exc_info())
get_data.__doc__ = CfgGenerator.get_data.__doc__
@@ -184,10 +187,10 @@ class CfgGenshiGenerator(CfgGenerator):
def handle_event(self, event):
CfgGenerator.handle_event(self, event)
try:
- self.template = \
- self.loader.load(self.name, cls=NewTextTemplate,
- encoding=Bcfg2.Options.setup.encoding)
- except:
+ self.template = self.loader.load(
+ self.name, cls=NewTextTemplate,
+ encoding=Bcfg2.Options.setup.encoding)
+ except TemplateError:
raise PluginExecutionError("Failed to load template: %s" %
sys.exc_info()[1])
handle_event.__doc__ = CfgGenerator.handle_event.__doc__
diff --git a/src/lib/Bcfg2/Server/Plugins/Cfg/CfgPrivateKeyCreator.py b/src/lib/Bcfg2/Server/Plugins/Cfg/CfgPrivateKeyCreator.py
index 8cc3f7b21..43035b410 100644
--- a/src/lib/Bcfg2/Server/Plugins/Cfg/CfgPrivateKeyCreator.py
+++ b/src/lib/Bcfg2/Server/Plugins/Cfg/CfgPrivateKeyCreator.py
@@ -47,7 +47,7 @@ class CfgPrivateKeyCreator(XMLCfgCreator):
the given client metadata, and may be obtained by
doing ``self.XMLMatch(metadata)``
:type spec: lxml.etree._Element
- :returns: string - The filename of the private key
+ :returns: tuple - (private key data, public key data)
"""
if spec is None:
spec = self.XMLMatch(metadata)
@@ -91,10 +91,9 @@ class CfgPrivateKeyCreator(XMLCfgCreator):
"with errors: %s" % (filename,
metadata.hostname,
result.stderr))
- return filename
- except:
+ return (open(filename).read(), open(filename + ".pub").read())
+ finally:
shutil.rmtree(tempdir)
- raise
# pylint: disable=W0221
def create_data(self, entry, metadata):
@@ -109,21 +108,17 @@ class CfgPrivateKeyCreator(XMLCfgCreator):
"""
spec = self.XMLMatch(metadata)
specificity = self.get_specificity(metadata)
- filename = self._gen_keypair(metadata, spec)
+ privkey, pubkey = self._gen_keypair(metadata, spec)
- try:
- # write the public key, stripping the comment and
- # replacing it with a comment that specifies the filename.
- kdata = open(filename + ".pub").read().split()[:2]
- kdata.append(self.pubkey_creator.get_filename(**specificity))
- pubkey = " ".join(kdata) + "\n"
- self.pubkey_creator.write_data(pubkey, **specificity)
+ # write the public key, stripping the comment and
+ # replacing it with a comment that specifies the filename.
+ kdata = pubkey.split()[:2]
+ kdata.append(self.pubkey_creator.get_filename(**specificity))
+ pubkey = " ".join(kdata) + "\n"
+ self.pubkey_creator.write_data(pubkey, **specificity)
- # encrypt the private key, write to the proper place, and
- # return it
- privkey = open(filename).read()
- self.write_data(privkey, **specificity)
- return privkey
- finally:
- shutil.rmtree(os.path.dirname(filename))
+ # encrypt the private key, write to the proper place, and
+ # return it
+ self.write_data(privkey, **specificity)
+ return privkey
# pylint: enable=W0221
diff --git a/src/lib/Bcfg2/Server/Plugins/Cfg/__init__.py b/src/lib/Bcfg2/Server/Plugins/Cfg/__init__.py
index 5dc3d98eb..355e53588 100644
--- a/src/lib/Bcfg2/Server/Plugins/Cfg/__init__.py
+++ b/src/lib/Bcfg2/Server/Plugins/Cfg/__init__.py
@@ -553,12 +553,7 @@ class CfgEntrySet(Bcfg2.Server.Plugin.EntrySet):
% (action, event.filename))
self.debug_log("%s handling %s event on %s" %
(hdlr.__name__, action, event.filename))
- try:
- self.entry_init(event, hdlr)
- except: # pylint: disable=W0702
- err = sys.exc_info()[1]
- self.logger.error("Cfg: Failed to parse %s: %s" %
- (event.filename, err))
+ self.entry_init(event, hdlr)
return
elif hdlr.ignore(event, basename=self.path):
return
@@ -732,7 +727,7 @@ class CfgEntrySet(Bcfg2.Server.Plugin.EntrySet):
try:
return creator.create_data(entry, metadata)
- except:
+ except CfgCreationError:
raise PluginExecutionError("Cfg: Error creating data for %s: %s" %
(entry.get("name"), sys.exc_info()[1]))
@@ -760,6 +755,9 @@ class CfgEntrySet(Bcfg2.Server.Plugin.EntrySet):
try:
return (generator.get_data(entry, metadata), generator)
except:
+ # TODO: the exceptions raised by ``get_data`` are not
+ # constrained in any way, so for now this needs to be a
+ # blanket except.
msg = "Cfg: Error rendering %s: %s" % (entry.get("name"),
sys.exc_info()[1])
self.logger.error(msg)
@@ -803,7 +801,7 @@ class CfgEntrySet(Bcfg2.Server.Plugin.EntrySet):
try:
best = self.best_matching(metadata, generators)
rv.append(best.specific)
- except: # pylint: disable=W0702
+ except PluginExecutionError:
pass
if not rv or not rv[0].hostname:
@@ -835,7 +833,7 @@ class CfgEntrySet(Bcfg2.Server.Plugin.EntrySet):
raise PluginExecutionError(msg)
try:
etext = new_entry['text'].encode(Bcfg2.Options.setup.encoding)
- except:
+ except UnicodeDecodeError:
msg = "Cfg: Cannot encode content of %s as %s" % \
(name, Bcfg2.Options.setup.encoding)
self.logger.error(msg)