refactored
authorTony Mack <tmack@paris.CS.Princeton.EDU>
Wed, 8 Aug 2012 18:03:13 +0000 (14:03 -0400)
committerTony Mack <tmack@paris.CS.Princeton.EDU>
Thu, 16 Aug 2012 19:35:04 +0000 (15:35 -0400)
sfa/managers/aggregate_manager.py
sfa/openstack/nova_driver.py
sfa/openstack/osaggregate.py

index 458d46b..d328c1b 100644 (file)
@@ -27,6 +27,23 @@ class AggregateManager:
             'geni_ad_rspec_versions': ad_rspec_versions,
             }
 
+    def get_rspec_version_string(self, rspec_version, options={}):
+        version_string = "rspec_%s" % (rspec_version)
+
+        #panos adding the info option to the caching key (can be improved)
+        if options.get('info'):
+            version_string = version_string + "_"+options.get('info', 'default')
+
+        # Adding the list_leases option to the caching key
+        if options.get('list_leases'):
+            version_string = version_string + "_"+options.get('list_leases', 'default')
+
+        # Adding geni_available to caching key
+        if options.get('geni_available'):
+            version_string = version_string + "_" + str(options.get('geni_available'))
+
+        return version_string
+
     def GetVersion(self, api, options):
         xrn=Xrn(api.hrn)
         version = version_core()
@@ -75,22 +92,10 @@ class AggregateManager:
         call_id = options.get('call_id')
         if Callids().already_handled(call_id): return ""
 
-        version_manager = VersionManager()
         # get the rspec's return format from options
+        version_manager = VersionManager()
         rspec_version = version_manager.get_version(options.get('geni_rspec_version'))
-        version_string = "rspec_%s" % (rspec_version)
-
-        #panos adding the info option to the caching key (can be improved)
-        if options.get('info'):
-            version_string = version_string + "_"+options.get('info', 'default')
-
-        # Adding the list_leases option to the caching key
-        if options.get('list_leases'):
-            version_string = version_string + "_"+options.get('list_leases', 'default')
-
-        # Adding geni_available to caching key
-        if options.get('geni_available'):
-            version_string = version_string + "_" + str(options.get('geni_available'))
+        version_string = self.get_rspec_version_string(rspec_version, options)
 
         # look in cache first
         cached_requested = options.get('cached', True)
@@ -100,17 +105,20 @@ class AggregateManager:
                 logger.debug("%s.ListResources returning cached advertisement" % (self.driver.__module__))
                 return rspec
        
-        rspec = self.driver.list_resources (creds, options) 
+        rspec = self.driver.list_resources (creds, version, options) 
         if self.driver.cache:
             logger.debug("%s.ListResources stores advertisement in cache" % (self.driver.__module__))
             self.driver.cache.add(version_string, rspec)    
-        return self.driver.list_resources (creds, options)
+        return rspec
     
     def Describe(self, api, creds, urns, options):
         call_id = options.get('call_id')
         if Callids().already_handled(call_id): return ""
 
-        return self.driver.describe (creds, urns, options)
+        # get the rspec's return format from options
+        version_manager = VersionManager()
+        rspec_version = version_manager.get_version(options.get('geni_rspec_version'))
+        return self.driver.describe(creds, urns, rspec, options)
         
     
     def SliverStatus (self, api, xrn, creds, options):
index 5b6779e..d110194 100644 (file)
@@ -329,13 +329,14 @@ class NovaDriver(Driver):
         return instance_urns
         
     # first 2 args are None in case of resource discovery
-    def list_resources (self, creds, options):
+    def list_resources (self, creds, version, options):
         aggregate = OSAggregate(self)
-        rspec =  aggregate.get_rspec(version=rspec_version, options=options)
+        rspec =  aggregate.get_rspec(version=version, options=options)
         return rspec
 
-    def describe(self, creds, urns, options):
-        return {}
+    def describe(self, creds, urns, version, options):
+        aggregate = OSAggregate(self)
+        return aggregate.describe(urns, version=version, options=options)
     
     def sliver_status (self, slice_urn, slice_hrn):
         # update nova connection
index 78b0585..045a456 100644 (file)
@@ -60,28 +60,42 @@ class OSAggregate:
     def __init__(self, driver):
         self.driver = driver
 
+    def get_availability_zones(self):
+        zones = self.driver.shell.nova_manager.dns_domains.domains()
+        if not zones:
+            zones = ['cloud']
+        else:
+            zones = [zone.name for zone in zones]
+        return zones
+
+
+    def describe(self, urns, version=None, options={}):
+         
+        return {}
+
     def get_rspec(self, slice_xrn=None, version=None, options={}):
         version_manager = VersionManager()
         version = version_manager.get_version(version)
         if not slice_xrn:
             rspec_version = version_manager._get_version(version.type, version.version, 'ad')
-            nodes = self.get_aggregate_nodes()
+            rspec = self.get_aggregate_rspec(rspec_version, options)
         else:
             rspec_version = version_manager._get_version(version.type, version.version, 'manifest')
-            nodes = self.get_slice_nodes(slice_xrn)
-        rspec = RSpec(version=rspec_version, user_options=options)
+            rspec = self.get_slice_rsepc(slice_xrn, rspec_version, options)
+
+        return rspec
+
+    def get_aggregate_rspec(self, version, options={}):
+        rspec = RSpec(version=version, user_options=options)
+        nodes = self.get_aggregate_nodes()
         rspec.version.add_nodes(nodes)
         return rspec.toxml()
 
-    def get_availability_zones(self):
-        # essex release
-        zones = self.driver.shell.nova_manager.dns_domains.domains()
-
-        if not zones:
-            zones = ['cloud']
-        else:
-            zones = [zone.name for zone in zones]
-        return zones
+    def get_slice_rspec(self, xrn, version, options={}):
+        rspec = RSpec(version=version, user_options=options)
+        nodes = self.get_slice_nodes(slice_xrn)
+        rspec.version.add_nodes(nodes)
+        return rspec.toxml() 
 
     def get_slice_nodes(self, slice_xrn):
         # update nova connection
@@ -94,7 +108,6 @@ class OSAggregate:
         rspec_nodes = []
         for instance in instances:
             rspec_node = Node()
-            
             #TODO: find a way to look up an instances availability zone in essex
             #if instance.availability_zone:
             #    node_xrn = OSXrn(instance.availability_zone, 'node')