From 8413864e1e196b59ec08bac781c364e233e711fb Mon Sep 17 00:00:00 2001 From: Sol Jerome Date: Mon, 19 Mar 2012 11:53:50 -0500 Subject: Pkgmgr: Fix DeprecationWarning (reported by odenbach on IRC) Signed-off-by: Sol Jerome --- src/lib/Server/Plugins/Pkgmgr.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src/lib') diff --git a/src/lib/Server/Plugins/Pkgmgr.py b/src/lib/Server/Plugins/Pkgmgr.py index 73c2813d4..bc11bfdcf 100644 --- a/src/lib/Server/Plugins/Pkgmgr.py +++ b/src/lib/Server/Plugins/Pkgmgr.py @@ -5,7 +5,10 @@ import logging import re import Bcfg2.Server.Plugin import lxml -from sets import Set +try: + set +except NameError: + from sets import Set as set logger = logging.getLogger('Bcfg2.Plugins.Pkgmgr') @@ -64,7 +67,7 @@ class PNode(Bcfg2.Server.Plugin.INode): if 'Package' not in pdict: pdict['Package'] = set() for child in data.getchildren(): - attrs = Set(data.attrib.keys()).difference(child.attrib.keys() + ['name']) + attrs = set(data.attrib.keys()).difference(child.attrib.keys() + ['name']) for attr in attrs: try: child.set(attr, data.get(attr)) -- cgit v1.2.3-1-g7c22 From 5a030a3a02a3bd5ecdac06de1482d17ad92ad5de Mon Sep 17 00:00:00 2001 From: Sol Jerome Date: Tue, 20 Mar 2012 07:58:43 -0500 Subject: Cfg: Add debug_log method to CfgEntrySet Prevents a traceback from happening because this method was missing. Signed-off-by: Sol Jerome --- src/lib/Server/Plugins/Cfg.py | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/lib') diff --git a/src/lib/Server/Plugins/Cfg.py b/src/lib/Server/Plugins/Cfg.py index 1ea8e4e75..fafc6c638 100644 --- a/src/lib/Server/Plugins/Cfg.py +++ b/src/lib/Server/Plugins/Cfg.py @@ -101,6 +101,10 @@ class CfgEntrySet(Bcfg2.Server.Plugin.EntrySet): self.specific = CfgMatcher(path.split('/')[-1]) path = path + def debug_log(self, message, flag=None): + if (flag is None and self.debug_flag) or flag: + self.logger.error(message) + def sort_by_specific(self, one, other): return cmp(one.specific, other.specific) -- cgit v1.2.3-1-g7c22 From 57d6278e265569401f3f5c2e302b8abd93bb3847 Mon Sep 17 00:00:00 2001 From: Sol Jerome Date: Tue, 20 Mar 2012 11:24:25 -0500 Subject: Bundler: Fix tb from missing Bundle (Reported by jgd on IRC) Signed-off-by: Sol Jerome --- src/lib/Server/Plugins/Bundler.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/lib') diff --git a/src/lib/Server/Plugins/Bundler.py b/src/lib/Server/Plugins/Bundler.py index 418e47bcb..7b3e96556 100644 --- a/src/lib/Server/Plugins/Bundler.py +++ b/src/lib/Server/Plugins/Bundler.py @@ -75,13 +75,17 @@ class Bundler(Bcfg2.Server.Plugin.Plugin, def BuildStructures(self, metadata): """Build all structures for client (metadata).""" bundleset = [] + entries = [] bundle_entries = {} for key, item in self.entries.items(): bundle_entries.setdefault(self.patterns.match(os.path.basename(key)).group('name'), []).append(item) for bundlename in metadata.bundles: - entries = bundle_entries[bundlename] + try: + entries = bundle_entries[bundlename] + except KeyError: + self.logger.error("Bundler: Bundle %s does not exist" % bundlename) if len(entries) == 0: continue elif len(entries) == 1: -- cgit v1.2.3-1-g7c22 From 961783ceeedb97233a4dca5f0fc58f20b23f41c7 Mon Sep 17 00:00:00 2001 From: Sol Jerome Date: Tue, 20 Mar 2012 11:28:14 -0500 Subject: Bundler: Remove excess code Signed-off-by: Sol Jerome --- src/lib/Server/Plugins/Bundler.py | 2 -- 1 file changed, 2 deletions(-) (limited to 'src/lib') diff --git a/src/lib/Server/Plugins/Bundler.py b/src/lib/Server/Plugins/Bundler.py index 7b3e96556..be77cd59b 100644 --- a/src/lib/Server/Plugins/Bundler.py +++ b/src/lib/Server/Plugins/Bundler.py @@ -75,7 +75,6 @@ class Bundler(Bcfg2.Server.Plugin.Plugin, def BuildStructures(self, metadata): """Build all structures for client (metadata).""" bundleset = [] - entries = [] bundle_entries = {} for key, item in self.entries.items(): @@ -86,7 +85,6 @@ class Bundler(Bcfg2.Server.Plugin.Plugin, entries = bundle_entries[bundlename] except KeyError: self.logger.error("Bundler: Bundle %s does not exist" % bundlename) - if len(entries) == 0: continue elif len(entries) == 1: try: -- cgit v1.2.3-1-g7c22 From 45cd60e18e5cb22619272ae8a0d6e2af692d1cf7 Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Tue, 20 Mar 2012 14:42:25 -0400 Subject: removed unnecessary code --- src/lib/Server/Plugins/Bundler.py | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) (limited to 'src/lib') diff --git a/src/lib/Server/Plugins/Bundler.py b/src/lib/Server/Plugins/Bundler.py index be77cd59b..a58257712 100644 --- a/src/lib/Server/Plugins/Bundler.py +++ b/src/lib/Server/Plugins/Bundler.py @@ -78,26 +78,24 @@ class Bundler(Bcfg2.Server.Plugin.Plugin, bundle_entries = {} for key, item in self.entries.items(): - bundle_entries.setdefault(self.patterns.match(os.path.basename(key)).group('name'), []).append(item) + bundle_entries.setdefault(self.patterns.match(os.path.basename(key)).group('name'), + []).append(item) for bundlename in metadata.bundles: try: entries = bundle_entries[bundlename] except KeyError: - self.logger.error("Bundler: Bundle %s does not exist" % bundlename) + self.logger.error("Bundler: Bundle %s does not exist" % + bundlename) continue - elif len(entries) == 1: - try: - bundleset.append(entries[0].get_xml_value(metadata)) - except genshi.template.base.TemplateError: - t = sys.exc_info()[1] - self.logger.error("Bundler: Failed to template genshi bundle %s" \ - % (bundlename)) - self.logger.error(t) - except: - self.logger.error("Bundler: Unexpected bundler error for %s" \ - % (bundlename), exc_info=1) - else: - self.logger.error("Got multiple matches for bundle %s" \ - % (bundlename)) + try: + bundleset.append(entries[0].get_xml_value(metadata)) + except genshi.template.base.TemplateError: + t = sys.exc_info()[1] + self.logger.error("Bundler: Failed to template genshi bundle %s" + % bundlename) + self.logger.error(t) + except: + self.logger.error("Bundler: Unexpected bundler error for %s" % + bundlename, exc_info=1) return bundleset -- cgit v1.2.3-1-g7c22 From fb556e7675e1c13f8d3fbdce0aeb0d3e30ff9123 Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Wed, 21 Mar 2012 11:27:04 -0400 Subject: fixed debug output from bcfg2-yum-helper --- src/lib/Server/Plugins/Packages/Yum.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'src/lib') diff --git a/src/lib/Server/Plugins/Packages/Yum.py b/src/lib/Server/Plugins/Packages/Yum.py index 416602b27..1937dbf83 100644 --- a/src/lib/Server/Plugins/Packages/Yum.py +++ b/src/lib/Server/Plugins/Packages/Yum.py @@ -396,10 +396,8 @@ class YumCollection(Collection): self.logger.error("Packages: error running bcfg2-yum-helper " "(returned %d): %s" % (rv, stderr)) elif self.debug_flag: - self.logger.debug("Packages: debug info from bcfg2-yum-helper: %s" % - stderr) - self.logger.debug("Packages: output from bcfg2-yum-helper: %s" % - stderr) + self.debug_log("Packages: debug info from bcfg2-yum-helper: %s" % + stderr) try: return json.loads(stdout) except ValueError: -- cgit v1.2.3-1-g7c22 From 1b7462de5d95b8d195866c1bafb9fb8b6957334e Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Wed, 21 Mar 2012 16:40:52 -0400 Subject: fixed automatic handling of GPGKeys --- src/lib/Server/Plugins/Packages/Yum.py | 64 ++++++++++++++++++++++------------ 1 file changed, 41 insertions(+), 23 deletions(-) (limited to 'src/lib') diff --git a/src/lib/Server/Plugins/Packages/Yum.py b/src/lib/Server/Plugins/Packages/Yum.py index 1937dbf83..e13b28251 100644 --- a/src/lib/Server/Plugins/Packages/Yum.py +++ b/src/lib/Server/Plugins/Packages/Yum.py @@ -197,8 +197,21 @@ class YumCollection(Collection): needkeys.add(key) if len(needkeys): - keypkg = lxml.etree.Element('BoundPackage', name="gpg-pubkey", - type=self.ptype, origin='Packages') + if has_yum: + # this must be be has_yum, not use_yum, because + # regardless of whether the user wants to use the yum + # resolver we want to include gpg key data + keypkg = lxml.etree.Element('BoundPackage', name="gpg-pubkey", + type=self.ptype, origin='Packages') + else: + self.logger.warning("GPGKeys were specified for yum sources in " + "sources.xml, but no yum libraries were " + "found") + self.logger.warning("GPG key version/release data cannot be " + "determined automatically") + self.logger.warning("Install yum libraries, or manage GPG keys " + "manually") + keypkg = None for key in needkeys: # figure out the path of the key on the client @@ -219,7 +232,8 @@ class YumCollection(Collection): # hook to add version/release info if possible self._add_gpg_instances(keypkg, kdata, localkey, remotekey) independent.append(keypath) - independent.append(keypkg) + if keypkg is not None: + independent.append(keypkg) # see if there are any pulp sources to handle has_pulp_sources = False @@ -274,20 +288,25 @@ class YumCollection(Collection): def _add_gpg_instances(self, keyentry, keydata, localkey, remotekey): """ add gpg keys to the specification to ensure they get installed """ - if self.use_yum: - try: - kinfo = yum.misc.getgpgkeyinfo(keydata) - version = yum.misc.keyIdToRPMVer(kinfo['keyid']) - release = yum.misc.keyIdToRPMVer(kinfo['timestamp']) - - lxml.etree.SubElement(keyentry, 'Instance', - version=version, - release=release, - simplefile=remotekey) - except ValueError: - err = sys.exc_info()[1] - self.logger.error("Packages: Could not read GPG key %s: %s" % - (localkey, err)) + # this must be be has_yum, not use_yum, because regardless of + # whether the user wants to use the yum resolver we want to + # include gpg key data + if not has_yum: + return + + try: + kinfo = yum.misc.getgpgkeyinfo(keydata) + version = yum.misc.keyIdToRPMVer(kinfo['keyid']) + release = yum.misc.keyIdToRPMVer(kinfo['timestamp']) + + lxml.etree.SubElement(keyentry, 'Instance', + version=version, + release=release, + simplefile=remotekey) + except ValueError: + err = sys.exc_info()[1] + self.logger.error("Packages: Could not read GPG key %s: %s" % + (localkey, err)) def is_package(self, package): if not self.use_yum: @@ -436,19 +455,18 @@ class YumSource(Source): repoapi = RepositoryAPI() try: self.repo = repoapi.repository(self.pulp_id) - self.gpgkeys = ["%s/%s" % (PULPCONFIG.cds['keyurl'], key) + self.gpgkeys = [os.path.join(PULPCONFIG.cds['keyurl'], key) for key in repoapi.listkeys(self.pulp_id)] except server.ServerRequestError: err = sys.exc_info()[1] if err[0] == 401: msg = "Packages: Error authenticating to Pulp: %s" % err[1] elif err[0] == 404: - msg = "Packages: Pulp repo id %s not found: %s" % (self.pulp_id, - err[1]) + msg = "Packages: Pulp repo id %s not found: %s" % \ + (self.pulp_id, err[1]) else: - msg = "Packages: Error %d fetching pulp repo %s: %s" % (err[0], - self.pulp_id, - err[1]) + msg = "Packages: Error %d fetching pulp repo %s: %s" % \ + (err[0], self.pulp_id, err[1]) raise SourceInitError(msg) except socket.error: err = sys.exc_info()[1] -- cgit v1.2.3-1-g7c22 From 728fddbdd5ed5e327f3b1c1e9a6b4f2da1b2a360 Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Thu, 22 Mar 2012 13:23:17 -0400 Subject: fixed SimpleConfig for py3k --- src/lib/Server/Plugin.py | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) (limited to 'src/lib') diff --git a/src/lib/Server/Plugin.py b/src/lib/Server/Plugin.py index 1ceed702d..692aa8a81 100644 --- a/src/lib/Server/Plugin.py +++ b/src/lib/Server/Plugin.py @@ -1203,27 +1203,32 @@ class SimpleConfig(FileBacked, self.remove_section(section) self.read(self.name) - def get(self, section, option, default=None): + def get(self, section, option, **kwargs): """ convenience method for getting config items """ + default = None + if 'default' in kwargs: + default = kwargs['default'] + del kwargs['default'] try: - return ConfigParser.SafeConfigParser.get(self, section, option) + return ConfigParser.SafeConfigParser.get(self, section, option, + **kwargs) except (ConfigParser.NoSectionError, ConfigParser.NoOptionError): if default is not None: return default else: raise - def getboolean(self, section, option, default=None): + def getboolean(self, section, option, **kwargs): """ convenience method for getting boolean config items """ + default = None + if 'default' in kwargs: + default = kwargs['default'] + del kwargs['default'] try: - return ConfigParser.SafeConfigParser.getboolean(self, - section, option) - except (ConfigParser.NoSectionError, ConfigParser.NoOptionError): - if default is not None: - return default - else: - raise - except ValueError: + return ConfigParser.SafeConfigParser.getboolean(self, section, + option, **kwargs) + except (ConfigParser.NoSectionError, ConfigParser.NoOptionError, + ValueError): if default is not None: return default else: -- cgit v1.2.3-1-g7c22 From 624695588bd3c61a66b69c4db056b50183e5e4d8 Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Fri, 23 Mar 2012 08:37:33 -0400 Subject: suppress warning about probed.xml --- src/lib/Server/Plugins/Probes.py | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/lib') diff --git a/src/lib/Server/Plugins/Probes.py b/src/lib/Server/Plugins/Probes.py index 5ab92c011..ae1ed4c2b 100644 --- a/src/lib/Server/Plugins/Probes.py +++ b/src/lib/Server/Plugins/Probes.py @@ -137,6 +137,16 @@ class ProbeSet(Bcfg2.Server.Plugin.EntrySet): def HandleEvent(self, event): if event.filename != self.path: + if (event.code2str == 'changed' and + event.filename.endswith("probed.xml") and + event.filename not in self.entries): + # for some reason, probed.xml is particularly prone to + # getting changed events before created events, + # because gamin is the worst ever. anyhow, we + # specifically handle it here to avoid a warning on + # every single server startup. + self.entry_init(event) + return return self.handle_event(event) def get_probe_data(self, metadata): -- cgit v1.2.3-1-g7c22