From a1feda295b8f81883eca3a04adb8295ef54c7704 Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Thu, 6 Feb 2014 16:20:52 +0100 Subject: [PATCH] a sanity check for duplicate vnodes --- system/Substrate.py | 60 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 48 insertions(+), 12 deletions(-) diff --git a/system/Substrate.py b/system/Substrate.py index 30ac997..4b2ad58 100644 --- a/system/Substrate.py +++ b/system/Substrate.py @@ -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) @@ -1186,24 +1189,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 +1272,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 () -- 2.43.0