X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=system%2FSubstrate.py;h=139790a88074b73e42084d91acf43d69d3f89d7f;hb=567d6e70500cf677acd5e0a5a4e2d5601d2f999e;hp=ff77940225c52c55cf423547c0d858e48713872c;hpb=967b5ac047565bb4f94ab924844885a6543dc426;p=tests.git diff --git a/system/Substrate.py b/system/Substrate.py index ff77940..139790a 100644 --- a/system/Substrate.py +++ b/system/Substrate.py @@ -59,6 +59,9 @@ import utils from TestSsh import TestSsh from TestMapper import TestMapper +# too painful to propagate this cleanly +verbose=None + def header (message,banner=True): if not message: return if banner: print "===============", @@ -261,7 +264,16 @@ class Box: self.test_ssh().run("shutdown -r now",message="Rebooting %s"%self.hostname, dry_run=options.dry_run) - def hostname_fedora (self): return "%s [%s]"%(self.hostname,self.fedora()) + def hostname_fedora (self,virt=None): + result = "%s {"%self.hostname + if virt: result += "%s-"%virt + result += "%s"%self.fedora() + # too painful to propagate this cleanly + global verbose + if verbose: + result += "-%s" % self.uname() + result += "}" + return result separator = "===composite===" @@ -390,34 +402,47 @@ class BuildBox (Box): if not options.soft: Box.reboot(self,options) else: + self.soft_reboot (options) + +class BuildVsBox (BuildBox): + def soft_reboot (self, options): command=['pkill','vbuild'] self.run_ssh(command,"Terminating vbuild processes",dry_run=options.dry_run) # inspect box and find currently running builds matcher=re.compile("\s*(?P[0-9]+).*-[bo]\s+(?P[^\s]+)(\s|\Z)") - matcher_building_vm=re.compile("\s*(?P[0-9]+).*init-vserver.*\s+(?P[^\s]+)\s*\Z") + matcher_building_vm=re.compile("\s*(?P[0-9]+).*initvm.*\s+(?P[^\s]+)\s*\Z") def sense(self, options): - print 'bb', + print 'vb', pids=self.backquote_ssh(['pgrep','vbuild'],trash_err=True) if not pids: return command=['ps','-o','pid,command'] + [ pid for pid in pids.split("\n") if pid] ps_lines=self.backquote_ssh (command).split('\n') for line in ps_lines: if not line.strip() or line.find('PID')>=0: continue - m=BuildBox.matcher.match(line) + m=BuildVsBox.matcher.match(line) if m: date=time.strftime('%Y-%m-%d',time.localtime(time.time())) buildname=m.group('buildname').replace('@DATE@',date) self.add_build (buildname,m.group('pid')) continue - m=BuildBox.matcher_building_vm.match(line) + m=BuildVsBox.matcher_building_vm.match(line) if m: # buildname is expansed here self.add_build (buildname,m.group('pid')) continue - header('BuildBox.sense: command %r returned line that failed to match'%command) + header('BuildVsBox.sense: command %r returned line that failed to match'%command) header(">>%s<<"%line) +class BuildLxcBox (BuildBox): + def soft_reboot (self, options): + command=['pkill','lbuild'] + self.run_ssh(command,"Terminating vbuild processes",dry_run=options.dry_run) + + # inspect box and find currently running builds + def sense(self, options): + print 'xb (Substrate.BuildLxcBox.sense - NIY)', + ############################################################ class PlcInstance: def __init__ (self, plcbox): @@ -516,7 +541,7 @@ class PlcBox (Box): for p in self.plc_instances: header (p.line(),banner=False) - +# we do not this at INRIA any more class PlcVsBox (PlcBox): def add_vserver (self,vservername,ctxid): @@ -528,7 +553,7 @@ class PlcVsBox (PlcBox): self.plc_instances.append(PlcVsInstance(self,vservername,ctxid)) def line(self): - msg="%s [max=%d,free=%d, VS-based] (%s)"%(self.hostname_fedora(), self.max_plcs,self.free_slots(),self.uname()) + msg="%s [max=%d,free=%d] (%s)"%(self.hostname_fedora(virt="vs"), self.max_plcs,self.free_slots(),self.uptime()) return msg def plc_instance_by_vservername (self, vservername): @@ -603,8 +628,10 @@ class PlcLxcBox (PlcBox): # a line describing the box def line(self): - return "%s [max=%d,free=%d, LXC-based] (%s)"%(self.hostname_fedora(), self.max_plcs,self.free_slots(), - self.uname()) + return "%s [max=%d,free=%d] (%s)"%(self.hostname_fedora(virt="lxc"), + self.max_plcs,self.free_slots(), + self.uptime(), + ) def plc_instance_by_lxcname (self, lxcname): for p in self.plc_instances: @@ -621,7 +648,6 @@ class PlcLxcBox (PlcBox): # sense is expected to fill self.plc_instances with PlcLxcInstance's # to describe the currently running VM's - # as well as to call self.get_uname() once def sense (self, options): print "xp", command="rsync lxc-driver.sh %s:/root"%self.hostname @@ -701,7 +727,7 @@ class QemuBox (Box): def line (self): return "%s [max=%d,free=%d] (%s) %s"%( - self.hostname_fedora(), self.max_qemus,self.free_slots(), + self.hostname_fedora(virt="qemu"), self.max_qemus,self.free_slots(), self.uptime(),self.driver()) def list(self, verbose=False): @@ -980,14 +1006,10 @@ class Substrate: self.options.reboot=False self.options.soft=False self.test_box = TestBox (self.test_box_spec()) - self.build_boxes = [ BuildBox(h) for h in self.build_boxes_spec() ] - # for compat with older LocalSubstrate - try: - self.plc_vs_boxes = [ PlcVsBox (h,m) for (h,m) in self.plc_vs_boxes_spec ()] - self.plc_lxc_boxes = [ PlcLxcBox (h,m) for (h,m) in self.plc_lxc_boxes_spec ()] - except: - self.plc_vs_boxes = [ PlcVsBox (h,m) for (h,m) in self.plc_boxes_spec ()] - self.plc_lxc_boxes = [ ] + self.build_vs_boxes = [ BuildVsBox(h) for h in self.build_vs_boxes_spec() ] + self.build_lxc_boxes = [ BuildLxcBox(h) for h in self.build_lxc_boxes_spec() ] + self.plc_vs_boxes = [ PlcVsBox (h,m) for (h,m) in self.plc_vs_boxes_spec ()] + self.plc_lxc_boxes = [ PlcLxcBox (h,m) for (h,m) in self.plc_lxc_boxes_spec ()] self.qemu_boxes = [ QemuBox (h,m) for (h,m) in self.qemu_boxes_spec ()] self._sensed=False @@ -998,6 +1020,7 @@ class Substrate: # which plc boxes are we interested in ? def rescope (self, plcs_on_vs, plcs_on_lxc): + self.build_boxes = self.build_vs_boxes + self.build_lxc_boxes self.plc_boxes=[] if plcs_on_vs: self.plc_boxes += self.plc_vs_boxes if plcs_on_lxc: self.plc_boxes += self.plc_lxc_boxes @@ -1317,6 +1340,8 @@ class Substrate: if self.options.qemus: boxes += self.qemu_boxes if self.options.all: boxes += self.all_boxes + global verbose + verbose=self.options.verbose # default scope is -b -p -q -t if not boxes: boxes = self.build_boxes + self.plc_boxes + self.qemu_boxes + [self.test_box]