X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=system%2FSubstrate.py;h=0f849c26cbaa92cd575543e8abacc93205786c42;hb=daa6101bf7c504d89de2eb6bbd06821e2f550539;hp=cbc6f71d35489ba80ec3d58ff8f3fa90aff3c4cb;hpb=4e021bbff16c0812a3b09d84fc690a895025e176;p=tests.git diff --git a/system/Substrate.py b/system/Substrate.py index cbc6f71..0f849c2 100644 --- a/system/Substrate.py +++ b/system/Substrate.py @@ -233,7 +233,7 @@ class Pool: print 'Done' for (vname,bname) in self.load_starting(): self.substrate.add_starting_dummy (bname, vname) - print 'After starting: IP pool' + print "After having loaded 'starting': IP pool" print self.line() # OS-dependent ping option (support for macos, for convenience) ping_timeout_option = None @@ -610,6 +610,9 @@ class QemuBox (Box): return self.qemu_instances.append(QemuInstance(nodename,pid,self)) + def node_names (self): + return [ qi.nodename for qi in self.qemu_instances ] + def forget (self, qemu_instance): self.qemu_instances.remove(qemu_instance) @@ -1069,12 +1072,14 @@ class Substrate: 'name': plc_name, 'vservername':vservername, 'vserverip':vplc_ip, +# 'settings': { 'PLC_DB_HOST':vplc_hostname, 'PLC_API_HOST':vplc_hostname, 'PLC_BOOT_HOST':vplc_hostname, 'PLC_WWW_HOST':vplc_hostname, 'PLC_NET_DNS1' : self.network_settings() [ 'interface_fields:dns1' ], 'PLC_NET_DNS2' : self.network_settings() [ 'interface_fields:dns2' ], +# } } ) ] } @@ -1163,11 +1168,11 @@ class Substrate: def localize_sfa_rspec (self,plc,options): - plc['sfa']['SFA_REGISTRY_HOST'] = plc['PLC_DB_HOST'] - plc['sfa']['SFA_AGGREGATE_HOST'] = plc['PLC_DB_HOST'] - plc['sfa']['SFA_SM_HOST'] = plc['PLC_DB_HOST'] - plc['sfa']['SFA_DB_HOST'] = plc['PLC_DB_HOST'] - plc['sfa']['SFA_PLC_URL'] = 'https://' + plc['PLC_API_HOST'] + ':443/PLCAPI/' + plc['sfa']['settings']['SFA_REGISTRY_HOST'] = plc['settings']['PLC_DB_HOST'] + plc['sfa']['settings']['SFA_AGGREGATE_HOST'] = plc['settings']['PLC_DB_HOST'] + plc['sfa']['settings']['SFA_SM_HOST'] = plc['settings']['PLC_DB_HOST'] + plc['sfa']['settings']['SFA_DB_HOST'] = plc['settings']['PLC_DB_HOST'] + plc['sfa']['settings']['SFA_PLC_URL'] = 'https://%s:443/PLCAPI/' % plc['settings']['PLC_API_HOST'] return plc #################### release: @@ -1186,24 +1191,52 @@ class Substrate: print "Could not find box %s"%boxname return None - def list_boxes(self,box_or_names): - print 'Sensing', + # deal with the mix of boxes and names and stores the current focus + # as a list of Box instances in self.focus_all + def normalize (self, box_or_names): + self.focus_all=[] for box in box_or_names: if not isinstance(box,Box): box=self.get_box(box) - if not box: continue + if not box: + print 'Warning - could not handle box',box + self.focus_all.append(box) + # elaborate by type + self.focus_build = [ x for x in self.focus_all if isinstance(x,BuildBox) ] + self.focus_plc = [ x for x in self.focus_all if isinstance(x,PlcBox) ] + self.focus_qemu = [ x for x in self.focus_all if isinstance(x,QemuBox) ] + + def list_boxes(self): + print 'Sensing', + for box in self.focus_all: box.sense(self.options) print 'Done' - for box in box_or_names: - if not isinstance(box,Box): box=self.get_box(box) - if not box: continue + for box in self.focus_all: box.list(self.options.verbose) - def reboot_boxes(self,box_or_names): - for box in box_or_names: - if not isinstance(box,Box): box=self.get_box(box) - if not box: continue + def reboot_boxes(self): + for box in self.focus_all: box.reboot(self.options) + def sanity_check (self): + print 'Sanity check' + self.sanity_check_plc() + self.sanity_check_qemu() + + def sanity_check_plc (self): + pass + + def sanity_check_qemu (self): + all_nodes=[] + for box in self.focus_qemu: + all_nodes += box.node_names() + hash={} + for node in all_nodes: + if node not in hash: hash[node]=0 + hash[node]+=1 + for (node,count) in hash.items(): + if count!=1: print 'WARNING - duplicate node',node + + #################### # can be run as a utility to probe/display/manage the local infrastructure def main (self): @@ -1241,5 +1274,10 @@ class Substrate: if not boxes: boxes = self.build_boxes + self.plc_boxes + self.qemu_boxes + [self.test_box] - if self.options.reboot: self.reboot_boxes (boxes) - else: self.list_boxes (boxes) + self.normalize (boxes) + + if self.options.reboot: + self.reboot_boxes () + else: + self.list_boxes () + self.sanity_check ()