From 1c8fa0ada08b11cae1da9d18f47cd70e1c330334 Mon Sep 17 00:00:00 2001 From: Narayan Desai Date: Fri, 23 Jul 2004 14:45:28 +0000 Subject: (Logical change 1.23) git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@103 ce84e21b-d406-0410-9b95-82705330c041 --- generators/pkgmgr.py | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) (limited to 'generators') 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[\w\+\d\.]+(-[\w\+\d\.]+)*)-(?P[\w\d\.]+-([\w\d\.]+))\.(?P\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) -- cgit v1.2.3-1-g7c22