From 01e785422bdf3fd1457045dcd2e9d8c4aa7304a1 Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Mon, 3 Jun 2013 10:12:30 -0400 Subject: Packages: handle bcfg2-yum-helper failures more gracefully --- src/lib/Bcfg2/Server/Plugins/Packages/Yum.py | 32 +++++++++++++++++++--------- 1 file changed, 22 insertions(+), 10 deletions(-) (limited to 'src/lib/Bcfg2/Server/Plugins/Packages/Yum.py') diff --git a/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py b/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py index bb7caab0d..20b2c9500 100644 --- a/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py +++ b/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py @@ -675,7 +675,10 @@ class YumCollection(Collection): gdicts.append(dict(group=group, type=ptype)) if self.use_yum: - return self.call_helper("get_groups", inputdata=gdicts) + try: + return self.call_helper("get_groups", inputdata=gdicts) + except ValueError: + return dict() else: pkgs = dict() for gdict in gdicts: @@ -838,12 +841,13 @@ class YumCollection(Collection): return Collection.complete(self, packagelist) if packagelist: - result = \ - self.call_helper("complete", - dict(packages=list(packagelist), - groups=list(self.get_relevant_groups()))) - if not result: - # some sort of error, reported by call_helper() + try: + result = self.call_helper( + "complete", + dict(packages=list(packagelist), + groups=list(self.get_relevant_groups()))) + except ValueError: + # error reported by call_helper() return set(), packagelist # json doesn't understand sets or tuples, so we get back a # lists of lists (packages) and a list of unicode strings @@ -905,7 +909,7 @@ class YumCollection(Collection): err = sys.exc_info()[1] self.logger.error("Packages: error reading bcfg2-yum-helper " "output: %s" % err) - return None + raise def setup_data(self, force_update=False): """ Do any collection-level data setup tasks. This is called @@ -931,13 +935,21 @@ class YumCollection(Collection): if force_update: # we call this twice: one to clean up data from the old # config, and once to clean up data from the new config - self.call_helper("clean") + try: + self.call_helper("clean") + except ValueError: + # error reported by call_helper + pass os.unlink(self.cfgfile) self.write_config() if force_update: - self.call_helper("clean") + try: + self.call_helper("clean") + except ValueError: + # error reported by call_helper + pass class YumSource(Source): -- cgit v1.2.3-1-g7c22 From d67baf714e6c6635846e57b9258e649a59430c55 Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Thu, 13 Jun 2013 15:25:26 -0400 Subject: Yum: handle and log helper errors better --- src/lib/Bcfg2/Server/Plugins/Packages/Yum.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'src/lib/Bcfg2/Server/Plugins/Packages/Yum.py') diff --git a/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py b/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py index 20b2c9500..4c143e069 100644 --- a/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py +++ b/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py @@ -878,11 +878,16 @@ class YumCollection(Collection): ``bcfg2-yum-helper`` command. """ cmd = [self.helper, "-c", self.cfgfile] - verbose = self.debug_flag or self.setup['verbose'] - if verbose: + if self.setup['verbose']: + cmd.append("-v") + if self.debug_flag: + if not self.setup['verbose']: + # ensure that running in debug gets -vv, even if + # verbose is not enabled + cmd.append("-v") cmd.append("-v") cmd.append(command) - self.debug_log("Packages: running %s" % " ".join(cmd), flag=verbose) + self.debug_log("Packages: running %s" % " ".join(cmd)) try: helper = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE) except OSError: @@ -897,12 +902,18 @@ class YumCollection(Collection): else: (stdout, stderr) = helper.communicate() rv = helper.wait() + errlines = stderr.splitlines() if rv: self.logger.error("Packages: error running bcfg2-yum-helper " - "(returned %d): %s" % (rv, stderr)) + "(returned %d): %s" % (rv, errlines[0])) + for line in errlines[1:]: + self.logger.error("Packages: %s" % line) else: self.debug_log("Packages: debug info from bcfg2-yum-helper: %s" % - stderr, flag=verbose) + lines[0], flag=verbose) + for line in errlines[1:]: + self.debug_log("Packages: %s" % line) + try: return json.loads(stdout) except ValueError: -- cgit v1.2.3-1-g7c22 From 0ee4d98652a4b46113f0d5ede5f721d98023daf7 Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Thu, 13 Jun 2013 15:55:00 -0400 Subject: Yum: fixed verbose logging from bcfg2-yum-helper --- src/lib/Bcfg2/Server/Plugins/Packages/Yum.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/lib/Bcfg2/Server/Plugins/Packages/Yum.py') diff --git a/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py b/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py index 4c143e069..b7d7ba978 100644 --- a/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py +++ b/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py @@ -910,7 +910,7 @@ class YumCollection(Collection): self.logger.error("Packages: %s" % line) else: self.debug_log("Packages: debug info from bcfg2-yum-helper: %s" % - lines[0], flag=verbose) + lines[0]) for line in errlines[1:]: self.debug_log("Packages: %s" % line) -- cgit v1.2.3-1-g7c22 From f9ba388e9c9b00d2a3c070eb1b46f4c30c27e6a3 Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Thu, 13 Jun 2013 15:57:05 -0400 Subject: Yum: fixed yum-helper logging for real this time, i totally swear --- src/lib/Bcfg2/Server/Plugins/Packages/Yum.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/lib/Bcfg2/Server/Plugins/Packages/Yum.py') diff --git a/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py b/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py index b7d7ba978..4330de971 100644 --- a/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py +++ b/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py @@ -910,7 +910,7 @@ class YumCollection(Collection): self.logger.error("Packages: %s" % line) else: self.debug_log("Packages: debug info from bcfg2-yum-helper: %s" % - lines[0]) + errlines[0]) for line in errlines[1:]: self.debug_log("Packages: %s" % line) -- cgit v1.2.3-1-g7c22 From ead3723f443f37d97cb45d26fddaaaa013f5edfa Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Wed, 19 Jun 2013 10:04:06 -0400 Subject: Yum: fixed logging bcfg2-yum-helper error output --- src/lib/Bcfg2/Server/Plugins/Packages/Yum.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/lib/Bcfg2/Server/Plugins/Packages/Yum.py') diff --git a/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py b/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py index 4330de971..4608bcca5 100644 --- a/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py +++ b/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py @@ -904,11 +904,13 @@ class YumCollection(Collection): rv = helper.wait() errlines = stderr.splitlines() if rv: + if not errlines: + errlines.append("No error output") self.logger.error("Packages: error running bcfg2-yum-helper " "(returned %d): %s" % (rv, errlines[0])) for line in errlines[1:]: self.logger.error("Packages: %s" % line) - else: + elif errlines: self.debug_log("Packages: debug info from bcfg2-yum-helper: %s" % errlines[0]) for line in errlines[1:]: -- cgit v1.2.3-1-g7c22