Merge branch 'iotlab_fixes' into geni-v3
authorLoic Baron <sandrine.avakian@inria.fr>
Wed, 30 Jul 2014 14:40:15 +0000 (16:40 +0200)
committerLoic Baron <sandrine.avakian@inria.fr>
Wed, 30 Jul 2014 14:40:15 +0000 (16:40 +0200)
Conflicts:
sfa/iotlab/OARrestapi.py
sfa/iotlab/iotlabaggregate.py
sfa/iotlab/iotlabdriver.py
sfa/iotlab/iotlabshell.py
sfa/iotlab/iotlabslices.py

sfa/iotlab/LDAPapi.py
sfa/iotlab/OARrestapi.py
sfa/iotlab/iotlabaggregate.py
sfa/iotlab/iotlabdriver.py
sfa/iotlab/iotlabshell.py
sfa/iotlab/iotlabslices.py

index 32dbe95..7c3deb6 100644 (file)
@@ -946,7 +946,10 @@ class LDAPapi:
 
         parent_hrn = None
         peer_authority = None
-        if 'hrn' in record:
+        # If the user is coming from External authority (e.g. OneLab)
+        # Then hrn is None, it should be filled in by the creation of Ldap User
+        # XXX LOIC !!! What if a user email is in 2 authorities? 
+        if 'hrn' in record and record['hrn'] is not None:
             hrn = record['hrn']
             parent_hrn = get_authority(hrn)
             if parent_hrn != self.authname:
@@ -957,25 +960,39 @@ class LDAPapi:
             #then the login is different from the one found in its hrn
             if tmpname != hrn.split('.')[1]:
                 hrn = None
+            results = {
+                'type': 'user',
+                'pkey': ldapentry['sshPublicKey'],
+                #'uid': ldapentry[1]['uid'][0],
+                'uid': tmpname,
+                'email': tmpemail,
+                #'email': ldapentry[1]['mail'][0],
+                'first_name': ldapentry['givenName'][0],
+                'last_name': ldapentry['sn'][0],
+                #'phone': 'none',
+                'serial': 'none',
+                'authority': parent_hrn,
+                'peer_authority': peer_authority,
+                'pointer': -1,
+                'hrn': hrn,
+             }
         else:
-            hrn = None
-
-        results = {
-            'type': 'user',
-            'pkey': ldapentry['sshPublicKey'],
-            #'uid': ldapentry[1]['uid'][0],
-            'uid': tmpname,
-            'email': tmpemail,
-            #'email': ldapentry[1]['mail'][0],
-            'first_name': ldapentry['givenName'][0],
-            'last_name': ldapentry['sn'][0],
-            #'phone': 'none',
-            'serial': 'none',
-            'authority': parent_hrn,
-            'peer_authority': peer_authority,
-            'pointer': -1,
-            'hrn': hrn,
-                    }
+            #hrn = None
+            results = {
+                'type': 'user',
+                'pkey': ldapentry['sshPublicKey'],
+                #'uid': ldapentry[1]['uid'][0],
+                'uid': tmpname,
+                'email': tmpemail,
+                #'email': ldapentry[1]['mail'][0],
+                'first_name': ldapentry['givenName'][0],
+                'last_name': ldapentry['sn'][0],
+                #'phone': 'none',
+                'serial': 'none',
+                'authority': parent_hrn,
+                'peer_authority': peer_authority,
+                'pointer': -1,
+            }
         return results
 
     def LdapFindUser(self, record=None, is_user_enabled=None,
@@ -1018,6 +1035,7 @@ class LDAPapi:
             return None
         #Asked for a specific user
         if record is not None:
+            logger.debug("LOIC - record = %s" % record)
             results = self._process_ldap_info_for_one_user(record, result_data)
 
         else:
index 575473d..c612e47 100644 (file)
@@ -228,7 +228,7 @@ class OARrestapi:
         #                    % (error))
             #raise ServerError("GET_OAR_SRVR : Could not reach OARserver")
         if resp.status >= 400:
-            raise ValueError ("Response Error %s, %s, %s" %(resp.status,
+            raise ValueError ("Response Error %s, %s" %(resp.status,
                 resp.reason, resp.read()))
         try:
             js_dict = json.loads(body)
@@ -261,7 +261,6 @@ class OARrestapi:
                                                 str(datadict['strval']))
             del datadict['strval']
 
-        logger.debug("JORDAN USERNAME FOR OAR QUERY: %r to server %r" % (username, self.oarserver))
         data = json.dumps(datadict)
         headers = {'X-REMOTE_IDENT':username, \
                 'content-type': self.POST_FORMAT['json']['content'], \
@@ -287,7 +286,7 @@ class OARrestapi:
             conn.close()
 
         if resp.status >= 400:
-            raise ValueError ("Response Error %s, %s: %r" %(resp.status,
+            raise ValueError ("Response Error %s, %s" %(resp.status,
                 resp.reason, body))
 
 
index 7b456ee..e113d8e 100644 (file)
@@ -405,9 +405,8 @@ class IotlabAggregate:
         if options is None: options={}
         filter={}
         if slice:
-           #filter.update({'name':slice['slice_name']}) # JORDAN: this is = "upmc" !!!
            filter.update({'slice_hrn':slice['slice_hrn']}) # JORDAN: this is = "upmc" !!!
-            # slice_hrn = "ple.upmc.myslicedemo
+           #filter.update({'name':slice['slice_name']})
         #return_fields = ['lease_id', 'hostname', 'site_id', 'name', 't_from', 't_until']
         leases = self.driver.GetLeases(lease_filter_dict=filter)
         grain = self.driver.testbed_shell.GetLeaseGranularity()
@@ -616,7 +615,7 @@ class IotlabAggregate:
 
         .. seealso:: http://groups.geni.net/geni/wiki/GAPI_AM_API_V3/CommonConcepts#urns
         """
-
+        # JORDAN using SLICE_KEY for slice_hrn
         SLICE_KEY = 'slice_hrn' # slice_hrn
         if options is None: options={}
         slice_ids = set()
@@ -653,7 +652,7 @@ class IotlabAggregate:
         #     filter['slice_id'] = list(slice_ids)
         # # get slices
         if slice_hrn:
-            logger.debug("JORDAN SLICE_HRN=%r" % slice_hrn)
+            #logger.debug("JORDAN SLICE_HRN=%r" % slice_hrn)
             slices = self.driver.GetSlices(slice_hrn,
                 slice_filter_type)
             leases = self.driver.GetLeases({SLICE_KEY:slice_hrn})
@@ -662,16 +661,16 @@ class IotlabAggregate:
         if not slices:
             return []
 
-        logger.debug("LOIC SLICES = %r" % slices)
         single_slice = slices[0]
         # get sliver users
-
         # XXX LOIC !!! XXX QUICK AND DIRTY - Let's try...
         logger.debug("LOIC Number of reg_researchers = %s" % len(single_slice['reg_researchers']))
         if 'reg_researchers' in single_slice and len(single_slice['reg_researchers'])==0:
             user = {'uid':single_slice['user']}
         else:
             user = single_slice['reg_researchers'][0].__dict__
+
+        user = single_slice['reg_researchers'][0].__dict__
         logger.debug("IotlabAggregate \t get_slivers user %s \
                        \r\n" % (user))
 
@@ -681,7 +680,6 @@ class IotlabAggregate:
                        \r\n" % (person))
         # name = person['last_name']
         user['login'] = person['uid']
-
         # XXX LOIC !!! if we have more info, let's fill user
         if 'hrn' in user:
             user['user_urn'] = hrn_to_urn(user['hrn'], 'user')
@@ -722,7 +720,7 @@ class IotlabAggregate:
                 #    logger.debug("Ignored missing hostname for now one")
                 # oar_job_id is the slice_id (lease_id)
                 sliver_hrn = '%s.%s-%s' % (self.driver.hrn,
-                            current_lease['lease_id'], node_id)
+                             current_lease['lease_id'], node_id)
                 node['node_id'] = node_id
                 node['expires'] = current_lease['t_until']
                 node['sliver_id'] = Xrn(sliver_hrn, type='sliver').urn
@@ -828,7 +826,6 @@ class IotlabAggregate:
         # get slivers
         geni_slivers = []
         slivers = self.get_slivers(urns, options)
-        logger.debug("SLIVERS=%r" % slivers)
         if slivers:
             rspec_expires = datetime_to_string(utcparse(slivers[0]['expires']))
         else:
@@ -846,9 +843,10 @@ class IotlabAggregate:
             geni_urn = sliver_allocation.slice_urn
             sliver_allocation_dict[sliver_allocation.sliver_id] = \
                                                             sliver_allocation
+        # JORDAN get the option list_leases if we want to have the leases in describe 
         show_leases = options.get('list_leases')
         if show_leases in ['resources', 'all']:
-        #if not options.get('list_leases') or options['list_leases'] != 'leases':                                                    
+        #if not options.get('list_leases') or options['list_leases'] != 'leases': 
             # add slivers
             nodes_dict = {}
             for sliver in slivers:
@@ -863,7 +861,6 @@ class IotlabAggregate:
                 geni_slivers.append(geni_sliver)
             rspec.version.add_nodes(rspec_nodes)
 
-        logger.debug("SHOW LEASES = %r" % show_leases)
         if show_leases in ['leases', 'all']:
         #if not options.get('list_leases') or options['list_leases'] == 'resources':
             if slivers:
index aaeb36b..016249b 100644 (file)
@@ -135,7 +135,7 @@ class IotlabDriver(Driver):
 
 
 
-    def AddPerson(self, record, add_to_ldap = True):
+    def AddPerson(self, record):
         """
 
         Adds a new account. Any fields specified in records are used,
@@ -150,10 +150,6 @@ class IotlabDriver(Driver):
         :rtype: dict
 
         """
-        if not add_to_ldap:
-            ret = self.__add_person_to_db(record)
-            return ret
-
         ret = self.testbed_shell.ldap.LdapAddUser(record)
 
         if ret['bool'] is True:
@@ -177,7 +173,6 @@ class IotlabDriver(Driver):
         """
         query = self.api.dbsession().query(RegUser)
         check_if_exists = query.filter_by(email = user_dict['email']).first()
-        logger.debug("LOIC __add_person_to_db %s" % check_if_exists)
         #user doesn't exists
         if not check_if_exists:
             logger.debug("__add_person_to_db \t Adding %s \r\n \r\n \
@@ -310,7 +305,6 @@ class IotlabDriver(Driver):
         .. seealso::_sql_get_slice_info_from_user
         .. seealso:: _sql_get_slice_info
         """
-        logger.debug("JORDAN get_slice_records slice_filter=%r slice_filter_type=%r" % (slice_filter, slice_filter_type))
 
         #Get list of slices based on the slice hrn
         if slice_filter_type == 'slice_hrn':
@@ -369,10 +363,8 @@ class IotlabDriver(Driver):
 
         #First try to get information on the slice based on the filter provided
         if slice_filter_type in authorized_filter_types_list:
-            logger.debug("JORDAN GET SLICES 1")
             fixed_slicerec_dict = self._get_slice_records(slice_filter,
                                                     slice_filter_type)
-            logger.debug("JORDAN GET SLICE RECORDS %r" % fixed_slicerec_dict)
             # if the slice was not found in the sfa db
             if fixed_slicerec_dict is None:
                 return return_slicerec_dictlist
@@ -394,14 +386,12 @@ class IotlabDriver(Driver):
             #If no job is running or no job scheduled
             #return only the slice record
             if leases_list == [] and fixed_slicerec_dict:
-                logger.debug("JORDAN CASE 1")
                 return_slicerec_dictlist.append(fixed_slicerec_dict)
 
             # if the jobs running don't belong to the user/slice we are looking
             # for
             leases_hrn = [lease['slice_hrn'] for lease in leases_list]
             if slice_hrn not in leases_hrn:
-                logger.debug("JORDAN CASE 2")
                 return_slicerec_dictlist.append(fixed_slicerec_dict)
             #If several jobs for one slice , put the slice record into
             # each lease information dict
@@ -446,7 +436,6 @@ class IotlabDriver(Driver):
 
 
         else:
-            logger.debug("JORDAN GET SLICES 2")
             #Get all slices from the iotlab sfa database ,
             #put them in dict format
             #query_slice_list = dbsession.query(RegRecord).all()
@@ -723,10 +712,7 @@ class IotlabDriver(Driver):
         self.api.dbsession().add(sfa_record)
         self.api.dbsession().commit()
         #Update the reg-researchers dependency table
-        if user_record is not None:
-            sfa_record.reg_researchers = [user_record]
-        else:
-            sfa_record.reg_researchers = slice_record['reg-researchers']
+        sfa_record.reg_researchers = [user_record]
         self.api.dbsession().commit()
 
         return
@@ -1419,8 +1405,7 @@ class IotlabDriver(Driver):
         rspec =  aggregate.list_resources(version=version, options=options)
         return rspec
 
-    def describe(self, urns, version, options=None):
-        if options is None: options={}
+    def describe(self, urns, version, options={}):
         aggregate = IotlabAggregate(self)
         return aggregate.describe(urns, version=version, options=options)
 
@@ -1485,15 +1470,6 @@ class IotlabDriver(Driver):
         # ensure site record exists
 
         # ensure person records exists
-
-        # oui c'est degueulasse, le slice_record se retrouve modifie
-        # dans la methode avec les infos du user, els infos sont propagees
-        # dans verify_slice_leases
-        logger.debug("IOTLABDRIVER.PY  BEFORE slices.verify_persons")
-        # XXX JORDAN XXX slice_record devrait recevoir le caller_xrn...
-        logger.debug("LOIC users = %r" % users)
-        # XXX LOIC XXX Trying here to bypass the verify_persons function
-        # But it doesn't work, It seems we have to add users in LDAP anyway...
         for user in users:
             # XXX LOIC using hrn is a workaround because the function 
             # Xrn.get_urn returns 'urn:publicid:IDN+onelab:upmc+timur_friedman'
@@ -1510,23 +1486,28 @@ class IotlabDriver(Driver):
                 #slice_record['login'] = user['login']
                 slice_record['user']=user
 
-        # XXX LOIC XXX Need to re-activate this function and understand exactly what is required
+        # oui c'est degueulasse, le slice_record se retrouve modifie
+        # dans la methode avec les infos du user, els infos sont propagees
+        # dans verify_slice_leases
+        logger.debug("IOTLABDRIVER.PY  BEFORE slices.verify_persons")
 
-        persons = slices.verify_persons(xrn.hrn, slice_record, [slice_record['user']], options=options)
+        # XXX JORDAN XXX slice_record devrait recevoir le caller_xrn...
+        # LOIC maintenant c'est fait au dessus
+        logger.debug("LOIC - slice_record[user] = %s" % slice_record['user'])
+        persons = slices.verify_persons(xrn.hrn, slice_record, users,
+                                        options=options)
         logger.debug("IOTLABDRIVER.PY  AFTER slices.verify_persons")
-        logger.debug("LOIC - IOTLABDRIVER.PY - AFTER slices.verify_persons slice_record = %r" % slice_record)
-        # ensure slice attributes exists
-        # XXX LOIC XXX This method doesn't exist !!!
-        #slices.verify_slice_attributes(slice, requested_attributes, options=options)
+        logger.debug("LOIC - slice_record[user] = %s" % slice_record['user'])
 
-        # XXX LOIC !!! Essayons d'inverser : d'abord verify_persons ensuite verify_slice
-        
         # ensure slice record exists
-        # XXX LOIC !!! verify_slice uniquement pour iotlab - les slices externes ne doivent pas être vérifiés = Ils ne sont pas dans le registry IOTLAB
-        current_slice = None
-        #current_slice = slices.verify_slice(xrn.hrn, slice_record, sfa_peer)
-        #logger.debug("IOTLABDRIVER.PY \t ===============allocate \t\
-        #                    \r\n \r\n  current_slice %s" % (current_slice))
+        current_slice = slices.verify_slice(xrn.hrn, slice_record, sfa_peer)
+        logger.debug("LOIC - AFTER verify_slice - slice_record[user] = %s" % slice_record['user'])
+        logger.debug("IOTLABDRIVER.PY \t ===============allocate \t\
+                            \r\n \r\n  current_slice %s" % (current_slice))
+
+        # ensure slice attributes exists
+        # slices.verify_slice_attributes(slice, requested_attributes,
+                                    # options=options)
 
         # add/remove slice from nodes
         # XXX JORDAN ensure requested_xp_dict returns a dict with all new leases
@@ -1536,6 +1517,7 @@ class IotlabDriver(Driver):
                      % (requested_xp_dict))
         request_nodes = rspec.version.get_nodes_with_slivers()
 
+
         # JORDAN: nodes_list will contain a list of newly allocated nodes
         nodes_list = []
         for start_time in requested_xp_dict:
@@ -1557,43 +1539,28 @@ class IotlabDriver(Driver):
         logger.debug("IOTLABDRIVER.PY \tallocate leases  %s \
                         rspec_requested_leases %s" % (leases,
                         rspec_requested_leases))
-
-        # XXX LOIC !!! What is in the slice_record?
-        # Where is affected reg_researchers value???
-        logger.debug("LOIC - IOTLABDRIVER.PY - After verify_slice_leases slice_record = %r" %slice_record)
         # update sliver allocations
         # JORDAN Here we loop over newly allocated nodes
         for hostname in nodes_list:
-            logger.debug("FORLOOP JORDAN hostname=%r" % hostname)
             client_id = hostname
             node_urn = xrn_object(self.testbed_shell.root_auth, hostname).urn
             component_id = node_urn
-            if current_slice is not None:
-                if 'reg-urn' in current_slice:
-                    slice_urn = current_slice['reg-urn']
-                else:
-                    slice_urn = current_slice['urn']
+            if 'reg-urn' in current_slice:
+                slice_urn = current_slice['reg-urn']
             else:
-                slice_urn = slice_record['urn']
+                slice_urn = current_slice['urn']
+
             # JORDAN: We loop over leases previously in the slice
-            for lease in leases: # rspec_requested_leases ?????? XXX
-                logger.debug("FOR LEASE LOOP JORDAN lease=%r" % lease)
-                logger.debug("JORDAN hostname=%r lease['reserved_nodes']=%r, bool=%r" % (hostname, lease['reserved_nodes'], hostname in lease['reserved_nodes']))
+            for lease in leases:
                 if hostname in lease['reserved_nodes']:
-                    logger.debug("JORDAN IF OK")
                     index = lease['reserved_nodes'].index(hostname)
-                    logger.debug("JORDAN index=%r" % index)
                     sliver_hrn = '%s.%s-%s' % (self.hrn, lease['lease_id'],
                                    lease['resource_ids'][index] )
-
-                    logger.debug("LOIC sliver_hrn=%r" % sliver_hrn)
                     sliver_id = Xrn(sliver_hrn, type='sliver').urn
-
-                    logger.debug("LOIC sliver_id=%r" % sliver_id)
                     record = SliverAllocation(sliver_id=sliver_id, client_id=client_id,
-                                              component_id=component_id,
-                                              slice_urn = slice_urn,
-                                              allocation_state='geni_allocated')
+                                      component_id=component_id,
+                                      slice_urn = slice_urn,
+                                      allocation_state='geni_allocated')
                     record.sync(self.api.dbsession())
 
         # JORDAN : added describe_options which was not specified at all
@@ -1610,7 +1577,6 @@ class IotlabDriver(Driver):
         aggregate = IotlabAggregate(self)
         slivers = aggregate.get_slivers(urns)
         current_slice = slivers[0]
-        logger.debug("Provision current slice: %r" % (current_slice,))
         peer = slices.get_peer(current_slice['hrn'])
         sfa_peer = slices.get_sfa_peer(current_slice['hrn'])
         users = options.get('geni_users', [])
index 990561c..34de4b1 100644 (file)
@@ -498,6 +498,7 @@ class IotlabShell():
             # Put the duration in seconds first
             #desired_walltime = duration * 60
             desired_walltime = duration
+            # JORDAN : removed the 4 minutes added by default in iotlab
             # XXX total_walltime = desired_walltime + 240 #+4 min Update SA 23/10/12
             total_walltime = desired_walltime # Needed to have slots aligned in MySlice (temp fix) # JA 11/07/2014
             sleep_walltime = desired_walltime  # 0 sec added Update SA 23/10/12
index 3b4258f..bf198f6 100644 (file)
@@ -135,7 +135,6 @@ class IotlabSlices:
                 * self.driver.testbed_shell.GetLeaseGranularity())
             if job['duration'] < \
                     self.driver.testbed_shell.GetLeaseGranularity():
-                logger.debug("JORDAN removed too short lease !!!! %r" % (requested_jobs_dict[job['start_time']],))
                 del requested_jobs_dict[job['start_time']]
 
         #Requested jobs
@@ -214,6 +213,7 @@ class IotlabSlices:
                     job['hostname'],
                     sfa_slice, int(job['start_time']),
                     int(job['duration']))
+
                 # Removed by jordan
                 #if job_id is not None:
                 #    new_leases = self.driver.GetLeases(login=
@@ -232,7 +232,6 @@ class IotlabSlices:
                          % (sfa_slice, deleted_leases))
 
         if reschedule_jobs_dict:
-            logger.debug("JORDAN re-schedule jobs: %r" % (reschedule_jobs_dict,))
             for start_time in reschedule_jobs_dict:
                 job = reschedule_jobs_dict[start_time]
                 self.driver.AddLeases(
@@ -317,89 +316,50 @@ class IotlabSlices:
         sfa_slice = None
 
         # check if slice belongs to Iotlab
-        if slicename.startswith("iotlab"):
-            slices_list = self.driver.GetSlices(slice_filter=slicename,
-                                                slice_filter_type='slice_hrn')
-
+        slices_list = self.driver.GetSlices(slice_filter=slicename,
+                                            slice_filter_type='slice_hrn')
 
-            if slices_list:
-                for sl in slices_list:
+        if slices_list:
+            for sl in slices_list:
 
-                    logger.debug("IOTLABSLICES \t verify_slice slicename %s \
-                                    slices_list %s sl %s \r slice_record %s"
-                                 % (slicename, slices_list, sl, slice_record))
-                    sfa_slice = sl
-                    sfa_slice.update(slice_record)
+                logger.debug("IOTLABSLICES \t verify_slice slicename %s \
+                                slices_list %s sl %s \r slice_record %s"
+                             % (slicename, slices_list, sl, slice_record))
+                sfa_slice = sl
+                sfa_slice.update(slice_record)
 
-            else:
-                #Search for user in ldap based on email SA 14/11/12
-                ldap_user = self.driver.testbed_shell.ldap.LdapFindUser(\
-                                                        slice_record['user'])
-                logger.debug(" IOTLABSLICES \tverify_slice Oups \
-                            slice_record %s sfa_peer %s ldap_user %s"
-                            % (slice_record, sfa_peer, ldap_user))
-                #User already registered in ldap, meaning user should be in SFA db
-                #and hrn = sfa_auth+ uid
-                sfa_slice = {'hrn': slicename,
-                             'node_list': [],
-                             'authority': slice_record['authority'],
-                             'gid': slice_record['gid'],
-                             'slice_id': slice_record['record_id'],
-                             'urn': hrn_to_urn(slicename,'slice'),
-                             'reg-researchers': slice_record['reg-researchers'],
-                             #'peer_authority': str(sfa_peer)
-                             }
-
-                if ldap_user:
-                    hrn = self.driver.testbed_shell.root_auth + '.' \
-                                                    + ldap_user['uid']
-                    # Registry returns a user record from get_user_record 
-                    user = self.driver.get_user_record(hrn)
-
-                    logger.debug(" IOTLABSLICES \tverify_slice hrn %s USER %s"
-                                 % (hrn, user))
-
-                     # add the external slice to the local SFA iotlab DB
-                    if sfa_slice:
-                        self.driver.AddSlice(sfa_slice, user)
-
-                logger.debug("IOTLABSLICES \tverify_slice ADDSLICE OK")
         else:
+            #Search for user in ldap based on email SA 14/11/12
+            ldap_user = self.driver.testbed_shell.ldap.LdapFindUser(\
+                                                    slice_record['user'])
+            logger.debug(" IOTLABSLICES \tverify_slice Oups \
+                        slice_record %s sfa_peer %s ldap_user %s"
+                        % (slice_record, sfa_peer, ldap_user))
+            #User already registered in ldap, meaning user should be in SFA db
+            #and hrn = sfa_auth+ uid
             sfa_slice = {'hrn': slicename,
-             'node_list': [],
-             'authority': slice_record['authority'],
-             'gid': slice_record['gid'],
-             'urn': hrn_to_urn(slicename,'slice'),
-             #'slice_id': slice_record['record_id'],
-             'reg-researchers': slice_record['reg-researchers'],
-             #'peer_authority': str(sfa_peer)
-            }
-
-
-            # JORDAN
-            logger.debug("JORDAN ADDSLICE")
-            logger.debug("ADDSLICE user hrn = %s" % slice_record['user']['hrn'])
-            # XXX LOIC !!! searching in IOTLAB DB because has been added in verify_persons
-            user = self.driver.get_user_record(slice_record['user']['hrn'])
-
-            logger.debug("LOIC ADDSLICE Search in IOTLAB DB for user = %s" % user)
-            # XXX LOIC !!! not searching in LDAP because this has been done in verify_persons
-            #ldap_user = self.driver.testbed_shell.ldap.LdapFindUser(\
-            #                                        slice_record['user'])
-            #if ldap_user:
-            #    hrn = self.driver.testbed_shell.root_auth + '.' \
-            #                                    + ldap_user['uid']
-            #    user = self.driver.get_user_record(hrn)
-            #    logger.debug(" IOTLAB SLICES JORDAN user: %r %r " % (user, hrn))
-
-            #    logger.debug(" IOTLABSLICES \tverify_slice hrn %s USER %s"
-            #                 % (hrn, user))
-
-            # add the external slice to the local SFA iotlab DB
-            if sfa_slice:
-                self.driver.AddSlice(sfa_slice, user)
-                logger.debug("IOTLABSLICES \tverify_slice ADDSLICE OK")
-
+                         'node_list': [],
+                         'authority': slice_record['authority'],
+                         'gid': slice_record['gid'],
+                         #'slice_id': slice_record['record_id'],
+                         'reg-researchers': slice_record['reg-researchers'],
+                         'urn': hrn_to_urn(slicename,'slice'),
+                         #'peer_authority': str(sfa_peer)
+                         }
+
+            if ldap_user:
+                hrn = self.driver.testbed_shell.root_auth + '.' \
+                                                + ldap_user['uid']
+                user = self.driver.get_user_record(hrn)
+
+                logger.debug(" IOTLABSLICES \tverify_slice hrn %s USER %s"
+                             % (hrn, user))
+
+                 # add the external slice to the local SFA iotlab DB
+                if sfa_slice:
+                    self.driver.AddSlice(sfa_slice, user)
+
+            logger.debug("IOTLABSLICES \tverify_slice ADDSLICE OK")
         return sfa_slice
 
 
@@ -429,6 +389,8 @@ 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  "
@@ -469,18 +431,20 @@ 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  "
                         % (filter_user, existing_users))
-            # User is in iotlab LDAP
-            # XXX LOIC !!! user is existing in iotlab LDAP but coming from OneLab portal
-            if existing_users and slice_hrn.startswith("iotlab"):
+            #User is in iotlab LDAP
+            if existing_users:
                 for user in existing_users:
                     user['login'] = user['uid']
                     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.
@@ -488,45 +452,22 @@ class IotlabSlices:
                 req = 'mail='
                 if isinstance(users, list):
                     req += users[0]['email']
-                    user = users[0]
                 else:
                     req += users['email']
-                    user = users
                 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])
-                    # XXX LOIC !!! Not sure why we use to take the element 1
-                    if len(ldap_reslt)>0:
-                        ldap_reslt = ldap_reslt[0]
-                        logger.debug(ldap_reslt)
-                        if len(ldap_reslt)>1:
-                            ldap_reslt = ldap_reslt[1]
-                            logger.debug("LOIC - iotlabslices.py - ldap_reslt = %s" % (ldap_reslt))
-                            existing_users.append(ldap_reslt)
-                            existing_user_emails.append(ldap_reslt['mail'][0])
-                    
-                    # XXX LOIC !!! This login is required 
-                    # sfa/iotlab/iotlabdriver.py", line 523, in AddLeases 
-                    if 'uid' in ldap_reslt:
-                        # meaning that the Person was found in LDAP
-                        slice_record['login'] = ldap_reslt['uid'][0]
-
-                    # XXX LOIC !!! Add the user to IOTLAB DB Registry???
-                    #if 'keys' in user:
-                    #    user['pkey'] = user['keys'][0]
-
-                    #ret = self.driver.AddPerson(user,add_to_ldap=False)
-                    #logger.debug("LOIC verify_persons AddPerson ret = %s" % ret)
+                    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 \
                                 not in ldap ...NEW ACCOUNT NEEDED %s \r\n \t \
                                 ldap_reslt %s " % (users, ldap_reslt))
+
         requested_user_emails = users_by_email.keys()
         # requested_user_hrns = \
         #     [users_by_email[user]['hrn'] for user in users_by_email]
@@ -548,61 +489,22 @@ class IotlabSlices:
         #to remove/ add any user from/to a slice.
         #However a user from SFA which is not registered in Iotlab yet
         #should be added to the LDAP.
-        logger.debug("LOIC - iotlabslice.py - requested_user_emails = %r" % requested_user_emails)
-        logger.debug("LOIC - iotlabslice.py - existing_user_emails = %r" % existing_user_emails)
-
         added_user_emails = set(requested_user_emails).\
                                         difference(set(existing_user_emails))
-        logger.debug("LOIC - iotlabslice.py - added_user_emails = %r" % added_user_emails)
-        logger.debug("LOIC - iotlabslice.py - existing_user_emails = %r" % existing_user_emails)
+
+
         #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
         if len(added_user_emails) == 0:
-#            slice_record['login'] = users_dict[requested_user_emails[0]]['uid']
+            slice_record['login'] = users_dict[requested_user_emails[0]]['uid']
             logger.debug(" IOTLABSLICES  \tverify_person QUICK DIRTY %s"
                          % (slice_record))
-
             # XXX JORDAN uid == 'register'
-#            new_hrn = slice_record['user']['hrn']
-#            new_user = self.driver.get_user_record(new_hrn)
-#            if not new_user:
-#                # XXX HERE WE SHOULD CREATE A SFA USER !!!!!!
-#                added_user = users_dict[requested_user_emails[0]]
-#                person = {}
-#                person['peer_person_id'] = None
-#                k_list = ['first_name', 'last_name', 'person_id']
-#                for k in k_list:
-#                    if k in added_user:
-#                        person[k] = added_user[k]
-#                # 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', [])
-#                # LOIC !!! il faudrait transformer onelab.upmc.XXX en iotlab.XXX
-#                if new_hrn.startswith("iotlab"):
-#                    person['hrn'] = new_hrn                 
-#                else:
-#                    hrn_hierarchy = new_hrn.split(".")
-#                    person['hrn'] = "iotlab." + hrn_hierarchy[-1]
-#
-#                ret = self.driver.AddPerson(person, add_to_ldap=False)
-#                logger.debug("AddPerson return = %r type = %s" % (ret,type(ret)))
-#                # LOIC !!! XXX Dans un cas ça retourne un dict du LDAP dans l'autre cas pas de LDAP donc ça ne retourne rien
-#                if ret is None:
-#                    person['uid'] = slice_record['login']
-#                else:
-#                    if 'uid' in ret:
-#                        # meaning bool is True and the AddPerson was successful
-#                        person['uid'] = ret['uid']
-#                        slice_record['login'] = person['uid']
 
         # XXX JORDAN i have no added_user_emails
         for added_user_email in added_user_emails: