summaryrefslogtreecommitdiffstats
path: root/generators
diff options
context:
space:
mode:
authorNarayan Desai <desai@mcs.anl.gov>2004-07-23 14:45:28 +0000
committerNarayan Desai <desai@mcs.anl.gov>2004-07-23 14:45:28 +0000
commit1c8fa0ada08b11cae1da9d18f47cd70e1c330334 (patch)
tree2361324b3ed2543e9e2a47ea4a2188c7db05d434 /generators
parent28d9e8d0e28056568b1e45547e31f6dd6782c189 (diff)
downloadbcfg2-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.py55
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)