From 92fb384cc9107d845e09557d0b35983edec51015 Mon Sep 17 00:00:00 2001 From: Narayan Desai Date: Fri, 16 Sep 2005 15:52:56 +0000 Subject: fix simplefile url generation 2005/09/15 12:42:50-05:00 anl.gov!desai encap file entries should now work properly (Logical change 1.316) git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@1289 ce84e21b-d406-0410-9b95-82705330c041 --- src/lib/Server/Plugins/Pkgmgr.py | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) (limited to 'src/lib/Server/Plugins/Pkgmgr.py') diff --git a/src/lib/Server/Plugins/Pkgmgr.py b/src/lib/Server/Plugins/Pkgmgr.py index c29e02a7a..02e64db2e 100644 --- a/src/lib/Server/Plugins/Pkgmgr.py +++ b/src/lib/Server/Plugins/Pkgmgr.py @@ -3,13 +3,15 @@ __revision__ = '$Revision$' from copy import deepcopy from re import compile as regcompile +from syslog import syslog, LOG_ERR from Bcfg2.Server.Plugin import Plugin, PluginInitError, PluginExecutionError, DirectoryBacked, XMLFileBacked class PackageEntry(XMLFileBacked): '''PackageEntry is a set of packages and locations for a single image''' __identifier__ = 'image' - rpm = regcompile('^(?P[\w\+\d\.]+(-[\w\+\d\.]+)*)-(?P[\w\d\.]+-([\w\d\.]+))\.(?P\w+)\.rpm$') + splitters = {'rpm':regcompile('^(?P[\w\+\d\.]+(-[\w\+\d\.]+)*)-(?P[\w\d\.]+-([\w\d\.]+))\.(?P\w+)\.rpm$'), + 'encap':regcompile('^(?P\w+)-(?P[\w\d\.-]+).encap.*$')} def Index(self): '''Build internal data structures''' @@ -22,17 +24,18 @@ class PackageEntry(XMLFileBacked): if pkg.attrib.has_key("simplefile"): self.packages[pkg.get('name')] = deepcopy(pkg.attrib) # most attribs will be set from pkg - self.packages[pkg.get('name')]['uri'] = "%s/%s" % (location.get('uri'), pkg.get('simplefile')) + self.packages[pkg.get('name')]['url'] = "%s/%s" % (location.get('uri'), pkg.get('simplefile')) elif pkg.attrib.has_key("file"): - mdata = self.rpm.match(pkg.get('file')) - if not mdata: - print "failed to rpm match %s" % (pkg.get('file')) - continue - pkgname = mdata.group('name') - self.packages[pkgname] = mdata.groupdict() - self.packages[pkgname]['file'] = pkg.get('file') - self.packages[pkgname]['uri'] = location.get('uri') - self.packages[pkgname]['type'] = 'rpm' + for ptype in self.splitters: + mdata = self.splitters[ptype].match(pkg.get('file')) + if not mdata: + continue + pkgname = mdata.group('name') + self.packages[pkgname] = mdata.groupdict() + self.packages[pkgname]['url'] = location.get('uri') + '/' + pkg.get('file') + self.packages[pkgname]['type'] = ptype + break + syslog(LOG_ERR, "Failed to match pkg %s" % pkg.get('file')) else: self.packages[pkg.get('name')] = pkg.attrib @@ -73,10 +76,6 @@ class Pkgmgr(Plugin): raise PluginExecutionError, ("Image", metadata.image) pkglist = self.pkgdir["%s.xml" % (metadata.image)] if pkglist.packages.has_key(pkgname): - pkg = pkglist.packages[pkgname] - if pkg.get('type', None) == 'rpm': - entry.attrib.update({'url':"%s/%s" % (pkg['uri'], pkg['file']), 'version':pkg['version']}) - else: - entry.attrib.update(pkg) + entry.attrib.update(pkglist.packages[pkgname]) else: raise PluginExecutionError, ("Package", pkgname) -- cgit v1.2.3-1-g7c22