iotlab driver: Applying Jordan's changes in iotlabslices.py
[sfa.git] / sfa / iotlab / iotlabslices.py
index e486624..bf198f6 100644 (file)
@@ -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,11 +213,13 @@ 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:
@@ -235,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.
@@ -307,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:
 
@@ -335,8 +341,9 @@ class IotlabSlices:
                          'node_list': [],
                          'authority': slice_record['authority'],
                          'gid': slice_record['gid'],
-                         'slice_id': slice_record['record_id'],
-                         #'reg-researchers': slice_record['reg-researchers'],
+                         #'slice_id': slice_record['record_id'],
+                         'reg-researchers': slice_record['reg-researchers'],
+                         'urn': hrn_to_urn(slicename,'slice'),
                          #'peer_authority': str(sfa_peer)
                          }
 
@@ -356,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).
 
@@ -382,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))
@@ -422,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  "
@@ -433,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.
@@ -444,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 \
@@ -485,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
@@ -492,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 \
@@ -528,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: