summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSol Jerome <sol.jerome@gmail.com>2012-03-23 10:51:32 -0500
committerSol Jerome <sol.jerome@gmail.com>2012-03-23 10:51:32 -0500
commit3063e41f480a6143b42a0eff6e4ca17bbfc0d1db (patch)
tree204e6b486ab7c7a8f9c29ad3ec77a4e344272098 /src
parent397c17ffc5755d2b41ccfa01225d4f42cb9545c1 (diff)
parent746293b2f242c099037aac19f14f65e68d036270 (diff)
downloadbcfg2-3063e41f480a6143b42a0eff6e4ca17bbfc0d1db.tar.gz
bcfg2-3063e41f480a6143b42a0eff6e4ca17bbfc0d1db.tar.bz2
bcfg2-3063e41f480a6143b42a0eff6e4ca17bbfc0d1db.zip
Merge branch 'maint'
Diffstat (limited to 'src')
-rw-r--r--src/lib/Server/Plugin.py27
-rw-r--r--src/lib/Server/Plugins/Bundler.py34
-rw-r--r--src/lib/Server/Plugins/Cfg.py4
-rw-r--r--src/lib/Server/Plugins/Packages/Yum.py70
-rw-r--r--src/lib/Server/Plugins/Pkgmgr.py7
-rw-r--r--src/lib/Server/Plugins/Probes.py10
6 files changed, 95 insertions, 57 deletions
diff --git a/src/lib/Server/Plugin.py b/src/lib/Server/Plugin.py
index f423bea2e..06de18f29 100644
--- a/src/lib/Server/Plugin.py
+++ b/src/lib/Server/Plugin.py
@@ -1199,27 +1199,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:
diff --git a/src/lib/Server/Plugins/Bundler.py b/src/lib/Server/Plugins/Bundler.py
index 5b5b0d698..ccb99481e 100644
--- a/src/lib/Server/Plugins/Bundler.py
+++ b/src/lib/Server/Plugins/Bundler.py
@@ -76,24 +76,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:
- entries = bundle_entries[bundlename]
- if len(entries) == 0:
+ try:
+ entries = bundle_entries[bundlename]
+ except KeyError:
+ 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
diff --git a/src/lib/Server/Plugins/Cfg.py b/src/lib/Server/Plugins/Cfg.py
index 03d56fdc2..917f27e20 100644
--- a/src/lib/Server/Plugins/Cfg.py
+++ b/src/lib/Server/Plugins/Cfg.py
@@ -100,6 +100,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)
diff --git a/src/lib/Server/Plugins/Packages/Yum.py b/src/lib/Server/Plugins/Packages/Yum.py
index 416602b27..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:
@@ -396,10 +415,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:
@@ -438,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]
diff --git a/src/lib/Server/Plugins/Pkgmgr.py b/src/lib/Server/Plugins/Pkgmgr.py
index 5a2106ea6..e9254cdcc 100644
--- a/src/lib/Server/Plugins/Pkgmgr.py
+++ b/src/lib/Server/Plugins/Pkgmgr.py
@@ -4,7 +4,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')
@@ -63,7 +66,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))
diff --git a/src/lib/Server/Plugins/Probes.py b/src/lib/Server/Plugins/Probes.py
index ced18ee42..2af3635e9 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):