X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=system%2FTestResources.py;h=c7a298b0cf7ebc9ba0ad6d6a9c460245d5b57424;hb=d933160f1c55c769a0f93cdd953e11a3fc57753f;hp=9d95b1f53200c49c780eec744eb9264fb1b03070;hpb=a1c7029f851cee985da0b9732412c53723dd39b3;p=tests.git diff --git a/system/TestResources.py b/system/TestResources.py index 9d95b1f..c7a298b 100644 --- a/system/TestResources.py +++ b/system/TestResources.py @@ -3,6 +3,7 @@ # import sys +import traceback import utils from TestMapper import TestMapper @@ -17,18 +18,24 @@ class TestResources: def localize (self,plcs,options): try: plcs = self.localize_qemus(plcs,options) - except: - print 'Could not localize qemus - exiting' + except Exception, e: + print '* Could not localize qemus','--',e,'--','exiting' + traceback.print_exc() sys.exit(1) try: plcs = self.localize_nodes(plcs,options) - except: - print 'Could not localize nodes - exiting' + except Exception,e: + print '* Could not localize nodes','--',e,'--','exiting' sys.exit(1) try: plcs = self.localize_plcs(plcs,options) - except: - print 'Could not localize plcs - exiting' + except Exception,e: + print '* Could not localize plcs','--',e,'--','exiting' + sys.exit(1) + try: + plcs = self.localize_rspec(plcs,options) + except Exception,e: + print '* Could not localize RSpec','--',e,'--','exiting' sys.exit(1) return plcs @@ -49,7 +56,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},) ] @@ -67,7 +75,7 @@ class TestResources: def localize_nodes (self, plcs, options): - + ip_pool = TestPoolIP (self.nodes_ip_pool(),options) network_dict = self.network_dict() @@ -78,10 +86,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, @@ -99,8 +107,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 @@ -112,20 +118,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 @@ -139,56 +154,89 @@ 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): + def trplc_make_space (self,plc): tracker = TrackerPlc(plc.options,instances=self.max_plcs()) - tracker.record(self.test_ssh.hostname,self.vservername) + tracker.make_space() tracker.store() return True - def trplc_free (self): - 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_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 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") + + for plc in plcs: + for site in plc['sites']: + for node in site['nodes']: + plc['sfa']['sfa_slice_rspec']['part4'] = node['node_fields']['hostname'] + 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_PLC_DB_HOST'] = plc['PLC_DB_HOST'] + plc['sfa']['SFA_PLC_URL'] = 'https://' + plc['PLC_API_HOST'] + ':443/PLCAPI/' + + return plcs