Handle slice table update upon creation of a job.
[sfa.git] / sfa / senslab / slabdriver.py
index 998ce30..47788c5 100644 (file)
@@ -13,7 +13,7 @@ from sfa.util.plxrn import slicename_to_hrn, hostname_to_hrn, hrn_to_pl_slicenam
 # SlabDriver should be really only about talking to the senslab testbed
 
 ## thierry : please avoid wildcard imports :)
-from sfa.senslab.OARrestapi import OARapi
+from sfa.senslab.OARrestapi import OARapi, OARrestapi
 from sfa.senslab.LDAPapi import LDAPapi
 from sfa.senslab.SenslabImportUsers import SenslabImportUsers
 from sfa.senslab.parsing import parse_filter
@@ -51,6 +51,7 @@ class SlabDriver ():
        self.ldap = LDAPapi()
         self.users = SenslabImportUsers()
         self.time_format = "%Y-%m-%d %H:%M:%S"
+        self.db = SlabDB()
         #self.logger=sfa_logger()
       
        
@@ -95,9 +96,9 @@ class SlabDriver ():
         return return_site_list
     
     def GetSlices(self,slice_filter = None, return_fields=None):
-        db = SlabDB()
+        
         return_slice_list =[]
-        sliceslist = db.find('slice',columns = ['slice_hrn', 'record_id_slice','record_id_user'])
+        sliceslist = self.db.find('slice',columns = ['slice_hrn', 'record_id_slice','record_id_user'])
         print >>sys.stderr, " \r\n \r\n SLABDRIVER.PY  GetSlices  slices %s" %(sliceslist)
         #slicesdict = sliceslist[0]
         if not (slice_filter or return_fields):
@@ -246,9 +247,38 @@ class SlabDriver ():
                  
                  
                  
-    def AddSliceToNodes(self, slice_name, added_nodes):
+    def AddSliceToNodes(self,  slice_name, added_nodes, slice_user=None):
+        print>>sys.stderr, "\r\n \r\n AddSliceToNodes  slice_name %s added_nodes %s username %s" %(slice_name,added_nodes,slice_user )
+        site_list = []
+        nodeid_list =[]
+        resource = ""
+        reqdict = {}
+        reqdict['property'] ="network_address in ("
+        for node in added_nodes:
+            #Get the ID of the node : remove the root auth and put the site in a separate list
+            tmp = node.strip(self.root_auth+".")
+            l = tmp.split("_")
+             
+            nodeid= (l[len(l)-1]) 
+            reqdict['property'] += "'"+ nodeid +"', "
+            nodeid_list.append(nodeid)
+            site_list.append( l[0] )
+            
+        reqdict['property'] =  reqdict['property'][0: len( reqdict['property'])-2] +")"
+        reqdict['resource'] ="network_address="+ str(len(nodeid_list))
+        reqdict['resource']+= ",walltime=" + str(00) + ":" + str(05) + ":" + str(00)
+        reqdict['script_path'] = "/bin/sleep "
+
+        print>>sys.stderr, "\r\n \r\n AddSliceToNodes reqdict   %s \r\n site_list   %s"  %(reqdict,site_list)   
+        OAR = OARrestapi()
+        answer = OAR.POSTRequestToOARRestAPI('POST_job',reqdict,slice_user)
+        print>>sys.stderr, "\r\n \r\n AddSliceToNodes jobid   %s "  %(answer)
+        self.db.update('slice',['oar_job_id'], [answer['id']], 'slice_hrn', slice_name)
         return 
     
+
+        
+        
     def DeleteSliceFromNodes(self, slice_name, deleted_nodes):
         return   
     
@@ -458,9 +488,9 @@ class SlabDriver ():
         
        
         if records['type'] == 'slice':
-            db = SlabDB()
+
             sfatable = SfaTable()
-            recslice = db.find('slice',str(records['hrn']))
+            recslice = self.db.find('slice',str(records['hrn']))
             if isinstance(recslice,list) and len(recslice) == 1:
                 recslice = recslice[0]
             recuser = sfatable.find(  recslice['record_id_user'], ['hrn'])