Added GetJobs.
[sfa.git] / sfa / senslab / slabaggregate.py
index eb11130..2adf474 100644 (file)
@@ -9,7 +9,7 @@ import json
 
 from sfa.rspecs.version_manager import VersionManager
 from sfa.senslab.OARrestapi import *
-from sfa.senslab.slabdriver import SlabDriver
+#from sfa.senslab.slabdriver import SlabDriver
 from sfa.util.config import Config
 from sfa.util.xrn import hrn_to_urn, urn_to_hrn, urn_to_sliver_id
 from sfa.util.plxrn import PlXrn, hostname_to_urn, hrn_to_pl_slicename
@@ -25,7 +25,7 @@ from sfa.rspecs.elements.node import Node
 #from sfa.rspecs.elements.interface import Interface
 #from sfa.rspecs.elements.services import Services
 #from sfa.rspecs.elements.pltag import PLTag
-from sfa.util.topology import Topology
+
 from sfa.rspecs.version_manager import VersionManager
 #from sfa.plc.vlink import get_tc_rate
 from sfa.util.sfatime import epochparse
@@ -47,15 +47,53 @@ class SlabAggregate:
 
     user_options = {}
     
-    def __init__(self ,api):
+    def __init__(self ,driver):
        self.OARImporter = OARapi()     
-        self.driver = SlabDriver(Config())
-       self.api = api 
-       print >>sys.stderr,"\r\n \r\n \t\t_____________INIT Slabaggregate api : %s" %(api)
+        self.driver = driver
+       #self.api = api 
+       print >>sys.stderr,"\r\n \r\n \t\t_____________INIT Slabaggregate api : %s" %(driver)
+
+
+    def get_slice_and_slivers(self, slice_xrn):
+        """
+        Returns a dict of slivers keyed on the sliver's node_id
+        """
+        slivers = {}
+        slice = None
+        if not slice_xrn:
+            return (slice, slivers)
+        slice_urn = hrn_to_urn(slice_xrn, 'slice')
+        slice_hrn, _ = urn_to_hrn(slice_xrn)
+        slice_name = slice_hrn
+        slices = self.driver.GetSlices([slice_name])
+        if not slices:
+            return (slice, slivers)
+        slice = slices[0]
 
+        ## sort slivers by node id    
+        #for node_id in slice['node_ids']:
+            #sliver = Sliver({'sliver_id': urn_to_sliver_id(slice_urn, slice['slice_id'], node_id),
+                             #'name': slice['hrn'],
+                             #'type': 'slab-vm', 
+                             #'tags': []})
+            #slivers[node_id]= sliver
 
+        ## sort sliver attributes by node id    
+        ##tags = self.driver.GetSliceTags({'slice_tag_id': slice['slice_tag_ids']})
+        ##for tag in tags:
+            ### most likely a default/global sliver attribute (node_id == None)
+            ##if tag['node_id'] not in slivers:
+                ##sliver = Sliver({'sliver_id': urn_to_sliver_id(slice_urn, slice['slice_id'], ""),
+                                 ##'name': 'slab-vm',
+                                 ##'tags': []})
+                ##slivers[tag['node_id']] = sliver
+            ##slivers[tag['node_id']]['tags'].append(tag)
         
-    def get_nodes(self):
+        return (slice, slivers)
+            
+            
+  
+    def get_nodes(self,slice=None,slivers=[], options={}):
         filtre = {}
         #tags_filter = {}
         #if slice and 'node_ids' in slice and slice['node_ids']:
@@ -143,6 +181,8 @@ class SlabAggregate:
             rspec_nodes.append(rspec_node)
         return (rspec_nodes)
         
+        
+
 #from plc/aggregate.py 
     def get_rspec(self, slice_xrn=None, version = None, options={}):
        print>>sys.stderr, " \r\n SlabAggregate \t\t get_rspec **************\r\n" 
@@ -157,13 +197,21 @@ class SlabAggregate:
             rspec_version = version_manager._get_version(version.type, version.version, 'ad')
         else:
             rspec_version = version_manager._get_version(version.type, version.version, 'manifest')
-      
+        slice, slivers = self.get_slice_and_slivers(slice_xrn)
         rspec = RSpec(version=rspec_version, user_options=options)
-        
-        nodes = self.get_nodes()
+        #if slice and 'expires' in slice:
+           #rspec.xml.set('expires',  epochparse(slice['expires']))
+         # add sliver defaults
+        #nodes, links = self.get_nodes_and_links(slice, slivers)
+        nodes = self.get_nodes() 
         rspec.version.add_nodes(nodes)
-      
-       print >>sys.stderr, 'after add_nodes '
-      
+
+        #rspec.version.add_links(links)
+        #default_sliver = slivers.get(None, [])
+        #if default_sliver:
+            #default_sliver_attribs = default_sliver.get('tags', [])
+            #for attrib in default_sliver_attribs:
+                #logger.info(attrib)
+                #rspec.version.add_default_sliver_attribute(attrib['tagname'], attrib['value'])   
 
         return rspec.toxml()