Add new table JobSenslab so that one slice can
[sfa.git] / sfa / senslab / slabslices.py
index 1b02b22..6b413e5 100644 (file)
@@ -139,27 +139,38 @@ class SlabSlices:
         return sfa_peer
         
         
-    def verify_slice_leases(self, sfa_slice, requested_leases, kept_leases, \
+    def verify_slice_leases(self, sfa_slice, requested_jobs_dict, kept_leases, \
         peer):
-        
+
+       
+        #First get the list of current leases from OAR  
         leases = self.driver.GetLeases({'name':sfa_slice['name']}, ['lease_id'])
         if leases : 
             current_leases = [lease['lease_id'] for lease in leases]
+            #Deleted leases are the ones with lease id not declared in the Rspec
             deleted_leases = list(set(current_leases).difference(kept_leases))
     
             try:
                 if peer:
-                    self.driver.UnBindObjectFromPeer('slice', \
-                                    sfa_slice['slice_id'], peer['shortname'])
-                deleted = self.driver.DeleteLeases(deleted_leases)
-                for lease in requested_leases:
-                    added = self.driver.AddLeases(lease['hostname'], \
-                            sfa_slice['name'], int(lease['t_from']), \
-                            int(lease['t_until']))
+                    #peer = RegAuyhority object is unsubscriptable
+                    #TODO :UnBindObjectFromPeer Quick and dirty auth='senslab2 SA 27/07/12
+                    self.driver.UnBindObjectFromPeer('senslab2', 'slice', \
+                                    sfa_slice['record_id_slice'], peer.hrn)
+                
+                deleted = self.driver.DeleteLeases(deleted_leases, \
+                                        sfa_slice['name'])
+               
             #TODO : catch other exception?
             except KeyError: 
                 logger.log_exc('Failed to add/remove slice leases')
-
+                
+        #Add new leases        
+        for start_time in requested_jobs_dict:
+            job = requested_jobs_dict[start_time]
+            added = self.driver.AddLeases(job['hostname'], \
+                        sfa_slice, int(job['start_time']), \
+                        int(job['duration']))
+                        
         return leases
 
     def verify_slice_nodes(self, sfa_slice, requested_slivers, peer):
@@ -186,23 +197,24 @@ class SlabSlices:
             tmp = sfa_slice['PI'][0].split(".")
             username = tmp[(len(tmp)-1)]
             #Update the table with the nodes that populate the slice
-            self.driver.db.update_job(sfa_slice['name'], nodes = added_nodes)
-            logger.debug("SLABSLICES \tverify_slice_nodes slice %s "\
-                                                             %(sfa_slice))
+            logger.debug("SLABSLICES \tverify_slice_nodes slice %s \r\n \r\n deleted_nodes %s"\
+                                                             %(sfa_slice,deleted_nodes))
+            #self.driver.db.update_job(sfa_slice['name'], nodes = added_nodes)
+
             #If there is a timeslot specified, then a job can be launched
-            try:
-                #slot = sfa_slice['timeslot']
-                self.driver.LaunchExperimentOnOAR(sfa_slice, added_nodes, \
-                                                                    username)
-            except KeyError:  
-                logger.log_exc("SLABSLICES \verify_slice_nodes KeyError \
-                                                sfa_slice %s  " %(sfa_slice))
+            #try:
+                ##slot = sfa_slice['timeslot']
+                #self.driver.LaunchExperimentOnOAR(sfa_slice, added_nodes, \
+                                                                    #username)
+            #except KeyError:  
+                #logger.log_exc("SLABSLICES \verify_slice_nodes KeyError \
+                                                #sfa_slice %s  " %(sfa_slice))
 
 
             if deleted_nodes:
                 self.driver.DeleteSliceFromNodes(sfa_slice['name'], \
                                                                 deleted_nodes)
-
+            #return added_nodes
         except: 
             logger.log_exc('Failed to add/remove slice from nodes')
             
@@ -320,27 +332,28 @@ class SlabSlices:
 
         #login_base = slice_hrn.split(".")[0]
         slicename = slice_hrn
-        sl = self.driver.GetSlices(slice_filter = slicename, \
+        slices_list = self.driver.GetSlices(slice_filter = slicename, \
                                             slice_filter_type = 'slice_hrn') 
-        if sl:
-
-            logger.debug("SLABSLICE \tverify_slice slicename %s sl %s \
-                                slice_record %s"%(slicename, sl, slice_record))
-            sfa_slice = sl
-            sfa_slice.update(slice_record)
-            #del slice['last_updated']
-            #del slice['date_created']
-            #if peer:
-                #slice['peer_slice_id'] = slice_record.get('slice_id', None)
-                ## unbind from peer so we can modify if necessary. 
-                ## Will bind back later
-                #self.driver.UnBindObjectFromPeer('slice', slice['slice_id'], \
-                                                            #peer['shortname'])
-               #Update existing record (e.g. expires field) 
-                #it with the latest info.
-            ##if slice_record and slice['expires'] != slice_record['expires']:
-                ##self.driver.UpdateSlice( slice['slice_id'], {'expires' : \
-                                                    #slice_record['expires']})
+        if slices_list:
+            for sl in slices_list:
+            
+                logger.debug("SLABSLICE \tverify_slice slicename %s sl %s \
+                                    slice_record %s"%(slicename, sl, slice_record))
+                sfa_slice = sl
+                sfa_slice.update(slice_record)
+                #del slice['last_updated']
+                #del slice['date_created']
+                #if peer:
+                    #slice['peer_slice_id'] = slice_record.get('slice_id', None)
+                    ## unbind from peer so we can modify if necessary. 
+                    ## Will bind back later
+                    #self.driver.UnBindObjectFromPeer('slice', slice['slice_id'], \
+                                                                #peer['shortname'])
+                #Update existing record (e.g. expires field) 
+                    #it with the latest info.
+                ##if slice_record and slice['expires'] != slice_record['expires']:
+                    ##self.driver.UpdateSlice( slice['slice_id'], {'expires' : \
+                                                        #slice_record['expires']})
         else:
             logger.debug(" SLABSLICES \tverify_slice Oups \
                         slice_record %s peer %s sfa_peer %s "\