diff options
author | Narayan Desai <desai@mcs.anl.gov> | 2004-10-30 15:07:47 +0000 |
---|---|---|
committer | Narayan Desai <desai@mcs.anl.gov> | 2004-10-30 15:07:47 +0000 |
commit | 80c7e4d568ceefa6abb1d646e0ec84e8d67cbabf (patch) | |
tree | d6a1fc559432e6f296a2aea13e9055ac4a86f1e8 /src | |
parent | 0d20cbba52aaa71510fb5724863f9ea778e0f96d (diff) | |
download | bcfg2-80c7e4d568ceefa6abb1d646e0ec84e8d67cbabf.tar.gz bcfg2-80c7e4d568ceefa6abb1d646e0ec84e8d67cbabf.tar.bz2 bcfg2-80c7e4d568ceefa6abb1d646e0ec84e8d67cbabf.zip |
update internal name
2004/10/30 10:04:04-05:00 anl.gov!desai
Change mode to -rw-r--r--
2004/10/30 10:02:53-05:00 anl.gov!desai
switch to constructure
2004/10/30 10:02:18-05:00 anl.gov!desai
rename
2004/10/30 10:01:50-05:00 anl.gov!desai
Rename: src/lib/Server/Generators/Pkgmgr -> src/lib/Server/Generators/Pkgmgr.py
(Logical change 1.136)
git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@611 ce84e21b-d406-0410-9b95-82705330c041
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/Server/Generators/Pkgmgr.py | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/lib/Server/Generators/Pkgmgr.py b/src/lib/Server/Generators/Pkgmgr.py index e69de29bb..d8165bcea 100644 --- a/src/lib/Server/Generators/Pkgmgr.py +++ b/src/lib/Server/Generators/Pkgmgr.py @@ -0,0 +1,59 @@ +'''This module implements a package management scheme for all images''' +__revision__ = '$Revision$' + +from re import compile as regcompile + +from Bcfg2.Server.Generator import Generator, 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$') + + 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.get('file')) + if not m: + print "failed to rpm match %s" % (pkg.get('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.get('name')] = pkg.attrib + +class PackageDir(DirectoryBacked): + __child__ = PackageEntry + +class Pkgmgr(Generator): + '''This is a generator that handles package assignments''' + __name__ = 'Pkgmgr' + __version__ = '$Id$' + __author__ = 'bcfg-dev@mcs.anl.gov' + + def __init__(self, core, datastore): + Generator.__init__(self, core, datastore) + self.pkgdir = PackageDir(self.data, self.core.fam) + + def FindHandler(self, entry): + if entry.tag != 'Package': + raise KeyError, (entry.tag, entry.get('name')) + return self.LocatePackage + + def LocatePackage(self, entry, metadata): + '''Locates a package entry for particular metadata''' + pkgname = entry.get('name') + pl = self.pkgdir["%s.xml" % (metadata.image)] + if pl.packages.has_key(pkgname): + p = pl.packages[pkgname] + if p.get('type', None) == 'rpm': + entry.attrib.update({'url':"%s/%s" % (p['uri'], p['file']), 'version':p['version']}) + else: + entry.attrib.update(p) + else: + raise KeyError, ("Package", pkgname) |