summaryrefslogtreecommitdiffstats
path: root/src/lib/Server/Plugins/Base.py
diff options
context:
space:
mode:
authorNarayan Desai <desai@mcs.anl.gov>2006-01-23 22:35:40 +0000
committerNarayan Desai <desai@mcs.anl.gov>2006-01-23 22:35:40 +0000
commitedca0b698637c3fd0a70af7e4752a46afca938d3 (patch)
tree658fad717833200ccb4e3725c811ccce7c10fc8d /src/lib/Server/Plugins/Base.py
parent8ca8a153dfc6bd81ede9f5cff1ee3f111ae053ee (diff)
downloadbcfg2-edca0b698637c3fd0a70af7e4752a46afca938d3.tar.gz
bcfg2-edca0b698637c3fd0a70af7e4752a46afca938d3.tar.bz2
bcfg2-edca0b698637c3fd0a70af7e4752a46afca938d3.zip
last step of repo switches
git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@1716 ce84e21b-d406-0410-9b95-82705330c041
Diffstat (limited to 'src/lib/Server/Plugins/Base.py')
-rw-r--r--src/lib/Server/Plugins/Base.py59
1 files changed, 14 insertions, 45 deletions
diff --git a/src/lib/Server/Plugins/Base.py b/src/lib/Server/Plugins/Base.py
index 1cdd7599c..3be30bc6a 100644
--- a/src/lib/Server/Plugins/Base.py
+++ b/src/lib/Server/Plugins/Base.py
@@ -1,62 +1,31 @@
'''This module sets up a base list of configuration entries'''
__revision__ = '$Revision$'
-from copy import deepcopy
-from lxml.etree import Element, XML, XMLSyntaxError, _Comment
+import Bcfg2.Server.Plugin
+import copy
+import lxml.etree
-from Bcfg2.Server.Plugin import Plugin, PluginInitError, SingleXMLFileBacked
-
-class Base(Plugin, SingleXMLFileBacked):
+class Base(Bcfg2.Server.Plugin.Plugin, Bcfg2.Server.Plugin.DirectoryBacked):
'''This Structure is good for the pile of independent configs needed for most actual systems'''
__name__ = 'Base'
__version__ = '$Id$'
__author__ = 'bcfg-dev@mcs.anl.gov'
+ __child__ = Bcfg2.Server.Plugin.StructFile
'''base creates independent clauses based on client metadata'''
def __init__(self, core, datastore):
- Plugin.__init__(self, core, datastore)
- self.store = {'all':[], 'Class':{'all':[]}, 'Image':{'all':[]}, 'all':[]}
+ Bcfg2.Server.Plugin.Plugin.__init__(self, core, datastore)
+ self.fragements = {}
try:
- SingleXMLFileBacked.__init__(self, "%s/etc/base.xml"%(datastore), self.core.fam)
+ Bcfg2.Server.Plugin.DirectoryBacked.__init__(self, self.data, self.core.fam)
except OSError:
- self.LogError("Failed to load base.xml")
- raise PluginInitError
+ self.LogError("Failed to load Base repository")
+ raise Bcfg2.Server.Plugin.PluginInitError
- def Index(self):
- '''Store XML data in reasonable structures'''
- try:
- xdata = XML(self.data)
- except XMLSyntaxError:
- self.LogError("Failed to parse base.xml")
- return
- self.store = {'all':[], 'Class':{'all':[]}, 'Image':{'all':[]}, 'all':[]}
- for entry in [ent for ent in xdata.getchildren() if not isinstance(ent, _Comment)]:
- if entry.tag in ['Image', 'Class']:
- if not self.store[entry.tag].has_key(entry.get('name')):
- self.store[entry.tag][entry.get('name')] = {'all':[], 'Class':{}, 'Image':{}}
- for child in [ent for ent in entry.getchildren() if not isinstance(ent, _Comment)]:
- if child.tag in ['Image', 'Class']:
- self.store[entry.tag][entry.get('name')][child.tag][child.get('name')] = \
- [ent for ent in child.getchildren() if \
- not isinstance(ent, _Comment)]
- else:
- self.store[entry.tag][entry.get('name')]['all'].append(child)
- else:
- self.store['all'].append(child)
-
def BuildStructures(self, metadata):
'''Build structures for client described by metadata'''
- ret = Element("Independant", version='2.0')
- [ret.append(deepcopy(entry)) for entry in self.store['all']]
- idata = self.store['Image'].get(metadata.image, {'all':[], 'Class':{}})
- for entry in idata['all']:
- ret.append(deepcopy(entry))
- for cls in metadata.classes:
- for entry in idata['Class'].get(cls, []):
- ret.append(deepcopy(entry))
- cdata = self.store['Class'].get(cls, {'all':[], 'Image':{}})
- for entry in cdata['all']:
- ret.append(deepcopy(entry))
- for entry in cdata['Image'].get(metadata.image, []):
- ret.append(deepcopy(entry))
+ ret = lxml.etree.Element("Independant", version='2.0')
+ fragments = reduce(lambda x, y: x+y,
+ [base.Match(metadata) for base in self.entries.values()])
+ [ret.append(copy.deepcopy(frag)) for frag in fragments]
return [ret]