summaryrefslogtreecommitdiffstats
path: root/src/lib/Server/Plugins/Pkgmgr.py
diff options
context:
space:
mode:
authorNarayan Desai <desai@mcs.anl.gov>2005-09-16 15:52:56 +0000
committerNarayan Desai <desai@mcs.anl.gov>2005-09-16 15:52:56 +0000
commit92fb384cc9107d845e09557d0b35983edec51015 (patch)
tree859f48c9217eadb63b96e9d2c0a4a992714b3ec7 /src/lib/Server/Plugins/Pkgmgr.py
parente64d93388e401c2307e95b8b4e19ec65374a58bf (diff)
downloadbcfg2-92fb384cc9107d845e09557d0b35983edec51015.tar.gz
bcfg2-92fb384cc9107d845e09557d0b35983edec51015.tar.bz2
bcfg2-92fb384cc9107d845e09557d0b35983edec51015.zip
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
Diffstat (limited to 'src/lib/Server/Plugins/Pkgmgr.py')
-rw-r--r--src/lib/Server/Plugins/Pkgmgr.py31
1 files changed, 15 insertions, 16 deletions
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<name>[\w\+\d\.]+(-[\w\+\d\.]+)*)-(?P<version>[\w\d\.]+-([\w\d\.]+))\.(?P<arch>\w+)\.rpm$')
+ splitters = {'rpm':regcompile('^(?P<name>[\w\+\d\.]+(-[\w\+\d\.]+)*)-(?P<version>[\w\d\.]+-([\w\d\.]+))\.(?P<arch>\w+)\.rpm$'),
+ 'encap':regcompile('^(?P<name>\w+)-(?P<version>[\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)