X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fiotlab%2Fiotlabslices.py;h=bf198f601830770a14448d954079ad03d55f3932;hb=95015fd08e08729c3aaeec2c000995595ea7a7e0;hp=91d89ed2667c410a224e1b5f2fe5b767b08b7c11;hpb=a18309fad3730753e850b2993784bcc53b89c9c6;p=sfa.git diff --git a/sfa/iotlab/iotlabslices.py b/sfa/iotlab/iotlabslices.py index 91d89ed2..bf198f60 100644 --- a/sfa/iotlab/iotlabslices.py +++ b/sfa/iotlab/iotlabslices.py @@ -2,7 +2,7 @@ This file defines the IotlabSlices class by which all the slice checkings upon lease creation are done. """ -from sfa.util.xrn import get_authority, urn_to_hrn +from sfa.util.xrn import get_authority, urn_to_hrn, hrn_to_urn from sfa.util.sfalogging import logger MAXINT = 2L**31-1 @@ -165,6 +165,7 @@ class IotlabSlices: "%( start_time)) if start_time in current_nodes_reserved_by_start_time: + # JORDAN : if we request the same nodes: do nothing if requested_nodes_by_start_time[start_time] == \ current_nodes_reserved_by_start_time[start_time]: continue @@ -212,16 +213,20 @@ class IotlabSlices: job['hostname'], sfa_slice, int(job['start_time']), int(job['duration'])) - if job_id is not None: - new_leases = self.driver.GetLeases(login= - sfa_slice['login']) - for new_lease in new_leases: - leases.append(new_lease) + + # Removed by jordan + #if job_id is not None: + # new_leases = self.driver.GetLeases(login= + # sfa_slice['login']) + # for new_lease in new_leases: + # leases.append(new_lease) #Deleted leases are the ones with lease id not declared in the Rspec if deleted_leases: self.driver.testbed_shell.DeleteLeases(deleted_leases, - sfa_slice['user']['uid']) + sfa_slice['login']) + #self.driver.testbed_shell.DeleteLeases(deleted_leases, + # sfa_slice['user']['uid']) logger.debug("IOTLABSLICES \ verify_slice_leases slice %s deleted_leases %s" % (sfa_slice, deleted_leases)) @@ -233,7 +238,10 @@ class IotlabSlices: job['hostname'], sfa_slice, int(job['start_time']), int(job['duration'])) - return leases + + # Added by Jordan: until we find a better solution, always update the list of leases + return self.driver.GetLeases(login= sfa_slice['login']) + #return leases def verify_slice_nodes(self, sfa_slice, requested_slivers, peer): """Check for wanted and unwanted nodes in the slice. @@ -305,12 +313,12 @@ class IotlabSlices: """ slicename = slice_hrn + sfa_slice = None + # check if slice belongs to Iotlab slices_list = self.driver.GetSlices(slice_filter=slicename, slice_filter_type='slice_hrn') - sfa_slice = None - if slices_list: for sl in slices_list: @@ -333,9 +341,10 @@ class IotlabSlices: 'node_list': [], 'authority': slice_record['authority'], 'gid': slice_record['gid'], - 'slice_id': slice_record['record_id'], + #'slice_id': slice_record['record_id'], 'reg-researchers': slice_record['reg-researchers'], - 'peer_authority': str(sfa_peer) + 'urn': hrn_to_urn(slicename,'slice'), + #'peer_authority': str(sfa_peer) } if ldap_user: @@ -354,7 +363,7 @@ class IotlabSlices: return sfa_slice - def verify_persons(self, slice_hrn, slice_record, users, options={}): + def verify_persons(self, slice_hrn, slice_record, users, options=None): """Ensures the users in users list exist and are enabled in LDAP. Adds person if needed (AddPerson). @@ -380,7 +389,9 @@ class IotlabSlices: """ + slice_user = slice_record['user'] + if options is None: options={} logger.debug("IOTLABSLICES \tverify_persons \tslice_hrn %s \ \t slice_record %s\r\n users %s \t " % (slice_hrn, slice_record, users)) @@ -420,6 +431,8 @@ class IotlabSlices: #Check user i in LDAP with GetPersons #Needed because what if the user has been deleted in LDAP but #is still in SFA? + # GetPersons -> LdapFindUser -> _process_ldap_info_for_one_user + # XXX LOIC Fix in _process_ldap_info_for_one_user not to update user with hrn=None existing_users = self.driver.testbed_shell.GetPersons(filter_user) logger.debug(" \r\n IOTLABSLICES.PY \tverify_person filter_user %s\ existing_users %s " @@ -431,7 +444,7 @@ class IotlabSlices: users_dict[user['email']].update(user) existing_user_emails.append( users_dict[user['email']]['email']) - + logger.debug("User is in iotlab LDAP slice_record[user] = %s" % slice_user) # User from another known trusted federated site. Check # if a iotlab account matching the email has already been created. @@ -442,13 +455,13 @@ class IotlabSlices: else: req += users['email'] ldap_reslt = self.driver.testbed_shell.ldap.LdapSearch(req) - + logger.debug("LdapSearch slice_record[user] = %s" % slice_user) if ldap_reslt: logger.debug(" IOTLABSLICES.PY \tverify_person users \ USER already in Iotlab \t ldap_reslt %s \ " % (ldap_reslt)) existing_users.append(ldap_reslt[1]) - + logger.debug("ldap_reslt slice_record[user] = %s" % slice_user) else: #User not existing in LDAP logger.debug("IOTLABSLICES.PY \tverify_person users \ @@ -483,6 +496,7 @@ class IotlabSlices: #self.verify_keys(existing_slice_users, updated_users_list, \ #peer, append) + # XXX JORDAN the uid of the user is put in slice_record['login'] added_persons = [] # add new users #requested_user_email is in existing_user_emails @@ -490,7 +504,9 @@ class IotlabSlices: slice_record['login'] = users_dict[requested_user_emails[0]]['uid'] logger.debug(" IOTLABSLICES \tverify_person QUICK DIRTY %s" % (slice_record)) + # XXX JORDAN uid == 'register' + # XXX JORDAN i have no added_user_emails for added_user_email in added_user_emails: added_user = users_dict[added_user_email] logger.debug(" IOTLABSLICES \r\n \r\n \t verify_person \ @@ -501,8 +517,9 @@ class IotlabSlices: for k in k_list: if k in added_user: person[k] = added_user[k] - - person['pkey'] = added_user['keys'][0] + # bug user without key + if added_user['keys']: + person['pkey'] = added_user['keys'][0] person['mail'] = added_user['email'] person['email'] = added_user['email'] person['key_ids'] = added_user.get('key_ids', []) @@ -525,10 +542,11 @@ class IotlabSlices: return added_persons - def verify_keys(self, persons, users, peer, options={}): + def verify_keys(self, persons, users, peer, options=None): """ .. warning:: unused """ + if options is None: options={} # existing keys key_ids = [] for person in persons: