summaryrefslogtreecommitdiffstats
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
commitb5df563464ebee122c390eb5914701b59a3c3aa4 (patch)
tree1bd4e61c149615294835e1f60cbe3398c512566f
parent1ff26b961f5b679a527069dec48160abdbebf1c5 (diff)
downloadbcfg2-b5df563464ebee122c390eb5914701b59a3c3aa4.tar.gz
bcfg2-b5df563464ebee122c390eb5914701b59a3c3aa4.tar.bz2
bcfg2-b5df563464ebee122c390eb5914701b59a3c3aa4.zip
building configs based on the bundler structure works
(Logical change 1.23) git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@109 ce84e21b-d406-0410-9b95-82705330c041
-rw-r--r--src/Core.py35
1 files changed, 21 insertions, 14 deletions
diff --git a/src/Core.py b/src/Core.py
index 637e3e5d3..a87c6a589 100644
--- a/src/Core.py
+++ b/src/Core.py
@@ -6,6 +6,7 @@ from stat import ST_MODE, S_ISDIR
from syslog import syslog, LOG_ERR
from Error import PublishError
+from Types import Clause
import _fam
@@ -86,19 +87,25 @@ class Core(object):
return self.pubspace[key].value
raise KeyError,key
- def GetEntry(self, key1, key2):
- for d in map(lambda x:x.__provides__, self.generators):
- if d.has_key(key1):
- if d[key1].has_key(key2):
- return d[key1][key2]
- raise KeyError, (key1, key2)
+ def GetStructures(self, metadata):
+ return reduce(lambda x,y:x+y, map(lambda x:x.Construct(metadata), self.structures))
- def GetConfigFile(self,filename,metadata):
- try:
- self.Get("ConfigFile", filename, metadata)
- except:
- raise KeyError, filename
-
- def Get(self,type,name,metadata):
- return self.GetEntry(type, name)(name, metadata)
+ def BindStructure(self, structure, metadata):
+ for entry in structure.getchildren():
+ self.Bind(entry, metadata)
+ def Bind(self, entry, metadata):
+ g = [x for x in self.generators if x.__provides__.get(entry.tag, {}).has_key(entry.attrib['name'])]
+ if len(g) == 1:
+ return g[0].__provides__[entry.tag][entry.attrib['name']](entry, metadata)
+ elif len(g) > 1:
+ print "Data Integrity error for %s %s"%(entry.tag, entry.attrib['name'])
+ else:
+ for g in self.generators:
+ if hasattr(g, "FindHandler"):
+ try:
+ return g.FindHandler(entry)(entry, metadata)
+ except:
+ print g, "failed"
+ raise KeyError, (entry.tag,entry.attrib['name'])
+