From: Sandrine Avakian Date: Tue, 16 Oct 2012 12:41:21 +0000 (+0200) Subject: Modified SFA Rspec format for requesting leases. X-Git-Tag: sfa-2.1-24~3^2~61 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=06e296b30d5533b36beb7ee0a49322617af4b579;p=sfa.git Modified SFA Rspec format for requesting leases. Propagating changes. --- diff --git a/sfa/rspecs/elements/versions/slabv1Node.py b/sfa/rspecs/elements/versions/slabv1Node.py index ce5a2152..ca217d24 100644 --- a/sfa/rspecs/elements/versions/slabv1Node.py +++ b/sfa/rspecs/elements/versions/slabv1Node.py @@ -187,6 +187,9 @@ class Slabv1Node: node['boot_state'] = 'boot' else: node['boot_state'] = 'disabled' + + logger.debug("SLABV1NODE \tget_nodes_objs \ + #nodes %s"%(nodes)) return nodes diff --git a/sfa/senslab/slabaggregate.py b/sfa/senslab/slabaggregate.py index 52c76bcf..a21b2980 100644 --- a/sfa/senslab/slabaggregate.py +++ b/sfa/senslab/slabaggregate.py @@ -60,8 +60,8 @@ class SlabAggregate: slices = self.driver.GetSlices(slice_filter= str(slice_name), \ slice_filter_type = 'slice_hrn') - logger.debug("Slabaggregate api \tget_slice_and_slivers slices %s " \ - %(slices)) + logger.debug("Slabaggregate api \tget_slice_and_slivers slices %s self.driver.hrn %s" \ + %(slices, self.driver.hrn)) if not slices: return (sfa_slice, slivers) #if isinstance(sfa_slice, list): @@ -75,13 +75,15 @@ class SlabAggregate: try: for node in sfa_slice['node_ids']: + sliver_xrn = Xrn(slice_urn, type='sliver', id=node) + sliver_xrn.set_authority(self.driver.hrn) #node_id = self.driver.root_auth + '.' + node_id - sliver = Sliver({'sliver_id': Xrn(slice_urn, type='slice', id=node['hostname'], authority=self.driver.hrn).urn, + sliver = Sliver({'sliver_id':sliver_xrn.urn, 'name': sfa_slice['slice_hrn'], 'type': 'slab-node', 'tags': []}) - slivers[node['hostname']] = sliver + slivers[node] = sliver except KeyError: logger.log_exc("SLABAGGREGATE \t \ get_slice_and_slivers KeyError ") @@ -165,10 +167,13 @@ class SlabAggregate: # Make a list of all the nodes in the slice before getting their attributes rspec_nodes = [] slice_nodes_list = [] + logger.debug("SLABAGGREGATE api get_rspec slice_nodes_list %s "\ + %(slices )) if slices: for one_slice in slices: - for node in one_slice['node_ids']: - slice_nodes_list.append(node['hostname']) + slice_nodes_list = one_slice['node_ids'] + #for node in one_slice['node_ids']: + #slice_nodes_list.append(node) reserved_nodes = self.driver.GetNodesCurrentlyInUse() logger.debug("SLABAGGREGATE api get_rspec slice_nodes_list %s "\ @@ -271,8 +276,8 @@ class SlabAggregate: for node in lease['reserved_nodes']: rspec_lease = Lease() rspec_lease['lease_id'] = lease['lease_id'] - site = node['site_id'] - slab_xrn = slab_xrn_object(self.driver.root_auth, node['hostname']) + #site = node['site_id'] + slab_xrn = slab_xrn_object(self.driver.root_auth, node) rspec_lease['component_id'] = slab_xrn.urn #rspec_lease['component_id'] = hostname_to_urn(self.driver.hrn, \ #site, node['hostname']) diff --git a/sfa/senslab/slabdriver.py b/sfa/senslab/slabdriver.py index 9bd11ac0..c8b58dff 100644 --- a/sfa/senslab/slabdriver.py +++ b/sfa/senslab/slabdriver.py @@ -212,6 +212,7 @@ class SlabDriver(Driver): # add/remove leases requested_lease_list = [] kept_leases = [] + logger.debug("SLABDRIVER.PY \tcreate_sliver AVANTLEASE " ) for lease in rspec.version.get_leases(): single_requested_lease = {} logger.debug("SLABDRIVER.PY \tcreate_sliver lease %s " %(lease)) @@ -225,6 +226,7 @@ class SlabDriver(Driver): if single_requested_lease.get('hostname'): requested_lease_list.append(single_requested_lease) + logger.debug("SLABDRIVER.PY \tcreate_sliver APRESLEASE" ) #dCreate dict of leases by start_time, regrouping nodes reserved #at the same #time, for the same amount of time = one job on OAR @@ -661,16 +663,15 @@ class SlabDriver(Driver): for node in full_nodes_dict_list: oar_id_node_dict[node['oar_id']] = node - logger.debug("SLABDRIVER \t __get_hostnames_from_oar_node_ids\ - oar_id_node_dict %s" %(oar_id_node_dict)) + #logger.debug("SLABDRIVER \t __get_hostnames_from_oar_node_ids\ + #oar_id_node_dict %s" %(oar_id_node_dict)) hostname_dict_list = [] for resource_id in resource_id_list: #Because jobs requested "asap" do not have defined resources if resource_id is not "Undefined": - hostname_dict_list.append({'hostname' : \ - oar_id_node_dict[resource_id]['hostname'], - 'site_id' : oar_id_node_dict[resource_id]['site']}) + hostname_dict_list.append(\ + oar_id_node_dict[resource_id]['hostname']) #hostname_list.append(oar_id_node_dict[resource_id]['hostname']) return hostname_dict_list @@ -697,7 +698,7 @@ class SlabDriver(Driver): """ node_dict_by_id = self.oar.parser.SendRequest("GET_resources_full") node_dict_list = node_dict_by_id.values() - + logger.debug (" SLABDRIVER GetNodes node_filter_dict %s return_fields_list %s "%(node_filter_dict,return_fields_list)) #No filtering needed return the list directly if not (node_filter_dict or return_fields_list): return node_dict_list @@ -828,8 +829,14 @@ class SlabDriver(Driver): #the slice record - + slicerec_dict['oar_job_id'] = lease['lease_id'] + #reserved_list = [] + #for reserved_node in lease['reserved_nodes']: + #reserved_list.append(reserved_node['hostname']) + reserved_list = lease['reserved_nodes'] + #slicerec_dict.update({'node_ids':[lease['reserved_nodes'][n]['hostname'] for n in lease['reserved_nodes']]}) + slicerec_dict.update({'list_node_ids':{'hostname':reserved_list}}) slicerec_dict.update({'node_ids':lease['reserved_nodes']}) slicerec_dict.update(fixed_slicerec_dict) slicerec_dict.update({'hrn':\ @@ -837,7 +844,7 @@ class SlabDriver(Driver): slicerec_dictlist.append(slicerec_dict) - logger.debug("SLABDRIVER.PY \tGetSlices slicerec_dict %s slicerec_dictlist %s" %(slicerec_dict, slicerec_dictlist)) + logger.debug("SLABDRIVER.PY \tGetSlices slicerec_dict %s slicerec_dictlist %s lease['reserved_nodes'] %s" %(slicerec_dict, slicerec_dictlist,lease['reserved_nodes'] )) logger.debug("SLABDRIVER.PY \tGetSlices RETURN slicerec_dictlist %s"\ %(slicerec_dictlist)) @@ -862,7 +869,13 @@ class SlabDriver(Driver): for lease in leases_list: if owner == lease['user']: slicerec_dict['oar_job_id'] = lease['lease_id'] + reserved_list = [] + for reserved_node in lease['reserved_nodes']: + reserved_list.append(reserved_node['hostname']) + #slicerec_dict.update({'node_ids':{'hostname':reserved_list}}) + #slicerec_dict.update({'node_ids':[lease['reserved_nodes'][n]['hostname'] for n in lease['reserved_nodes']]}) slicerec_dict.update({'node_ids':lease['reserved_nodes']}) + slicerec_dict.update({'list_node_ids':{'hostname':reserved_list}}) slicerec_dict.update(fixed_slicerec_dict) slicerec_dict.update({'hrn':\ str(fixed_slicerec_dict['slice_hrn'])}) @@ -1143,9 +1156,9 @@ class SlabDriver(Driver): %( hostname_list, slice_record , lease_start_time, \ lease_duration)) - tmp = slice_record['PI'][0].split(".") + tmp = slice_record['reg-researchers'][0].split(".") username = tmp[(len(tmp)-1)] - self.LaunchExperimentOnOAR(hostname_list, slice_record['name'], lease_start_time, lease_duration, username) + self.LaunchExperimentOnOAR(hostname_list, slice_record['slice_hrn'], lease_start_time, lease_duration, username) start_time = datetime.fromtimestamp(int(lease_start_time)).strftime(self.time_format) logger.debug("SLABDRIVER \t AddLeases hostname_list start_time %s " %(start_time)) @@ -1213,7 +1226,7 @@ class SlabDriver(Driver): for node in resa['reserved_nodes']: #resa['component_id_list'].append(hostname_to_urn(self.hrn, \ #self.root_auth, node['hostname'])) - slab_xrn = slab_xrn_object(self.root_auth, node['hostname']) + slab_xrn = slab_xrn_object(self.root_auth, node) resa['component_id_list'].append(slab_xrn.urn) #Filter the reservation list if necessary diff --git a/sfa/senslab/slabslices.py b/sfa/senslab/slabslices.py index f8815b11..4c6322b1 100644 --- a/sfa/senslab/slabslices.py +++ b/sfa/senslab/slabslices.py @@ -137,11 +137,14 @@ class SlabSlices: #First get the list of current leases from OAR - leases = self.driver.GetLeases({'name':sfa_slice['name']}) + leases = self.driver.GetLeases({'name':sfa_slice['slice_hrn']}) + logger.debug("SLABSLICES verify_slice_leases requested_jobs_dict %s leases %s "%(requested_jobs_dict, leases )) #leases = self.driver.GetLeases({'name':sfa_slice['name']},\ #['lease_id']) if leases : current_leases = [lease['lease_id'] for lease in leases] + logger.debug("SLABSLICES verify_slice_leases current_leases %s kept_leases %s requested_jobs_dict %s"\ + %(current_leases,kept_leases,requested_jobs_dict)) #Deleted leases are the ones with lease id not declared in the Rspec deleted_leases = list(set(current_leases).difference(kept_leases)) @@ -154,9 +157,12 @@ class SlabSlices: #Commented out UnBindObjectFromPeer SA 09/10/12 #self.driver.UnBindObjectFromPeer('senslab2', 'slice', \ #sfa_slice['record_id_slice'], peer.hrn) - + logger.debug("SLABSLICES verify_slice_leases slice %s deleted_leases %s"\ + %(sfa_slice, deleted_leases)) self.driver.DeleteLeases(deleted_leases, \ sfa_slice['name']) + #self.driver.DeleteLeases(deleted_leases, \ + #sfa_slice['name']) #TODO verify_slice_leases: catch other exception? except KeyError: @@ -174,9 +180,9 @@ class SlabSlices: def verify_slice_nodes(self, sfa_slice, requested_slivers, peer): current_slivers = [] deleted_nodes = [] - - if sfa_slice['node_ids']: - nodes = self.driver.GetNodes(sfa_slice['node_ids'], ['hostname']) + + if 'node_ids' in sfa_slice: + nodes = self.driver.GetNodes(sfa_slice['list_node_ids'], ['hostname']) current_slivers = [node['hostname'] for node in nodes] # remove nodes not in rspec @@ -192,8 +198,10 @@ class SlabSlices: %(sfa_slice,deleted_nodes)) if deleted_nodes: - self.driver.DeleteSliceFromNodes(sfa_slice['name'], \ - deleted_nodes) + #Delete the entire experience + self.driver.DeleteSliceFromNodes(sfa_slice) + #self.driver.DeleteSliceFromNodes(sfa_slice['slice_hrn'], \ + #deleted_nodes) return nodes