summaryrefslogtreecommitdiffstats
path: root/src/lib/Client/Tools/YUMng.py
diff options
context:
space:
mode:
authorJack Neely <jjneely@ncsu.edu>2011-06-10 16:45:30 -0400
committerSol Jerome <sol.jerome@gmail.com>2011-06-14 12:36:47 -0500
commitda0fb10e340f3fd8e97ef29810fd0f59173492e7 (patch)
tree99ba670e17d2a56c2a4b103e75f18753d8877bef /src/lib/Client/Tools/YUMng.py
parent36aadd161281334c53b39ae028afbb477e0228ec (diff)
downloadbcfg2-da0fb10e340f3fd8e97ef29810fd0f59173492e7.tar.gz
bcfg2-da0fb10e340f3fd8e97ef29810fd0f59173492e7.tar.bz2
bcfg2-da0fb10e340f3fd8e97ef29810fd0f59173492e7.zip
Addition Yum error handling
Address ticket #955 and attempt to capture the exceptions that may possibly be generated from Yum or Yum's plugins and return some sort of error message.
Diffstat (limited to 'src/lib/Client/Tools/YUMng.py')
-rw-r--r--src/lib/Client/Tools/YUMng.py50
1 files changed, 34 insertions, 16 deletions
diff --git a/src/lib/Client/Tools/YUMng.py b/src/lib/Client/Tools/YUMng.py
index 324307f7f..0435ca0d7 100644
--- a/src/lib/Client/Tools/YUMng.py
+++ b/src/lib/Client/Tools/YUMng.py
@@ -170,7 +170,7 @@ class YUMng(Bcfg2.Client.Tools.PkgTool):
except yum.Errors.RepoError, e:
self.logger.error("YUMng Repository error: %s" % e)
raise Bcfg2.Client.Tools.toolInstantiationError
- except yum.Errors.YumBaseError, e:
+ except Exception, e:
self.logger.error("YUMng error: %s" % e)
raise Bcfg2.Client.Tools.toolInstantiationError
@@ -671,38 +671,56 @@ class YUMng(Bcfg2.Client.Tools.PkgTool):
return True
def _runYumTransaction(self):
+ def cleanup():
+ self.yb.closeRpmDB()
+ self.RefreshPackages()
+
rDisplay = RPMDisplay(self.logger)
yDisplay = YumDisplay(self.logger)
# Run the Yum Transaction
- rescode, restring = self.yb.buildTransaction()
+ try:
+ rescode, restring = self.yb.buildTransaction()
+ except yum.Errors.YumBaseError, e:
+ self.logger.error("Yum transaction error: %s" % str(e))
+ cleanup()
+ return
+
self.logger.debug("Initial Yum buildTransaction() run said:")
self.logger.debug(" resultcode: %s, msgs: %s" \
% (rescode, restring))
if rescode != 1:
# Transaction built successfully, run it
- self.yb.processTransaction(callback=yDisplay,
- rpmDisplay=rDisplay)
- self.logger.info("Single Pass for Install Succeeded")
+ try:
+ self.yb.processTransaction(callback=yDisplay,
+ rpmDisplay=rDisplay)
+ self.logger.info("Single Pass for Install Succeeded")
+ except yum.Errors.YumBaseError, e:
+ self.logger.error("Yum transaction error: %s" % str(e))
+ cleanup()
+ return
else:
# The yum command failed. No packages installed.
# Try installing instances individually.
self.logger.error("Single Pass Install of Packages Failed")
skipBroken = self.yb.conf.skip_broken
self.yb.conf.skip_broken = True
- rescode, restring = self.yb.buildTransaction()
- if rescode != 1:
- self.yb.processTransaction(callback=yDisplay,
- rpmDisplay=rDisplay)
- self.logger.debug(
- "Second pass install did not install all packages")
- else:
- self.logger.error("Second pass yum install failed.")
- self.logger.debug(" %s" % restring)
+ try:
+ rescode, restring = self.yb.buildTransaction()
+ if rescode != 1:
+ self.yb.processTransaction(callback=yDisplay,
+ rpmDisplay=rDisplay)
+ self.logger.debug(
+ "Second pass install did not install all packages")
+ else:
+ self.logger.error("Second pass yum install failed.")
+ self.logger.debug(" %s" % restring)
+ except yum.Errors.YumBaseError, e:
+ self.logger.error("Yum transaction error: %s" % str(e))
+
self.yb.conf.skip_broken = skipBroken
- self.yb.closeRpmDB()
- self.RefreshPackages()
+ cleanup()
def Install(self, packages, states):
"""