summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNarayan Desai <desai@mcs.anl.gov>2010-04-30 14:03:48 +0000
committerSol Jerome <solj@ices.utexas.edu>2010-04-30 14:49:19 -0500
commit09fcf23f499c3743f2e5634510cc9d2d8b9949e9 (patch)
tree16adaa50f866613ac4c7663d501e3c5f69768d33
parenta4dfc17c8e53e0b73d39d89dc37835f49c1f1d15 (diff)
downloadbcfg2-09fcf23f499c3743f2e5634510cc9d2d8b9949e9.tar.gz
bcfg2-09fcf23f499c3743f2e5634510cc9d2d8b9949e9.tar.bz2
bcfg2-09fcf23f499c3743f2e5634510cc9d2d8b9949e9.zip
YUMng: make yumng robust again virtual package specs (patch from slack)
git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@5849 ce84e21b-d406-0410-9b95-82705330c041
-rw-r--r--src/lib/Client/Tools/YUMng.py33
1 files changed, 26 insertions, 7 deletions
diff --git a/src/lib/Client/Tools/YUMng.py b/src/lib/Client/Tools/YUMng.py
index b4e8a2c4e..494c9f896 100644
--- a/src/lib/Client/Tools/YUMng.py
+++ b/src/lib/Client/Tools/YUMng.py
@@ -73,9 +73,11 @@ class YUMng(Bcfg2.Client.Tools.RPMng.RPMng):
def __init__(self, logger, setup, config):
Bcfg2.Client.Tools.RPMng.RPMng.__init__(self, logger, setup, config)
- self.__important__ = [entry.get('name') for struct in config for entry in struct \
- if entry.tag in ['Path', 'ConfigFile'] and \
- entry.get('name').startswith('/etc/yum.d') or entry.get('name') == '/etc/yum.conf']
+ self.__important__ = [entry.get('name') for struct in config \
+ for entry in struct \
+ if entry.tag in ['Path', 'ConfigFile'] and \
+ entry.get('name').startswith('/etc/yum.d') \
+ or entry.get('name') == '/etc/yum.conf']
self.yum_avail = dict()
self.yum_installed = dict()
self.yb = yum.YumBase()
@@ -115,14 +117,31 @@ class YUMng(Bcfg2.Client.Tools.RPMng.RPMng):
# installed but out of date
data.update(self.yum_avail[entry.get('name')])
for (arch, (epoch, vers, rel)) in list(data.items()):
- x= Bcfg2.Client.XML.SubElement(entry, "Instance",
- name=entry.get('name'),
- version=vers, arch=arch,
- release=rel, epoch=epoch)
+ x = Bcfg2.Client.XML.SubElement(entry, "Instance",
+ name=entry.get('name'),
+ version=vers, arch=arch,
+ release=rel, epoch=epoch)
if 'verify_flags' in entry.attrib:
x.set('verify_flags', entry.get('verify_flags'))
if 'verify' in entry.attrib:
x.set('verify', entry.get('verify'))
+
+ if entry.get('type', False) == 'yum':
+ # Make sure we are dealing with Packages from Yum
+ # Resolve what provides this package. That's what
+ # we need to verify. Otherwise we run into bad
+ # obsoletes and provides fun.
+ try:
+ pkg = self.yb.returnPackageByDep(entry.get('name'))
+ if entry.get('name') != pkg.name:
+ self.logger.info("YUMng: remapping virtual package %s to %s" \
+ % (entry.get('name'), pkg.name))
+ entry.set('name', pkg.name)
+ # Set the version? version = '%s:%s-%s.%s' % \
+ # (pkg.epoch, pkg.version, pkg.release, pkg.arch)
+ except yum.Errors.YumBaseError, e:
+ self.logger.info('Yum Error Depsolving for %s: %s' % \
+ (entry.get('name'), str(e)))
return Bcfg2.Client.Tools.RPMng.RPMng.VerifyPackage(self, entry,
modlist)