Further bug fixes for federated user adding.
[sfa.git] / sfa / senslab / slabdriver.py
index 106a821..50c8e1a 100644 (file)
@@ -1,10 +1,10 @@
 import subprocess
+import os
 
 from datetime import datetime
 
 from sfa.util.faults import SliverDoesNotExist, UnknownSfaType
 from sfa.util.sfalogging import logger
-
 from sfa.storage.alchemy import dbsession
 from sfa.storage.model import RegRecord, RegUser, RegSlice
 from sqlalchemy.orm import joinedload
@@ -56,7 +56,7 @@ class SlabDriver(Driver):
         self.oar = OARrestapi()
         self.ldap = LDAPapi()
         self.time_format = "%Y-%m-%d %H:%M:%S"
-        self.db = SlabDB(config, debug = True)
+        self.db = SlabDB(config, debug = False)
         self.cache = None
         
     
@@ -1230,7 +1230,10 @@ class SlabDriver(Driver):
             # second step : configure the experiment
             # we need to store the nodes in a yaml (well...) file like this :
             # [1,56,23,14,45,75] with name /tmp/sfa<jobid>.json
-            job_file = open('/tmp/sfa/'+ str(jobid) + '.json', 'w')
+            tmp_dir = '/tmp/sfa/'
+            if not os.path.exists(tmp_dir):
+                os.makedirs(tmp_dir)
+            job_file = open(tmp_dir + str(jobid) + '.json', 'w')
             job_file.write('[')
             job_file.write(str(added_nodes[0].strip('node')))
             for node in added_nodes[1:len(added_nodes)] :
@@ -1274,12 +1277,14 @@ class SlabDriver(Driver):
                  %( hostname_list, slice_record , lease_start_time, \
                  lease_duration))
 
-        tmp = slice_record['reg-researchers'][0].split(".")
-        username = tmp[(len(tmp)-1)]
+        #tmp = slice_record['reg-researchers'][0].split(".")
+        username = slice_record['login']
+        #username = tmp[(len(tmp)-1)]
         job_id = self.LaunchExperimentOnOAR(hostname_list, slice_record['hrn'], \
                                     lease_start_time, lease_duration, username)
         start_time = datetime.fromtimestamp(int(lease_start_time)).strftime(self.time_format)
         end_time = lease_start_time + lease_duration
+        logger.debug("SLABDRIVER \r\n \r\n \t AddLeases %s %s %s " %(type(slice_record['hrn']), type(job_id), type(end_time)))
         slab_ex_row = SenslabXP(slice_record['hrn'], job_id, end_time)
         logger.debug("SLABDRIVER \r\n \r\n \t slab_ex_row %s" %(slab_ex_row))
         slab_dbsession.add(slab_ex_row)
@@ -1390,19 +1395,19 @@ class SlabDriver(Driver):
                 
     
                 resa['component_id_list'] = []
+                resa['hrn'] = Xrn(resa['slice_id']).get_hrn()
                 #Transform the hostnames into urns (component ids)
                 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)
                     resa['component_id_list'].append(slab_xrn.urn)
-                    resa['slice_hrn'] = Xrn(resa['slice_id']).get_hrn()
                     
                 if lease_filter_dict:
                     logger.debug("SLABDRIVER \tGetLeases resa_ %s \r\n leasefilter %s"\
                                             %(resa,lease_filter_dict)) 
                         
-                    if lease_filter_dict['name'] == resa['slice_hrn']:
+                    if lease_filter_dict['name'] == resa['hrn']:
                         reservation_list.append(resa)
                         
         if lease_filter_dict is None:
@@ -1767,6 +1772,22 @@ class SlabDriver(Driver):
         logger.warning("SLABDRIVER DeleteSlice %s "%(slice_record))
         return
     
+    def __add_person_to_db(self, user_dict):
+
+        check_if_exists = dbsession.query(RegUser).filter_by(email = user_dict['email']).first()
+        #user doesn't exists
+        if not check_if_exists:
+            logger.debug("__add_person_to_db \t Adding %s \r\n \r\n \
+            _________________________________________________________________________\
+            " %(hrn))
+            user_record = RegUser(hrn =user_dict['hrn'] , pointer= '-1', authority=get_authority(hrn), \
+                                                    email= user_dict['email'], gid = None)
+            user_record.reg_keys = [RegKey(user_dict['pkey'])]
+            user_record.just_created()
+            dbsession.add (user_record)
+            dbsession.commit()
+        return 
+        
     #TODO AddPerson 04/07/2012 SA
     #def AddPerson(self, auth,  person_fields=None): 
     def AddPerson(self, record):#TODO fixing 28/08//2012 SA
@@ -1780,6 +1801,7 @@ class SlabDriver(Driver):
         """
         ret = self.ldap.LdapAddUser(record)
         logger.debug("SLABDRIVER AddPerson return code %s \r\n "%(ret))
+        self.__add_person_to_db(record)
         return ret['uid']
     
     #TODO AddPersonToSite 04/07/2012 SA