'02:34:56:00:00:%02d'%i) for i in range(1,8) ]
# 32bits : qemu32-[1-5] + 64bits : qemu64-[1-3]
+ # removing qemu64-3 until it gets on the right IP segment again
def qemus_ip_pool (self):
- return [ ( 'qemu64-%d.pl.sophia.inria.fr'%i, None, None) for i in range(1,4) ] + \
- [ ( 'qemu32-%d.pl.sophia.inria.fr'%i, None, None) for i in range(1,6) ]
+ return [
+ ('qemu64-1.pl.sophia.inria.fr', None, None),
+ ('qemu64-2.pl.sophia.inria.fr', None, None),
+# ('qemu64-3.pl.sophia.inria.fr', None, None),
+ ('qemu32-1.pl.sophia.inria.fr', None, None),
+ ('qemu32-2.pl.sophia.inria.fr', None, None),
+ ('qemu32-3.pl.sophia.inria.fr', None, None),
+ ('qemu32-4.pl.sophia.inria.fr', None, None),
+ ('qemu32-5.pl.sophia.inria.fr', None, None),
+ ]
def max_qemus (self):
return len(self.qemus_ip_pool())-2
class TestPlc:
default_steps = [
- 'display', 'local_pre', SEP,
+ 'display', 'resources_pre', SEP,
'delete_vs','create_vs','install', 'configure', 'start', SEP,
'fetch_keys', 'store_keys', 'clear_known_hosts', SEP,
'initscripts', 'sites', 'nodes', 'slices', 'nodegroups', SEP,
# 'setup_sfa', 'add_sfa', 'update_sfa', 'view_sfa', SEP,
'check_slice_sfa', 'delete_sfa', 'stop_sfa', SEP,
'check_tcp', 'check_hooks', SEP,
- 'force_gather_logs', 'force_local_post',
+ 'force_gather_logs', 'force_resources_post',
]
other_steps = [
- 'show_boxes', 'local_list','local_cleanup',SEP,
+ 'show_boxes', 'resources_list','resources_release','resources_release_plc','resources_release_qemu',SEP,
'stop', 'vs_start', SEP,
'clean_initscripts', 'clean_nodegroups','clean_all_sites', SEP,
'clean_sites', 'clean_nodes', 'clean_slices', 'clean_keys', SEP,
return True
# entry point
+ always_display_keys=['PLC_WWW_HOST','nodes','sites',]
def display_pass (self,passno):
for (key,val) in self.plc_spec.iteritems():
+ if not self.options.verbose and key not in TestPlc.always_display_keys: continue
if passno == 2:
if key == 'sites':
for site in val:
def display_site_spec (self,site):
print '+ ======== site',site['site_fields']['name']
for (k,v) in site.iteritems():
+ if not self.options.verbose and k not in TestPlc.always_display_keys: continue
if k=='nodes':
if v:
print '+ ','nodes : ',
print '+\tqemu box %s'%node_spec['host_box']
print '+\thostname=%s'%node_spec['node_fields']['hostname']
- def local_pre (self):
+ def resources_pre (self):
"run site-dependant pre-test script as defined in LocalTestResources"
from LocalTestResources import local_resources
return local_resources.step_pre(self)
- def local_post (self):
+ def resources_post (self):
"run site-dependant post-test script as defined in LocalTestResources"
from LocalTestResources import local_resources
return local_resources.step_post(self)
- def local_list (self):
+ def resources_list (self):
"run site-dependant list script as defined in LocalTestResources"
from LocalTestResources import local_resources
return local_resources.step_list(self)
- def local_cleanup (self):
- "run site-dependant cleanup script as defined in LocalTestResources"
+ def resources_release (self):
+ "run site-dependant release script as defined in LocalTestResources"
from LocalTestResources import local_resources
- return local_resources.step_cleanup(self)
+ return local_resources.step_release(self)
+
+ def resources_release_plc (self):
+ "run site-dependant release script as defined in LocalTestResources"
+ from LocalTestResources import local_resources
+ return local_resources.step_release_plc(self)
+
+ def resources_release_qemu (self):
+ "run site-dependant release script as defined in LocalTestResources"
+ from LocalTestResources import local_resources
+ return local_resources.step_release_qemu(self)
def delete_vs(self):
"vserver delete the test myplc"
# as a plc step this should return a boolean
def step_pre (self,plc):
- return self.trqemu_record (plc) and self.trqemu_free(plc) \
- and self.trplc_record (plc) and self.trplc_free(plc)
+ return self.trqemu_record (plc) and self.trqemu_make_space(plc) \
+ and self.trplc_record (plc) and self.trplc_make_space(plc)
def step_post (self,plc):
return True
- def step_cleanup (self,plc):
- return self.trqemu_cleanup(plc) and self.trplc_cleanup(plc)
+ def step_release (self,plc):
+ return self.trqemu_release(plc) and self.trplc_release(plc)
+
+ def step_release_plc (self,plc):
+ return self.trplc_release(plc)
+
+ def step_release_qemu (self,plc):
+ return self.trqemu_release(plc)
def step_list (self,plc):
return self.trqemu_list(plc) and self.trplc_list(plc)
####################
- def trqemu_record (self,plc):
- tracker=TrackerQemu(plc.options,instances=self.max_qemus()-1)
- for site_spec in plc.plc_spec['sites']:
- for node_spec in site_spec['nodes']:
- tracker.record(node_spec['host_box'],plc.options.buildname,node_spec['node_fields']['hostname'])
+ def trplc_record (self,plc):
+ tracker = TrackerPlc(plc.options,instances=self.max_plcs())
+ tracker.record(plc.test_ssh.hostname,plc.vservername)
tracker.store()
return True
- def trqemu_free (self,plc):
- tracker=TrackerQemu(plc.options,instances=self.max_qemus()-1)
- for site_spec in plc.plc_spec['sites']:
- for node_spec in site_spec['nodes']:
- tracker.free()
+ def trplc_release (self,plc):
+ tracker = TrackerPlc(plc.options,instances=self.max_plcs())
+ tracker.release(plc.test_ssh.hostname,plc.vservername)
tracker.store()
return True
- ###
- def trplc_record (self,plc):
+ def trplc_make_space (self,plc):
tracker = TrackerPlc(plc.options,instances=self.max_plcs())
- tracker.record(plc.test_ssh.hostname,plc.vservername)
+ tracker.make_space()
tracker.store()
return True
- def trplc_free (self,plc):
- tracker = TrackerPlc(plc.options,instances=self.max_plcs())
- tracker.free()
- tracker.store()
+ def trplc_list (self,plc):
+ TrackerPlc(plc.options,instances=self.max_plcs()).list()
return True
###
- def trqemu_cleanup (self,plc):
+ def trqemu_record (self,plc):
tracker=TrackerQemu(plc.options,instances=self.max_qemus()-1)
for site_spec in plc.plc_spec['sites']:
for node_spec in site_spec['nodes']:
- tracker.cleanup()
+ tracker.record(node_spec['host_box'],plc.options.buildname,node_spec['node_fields']['hostname'])
tracker.store()
return True
- def trplc_cleanup (self,plc):
- tracker = TrackerPlc(plc.options,instances=self.max_plcs())
- tracker.cleanup()
+ def trqemu_release (self,plc):
+ tracker=TrackerQemu(plc.options,instances=self.max_qemus()-1)
+ for site_spec in plc.plc_spec['sites']:
+ for node_spec in site_spec['nodes']:
+ tracker.release(node_spec['host_box'],plc.options.buildname,node_spec['node_fields']['hostname'])
tracker.store()
return True
- def trqemu_list (self,plc):
- TrackerQemu(plc.options,instances=self.max_qemus()-1).list()
+ def trqemu_make_space (self,plc):
+ tracker=TrackerQemu(plc.options,instances=self.max_qemus()-1)
+ for site_spec in plc.plc_spec['sites']:
+ for node_spec in site_spec['nodes']:
+ tracker.make_space()
+ tracker.store()
return True
- def trplc_list (self,plc):
- TrackerPlc(plc.options,instances=self.max_plcs()).list()
+ def trqemu_list (self,plc):
+ TrackerQemu(plc.options,instances=self.max_qemus()-1).list()
return True
+ ###
def localize_rspec (self,plcs,options):
utils.header ("Localize SFA Slice RSpec")
self.tracks.append( track )
print "Recorded %s in tracker %s"%(track,self.filename)
+ # this stops the instances currently attached with this test session and release tracker
+ def release (self,track):
+ for already in self.tracks:
+ if already==track:
+ if self.options.dry_run:
+ print 'dry_run: Tracker.release - skipping %s'%(track)
+ return
+ self.tracks.remove(track)
+ print "Releasing %s in tracker %s"%(track,self.filename)
+ command = self.stop_command (track)
+ utils.header("Trackers.make_space track : %s"%command)
+ utils.system(command)
+ print '%s was not found in %s'%(track,self.filename)
+ return
+
# this actually stops the old instances, so that the total fits in the number of instances
- def free (self):
+ def make_space (self):
# number of instances to stop
how_many=len(self.tracks)-self.instances
# nothing todo until we have more than keep_vservers in the tracker
if how_many <= 0:
- print 'Tracker.free : limit %d not reached'%self.instances
+ print 'Tracker.make_space : limit %d not reached'%self.instances
return
to_stop = self.tracks[:how_many]
for track in to_stop:
command = self.stop_command (track)
- utils.header("Trackers.free track : %s"%command)
+ utils.header("Trackers.make_space track : %s"%command)
utils.system(command)
if not self.options.dry_run:
self.tracks = self.tracks[how_many:]
def record (self, hostname, vservername):
Tracker.record (self,"%s@%s"%(hostname,vservername))
+ def release (self, hostname, vservername):
+ Tracker.release (self,"%s@%s"%(hostname,vservername))
+
def stop_command (self, track):
(hostname,vservername) = track.split('@')
return TestSsh(hostname).actual_command("vserver --silent %s stop"%vservername)
def record (self, hostname, buildname, nodename):
Tracker.record (self,"%s@%s@%s"%(hostname,buildname,nodename))
+ def release (self, hostname, buildname, nodename):
+ Tracker.release (self,"%s@%s@%s"%(hostname,buildname,nodename))
+
def stop_command (self, track):
(hostname,buildname,nodename) = track.split('@')
return TestSsh(hostname).actual_command("%s/qemu-%s/qemu-kill-node this"%(buildname,nodename))