diff options
author | Narayan Desai <desai@mcs.anl.gov> | 2004-07-23 14:45:28 +0000 |
---|---|---|
committer | Narayan Desai <desai@mcs.anl.gov> | 2004-07-23 14:45:28 +0000 |
commit | 1c8fa0ada08b11cae1da9d18f47cd70e1c330334 (patch) | |
tree | 2361324b3ed2543e9e2a47ea4a2188c7db05d434 /generators | |
parent | 28d9e8d0e28056568b1e45547e31f6dd6782c189 (diff) | |
download | bcfg2-1c8fa0ada08b11cae1da9d18f47cd70e1c330334.tar.gz bcfg2-1c8fa0ada08b11cae1da9d18f47cd70e1c330334.tar.bz2 bcfg2-1c8fa0ada08b11cae1da9d18f47cd70e1c330334.zip |
(Logical change 1.23)
git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@103 ce84e21b-d406-0410-9b95-82705330c041
Diffstat (limited to 'generators')
-rw-r--r-- | generators/pkgmgr.py | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/generators/pkgmgr.py b/generators/pkgmgr.py index e69de29bb..85dd9ea48 100644 --- a/generators/pkgmgr.py +++ b/generators/pkgmgr.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python + +from re import compile + +from Generator import Generator +from GeneratorUtils import DirectoryBacked, XMLFileBacked +from Types import Package + +class PackageEntry(XMLFileBacked): + __identifier__ = 'image' + rpm = compile('^(?P<name>[\w\+\d\.]+(-[\w\+\d\.]+)*)-(?P<version>[\w\d\.]+-([\w\d\.]+))\.(?P<arch>\w+)\.rpm$') + + def Index(self): + XMLFileBacked.Index(self) + self.packages = {} + for location in self.entries: + for pkg in location.getchildren(): + if pkg.attrib.has_key("file"): + m = self.rpm.match(pkg.attrib['file']) + if not m: + print "failed to rpm match %s"%(pkg.attrib['file']) + continue + self.packages[m.group('name')] = m.groupdict() + self.packages[m.group('name')]['file'] = pkg.attrib['file'] + self.packages[m.group('name')]['uri'] = location.attrib['uri'] + self.packages[m.group('name')]['type'] = 'rpm' + else: + self.packages[pkg.attrib['name']] = pkg.attrib + +class PackageDir(DirectoryBacked): + __child__ = PackageEntry + +class pkgmgr(Generator): + '''This is a generator that handles service assignments''' + __name__ = 'pkgmgr' + __version__ = '$Id$' + __author__ = 'bcfg-dev@mcs.anl.gov' + + def __setup__(self): + self.pkgdir=PackageDir(self.data,self.core.fam) + + def FindHandler(self, entry): + if entry.tag != 'Package': + raise KeyError, (entry.tag, entry.attrib['name']) + return self.LocatePackage + + def LocatePackage(self, entry, metadata): + pkgname = entry.attrib['name'] + pl = self.pkgdir["%s.xml"%(metadata.image)] + if pl.packages.has_key(pkgname): + p = pl.packages[pkgname] + if p['type'] == 'rpm': + entry.attrib.update({'url':"%s/%s"%(p['uri'],p['file']), 'version':p['version']}) + else: + raise KeyError, ("Package", name) |