From 065ae8e8bd2787cbea793a855822c44751ef01e7 Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Fri, 28 Mar 2008 12:07:01 +0000 Subject: [PATCH] helper for rewriting some parts of a config - typically for running on another testbox --- system/TestMapper.py | 67 +++++++++++++++++++++++++++++++++++++++ system/config_testbox2.py | 13 ++++++++ 2 files changed, 80 insertions(+) create mode 100644 system/TestMapper.py create mode 100644 system/config_testbox2.py diff --git a/system/TestMapper.py b/system/TestMapper.py new file mode 100644 index 0000000..1d2dd3c --- /dev/null +++ b/system/TestMapper.py @@ -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 index 0000000..749e9e0 --- /dev/null +++ b/system/config_testbox2.py @@ -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() -- 2.43.0