From 4521ebcfcf106db5a67cf126bf94d0cd987cebc4 Mon Sep 17 00:00:00 2001 From: Narayan Desai Date: Mon, 10 Apr 2006 20:01:43 +0000 Subject: * Fix schema validation for host specific service entries * Move to using generic rule-based core (in preparation for the rules plugin) git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@1827 ce84e21b-d406-0410-9b95-82705330c041 --- src/lib/Server/Plugins/Pkgmgr.py | 31 ++++++++++++++++++------------- src/lib/Server/Plugins/Svcmgr.py | 12 +----------- 2 files changed, 19 insertions(+), 24 deletions(-) (limited to 'src/lib/Server/Plugins') diff --git a/src/lib/Server/Plugins/Pkgmgr.py b/src/lib/Server/Plugins/Pkgmgr.py index 2367c7c22..a322af0d0 100644 --- a/src/lib/Server/Plugins/Pkgmgr.py +++ b/src/lib/Server/Plugins/Pkgmgr.py @@ -5,24 +5,29 @@ import logging, re, Bcfg2.Server.Plugin logger = logging.getLogger('Bcfg2.Plugins.Pkgmgr') -class PNode(Bcfg2.Server.Plugin.LNode): +class PNode(Bcfg2.Server.Plugin.INode): '''PNode has a list of packages available at a particular group intersection''' splitters = {'rpm':re.compile('^(?P[\w\+\d\.]+(-[\w\+\d\.]+)*)-' + \ '(?P[\w\d\.]+-([\w\d\.]+))\.(?P\w+)\.rpm$'), 'encap':re.compile('^(?P\w+)-(?P[\w\d\.-]+).encap.*$')} + ignore = ['Package'] - def __init__(self, data, plist, parent=None): + def __init__(self, data, pdict, parent=None): # copy local attributes to all child nodes if no local attribute exists + if not pdict.has_key('Package'): + pdict['Package'] = [] for child in data.getchildren(): for attr in [key for key in data.attrib.keys() if key != 'name' and not child.attrib.has_key(key)]: child.set(attr, data.get(attr)) - Bcfg2.Server.Plugin.LNode.__init__(self, data, plist, parent) + Bcfg2.Server.Plugin.INode.__init__(self, data, pdict, parent) + if not self.contents.has_key('Package'): + self.contents['Package'] = {} for pkg in data.findall('./Package'): - if pkg.attrib.has_key('name') and pkg.get('name') not in plist: - plist.append(pkg.get('name')) + if pkg.attrib.has_key('name') and pkg.get('name') not in pdict['Package']: + pdict['Package'].append(pkg.get('name')) if pkg.attrib.has_key('simplefile'): pkg.set('url', "%s/%s" % (pkg.get('uri'), pkg.get('simplefile'))) - self.contents[pkg.get('name')] = pkg.attrib + self.contents['Package'][pkg.get('name')] = pkg.attrib else: if pkg.attrib.has_key('file'): pkg.set('url', '%s/%s' % (pkg.get('uri'), pkg.get('file'))) @@ -32,20 +37,20 @@ class PNode(Bcfg2.Server.Plugin.LNode): logger.error("Failed to match pkg %s" % pkg.get('file')) continue pkgname = mdata.group('name') - self.contents[pkgname] = mdata.groupdict() + self.contents['Package'][pkgname] = mdata.groupdict() if pkg.attrib.get('file'): - self.contents[pkgname]['url'] = pkg.get('url') - self.contents[pkgname]['type'] = pkg.get('type') - if pkgname not in plist: - plist.append(pkgname) + self.contents['Package'][pkgname]['url'] = pkg.get('url') + self.contents['Package'][pkgname]['type'] = pkg.get('type') + if pkgname not in pdict['Package']: + pdict['Package'].append(pkgname) else: - self.contents[pkg.get('name')] = pkg.attrib + self.contents['Package'][pkg.get('name')] = pkg.attrib class PkgSrc(Bcfg2.Server.Plugin.XMLSrc): '''PkgSrc files contain a PNode hierarchy that returns matching package entries''' __node__ = PNode -class Pkgmgr(Bcfg2.Server.Plugin.XMLPrioDir): +class Pkgmgr(Bcfg2.Server.Plugin.PrioDir): '''This is a generator that handles package assignments''' __name__ = 'Pkgmgr' __version__ = '$Id$' diff --git a/src/lib/Server/Plugins/Svcmgr.py b/src/lib/Server/Plugins/Svcmgr.py index da5ab341c..23f06b627 100644 --- a/src/lib/Server/Plugins/Svcmgr.py +++ b/src/lib/Server/Plugins/Svcmgr.py @@ -3,18 +3,8 @@ __revision__ = '$Revision$' import Bcfg2.Server.Plugin -class SNode(Bcfg2.Server.Plugin.LNode): - '''SNode has a list of services available at a particular group intersection''' - __leaf__ = './Service' - -class SvcSrc(Bcfg2.Server.Plugin.XMLSrc): - '''SvcSrc files contain prioritized service definitions''' - __node__ = SNode - -class Svcmgr(Bcfg2.Server.Plugin.XMLPrioDir): +class Svcmgr(Bcfg2.Server.Plugin.PrioDir): '''This is a generator that handles service assignments''' __name__ = 'Svcmgr' __version__ = '$Id$' __author__ = 'bcfg-dev@mcs.anl.gov' - __child__ = SvcSrc - __element__ = 'Service' -- cgit v1.2.3-1-g7c22