X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=system%2FTestResources.py;h=bc928ac77076554337382afec6559928358c1843;hb=acc29368268d995c2965a917409dba89d2373397;hp=0041404cb4844b8e19ca36afbead092f5ceda0e9;hpb=f107a49edc5b9ce0dec718021a407f081283c6e5;p=tests.git diff --git a/system/TestResources.py b/system/TestResources.py index 0041404..bc928ac 100644 --- a/system/TestResources.py +++ b/system/TestResources.py @@ -1,8 +1,8 @@ +# Thierry Parmentelat +# Copyright (C) 2010 INRIA # -# $Id$ -# - import sys +import traceback import utils from TestMapper import TestMapper @@ -19,6 +19,7 @@ class TestResources: plcs = self.localize_qemus(plcs,options) except Exception, e: print '* Could not localize qemus','--',e,'--','exiting' + traceback.print_exc() sys.exit(1) try: plcs = self.localize_nodes(plcs,options) @@ -54,7 +55,8 @@ class TestResources: ip_or_hostname=options.ips_qemu.pop() (hostname,ip,unused)=qemu_pool.locate_entry(ip_or_hostname) else: - (hostname,ip,unused) = qemu_pool.next_free() + tracker=TrackerQemu(options,instances=self.max_qemus()-1) + (hostname,ip,unused) = qemu_pool.next_free(tracker.hostnames()) node_map += [ ('node%d'%index, {'host_box':hostname},) ] @@ -83,10 +85,10 @@ class TestResources: for nodename in all_nodenames: if options.ips_node: ip_or_hostname=options.ips_node.pop() - print 'debug','in',ip_or_hostname,'out',ip_pool.locate_entry(ip_or_hostname) (hostname,ip,mac)=ip_pool.locate_entry(ip_or_hostname) else: - (hostname,ip,mac) = ip_pool.next_free() + tracker=TrackerQemu(options,instances=self.max_qemus()-1) + (hostname,ip,mac) = ip_pool.next_free(tracker.nodenames()) utils.header('Attaching node %s to %s (%s)'%(nodename,hostname,ip)) node_dict= {'node_fields:hostname':hostname, 'interface_fields:ip':ip, @@ -104,7 +106,6 @@ class TestResources: def localize_plcs (self,plcs,options): - utils.header ("Turning configuration into a vserver-based one for onelab") ip_pool = TestPoolIP (self.plcs_ip_pool(),options) plc_counter=0 @@ -116,20 +117,29 @@ class TestResources: utils.header("Using user-provided %s %s for plc %s"%( hostname,ip_or_hostname,plc['name'])) else: - (hostname,ip,mac)=ip_pool.next_free() + tracker = TrackerPlc(options,instances=self.max_plcs()) + (hostname,ip,mac)=ip_pool.next_free(tracker.plcnames()) if options.verbose: utils.header("Using auto-allocated %s %s for plc %s"%( hostname,ip,plc['name'])) ### rewrite fields in plc # compute a helpful vserver name - remove domain in hostname - simplehostname=hostname.split('.')[0] + simplehostname = hostname.split('.')[0] + preferred_hostname = self.preferred_hostname() vservername = options.buildname if len(plcs) == 1 : vservername = "%s-%s" % (vservername,simplehostname) + #ugly hack for "vuname: vc_set_vhi_name(): Arg list too long" errors + if len(vservername) > 38 and preferred_hostname is not None: + vservername = "%s-%s" % (options.buildname,preferred_hostname) else: plc_counter += 1 vservername = "%s-%d-%s" % (vservername,plc_counter,simplehostname) + #ugly hack for "vuname: vc_set_vhi_name(): Arg list too long" errors + if len(vservername) > 38 and preferred_hostname is not None: + vservername = "%s-%d-%s" % (options.buildname,plc_counter,preferred_hostname) + # apply plc['vservername']=vservername plc['vserverip']=ip @@ -143,70 +153,77 @@ class TestResources: # as a plc step this should return a boolean def step_pre (self,plc): - return self.trqemu_record (plc) and self.trqemu_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 self.trplc_record (plc) and self.trplc_free(plc) + return True + + 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_cleanup (self,plc): - return self.trqemu_cleanup(plc) and self.trplc_cleanup(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")