From 7a541f733e84da2111bff988aaa4cd9b55bdfa2c Mon Sep 17 00:00:00 2001 From: Tony Mack Date: Wed, 8 Aug 2012 14:03:13 -0400 Subject: [PATCH] refactored --- sfa/managers/aggregate_manager.py | 42 ++++++++++++++++++------------- sfa/openstack/nova_driver.py | 9 ++++--- sfa/openstack/osaggregate.py | 39 ++++++++++++++++++---------- 3 files changed, 56 insertions(+), 34 deletions(-) diff --git a/sfa/managers/aggregate_manager.py b/sfa/managers/aggregate_manager.py index 458d46b0..d328c1b5 100644 --- a/sfa/managers/aggregate_manager.py +++ b/sfa/managers/aggregate_manager.py @@ -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): diff --git a/sfa/openstack/nova_driver.py b/sfa/openstack/nova_driver.py index efbc2583..20ea0136 100644 --- a/sfa/openstack/nova_driver.py +++ b/sfa/openstack/nova_driver.py @@ -327,13 +327,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): # find out where this slice is currently running diff --git a/sfa/openstack/osaggregate.py b/sfa/openstack/osaggregate.py index dadc02d5..ba27c30e 100644 --- a/sfa/openstack/osaggregate.py +++ b/sfa/openstack/osaggregate.py @@ -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): zones = self.get_availability_zones() @@ -90,7 +104,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') -- 2.47.0