helper for rewriting some parts of a config - typically for running on another testbox
authorThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Fri, 28 Mar 2008 12:07:01 +0000 (12:07 +0000)
committerThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Fri, 28 Mar 2008 12:07:01 +0000 (12:07 +0000)
system/TestMapper.py [new file with mode: 0644]
system/config_testbox2.py [new file with mode: 0644]

diff --git a/system/TestMapper.py b/system/TestMapper.py
new file mode 100644 (file)
index 0000000..1d2dd3c
--- /dev/null
@@ -0,0 +1,67 @@
+#
+# Thierry Parmentelat - INRIA Sophia Antipolis 
+#
+# mapper class
+# 
+# this works on a spec as defined in a config file
+# and allows to remap various fields, typically to another testbox 
+# see an example in config-testbox2.py
+# 
+
+import re
+import utils
+
+class TestMapper:
+
+    def __init__ (self,plcs,mapper,options):
+        self.plcs=plcs
+        self.mapper=mapper
+        self.options=options
+
+    @staticmethod
+    def match (name,key):
+        key=key.replace("*",".*")
+        return re.compile(key).match(name)
+
+    @staticmethod
+    def plc_name (plc):
+        return plc['name']
+
+    @staticmethod
+    def node_name (node):
+        return node['node_fields']['hostname']
+
+    def apply_first_map (self, obj, name, type, maplist):
+        for (key,dict) in maplist:
+            if TestMapper.match (name,key):
+                utils.header("TestMapper/%s : applying match key %s on plc %s"%(type,key,name))
+                for (k,v) in dict.iteritems():
+                    if not obj.has_key(k):
+                        utils.header ("WARNING : no such key %s in %s %s",k,type,name)
+                    else:
+                        # apply formatting if found
+                        if v.find('%s')>=0:
+                            v=v%obj[k]
+                        if self.options.verbose:
+                            utils.header("mapping %s->%s towards %s"%(name,k,v))
+                        obj[k]=v
+                break
+
+    def map (self):
+
+        plc_maps = self.mapper['plc']
+
+        for plc in self.plcs:
+            name=TestMapper.plc_name(plc)
+            self.apply_first_map (plc,name,'plc',plc_maps)
+
+            node_maps = self.mapper['node']
+
+            for site in plc['sites']:
+                for node in site['nodes']:
+                    nodename = TestMapper.node_name(node)
+                    self.apply_first_map(node,nodename,"node",node_maps)
+
+        return self.plcs
+                                               
+                                              
diff --git a/system/config_testbox2.py b/system/config_testbox2.py
new file mode 100644 (file)
index 0000000..749e9e0
--- /dev/null
@@ -0,0 +1,13 @@
+#
+from TestMapper import TestMapper
+
+# using mapper to do the reallocation job
+
+def config (plcs, options):
+
+    mapper = {'plc': [ ('*' , {'hostname':'testbox2.inria.fr',
+                               'name':'%s2' } ) ],
+              'node': [ ('*' , {'host_box':'testbox2.inria.fr'} ) ],
+              }
+    
+    return TestMapper(plcs,mapper,options).map()