From 062f69a840aec2971420ba5ff8d3361923df7f74 Mon Sep 17 00:00:00 2001 From: Tony Mack Date: Wed, 8 Aug 2012 12:12:55 -0400 Subject: [PATCH] Refactored ListResources, ListSlices. ListResources no longer returns slice resources, that is now handled by Describe --- sfa/managers/aggregate_manager.py | 64 ++++++++++++++++++++++++++----- sfa/methods/ListResources.py | 10 ++--- sfa/openstack/nova_driver.py | 47 +++-------------------- sfa/planetlab/pldriver.py | 58 +++------------------------- 4 files changed, 67 insertions(+), 112 deletions(-) diff --git a/sfa/managers/aggregate_manager.py b/sfa/managers/aggregate_manager.py index ed1086bb..458d46b0 100644 --- a/sfa/managers/aggregate_manager.py +++ b/sfa/managers/aggregate_manager.py @@ -3,6 +3,7 @@ from sfa.rspecs.version_manager import VersionManager from sfa.util.version import version_core from sfa.util.xrn import Xrn from sfa.util.callids import Callids +from sfa.util.sfalogging import logger class AggregateManager: @@ -52,22 +53,65 @@ class AggregateManager: def ListSlices(self, api, creds, options): call_id = options.get('call_id') if Callids().already_handled(call_id): return [] + + # look in cache first + if self.driver.cache: + slices = self.driver.cache.get('slices') + if slices: + logger.debug("%s.list_slices returns from cache" % (self.driver.__module__)) + return slices + + # call driver + slices = self.driver.list_slices(creds, options) + + # cache the result + if self.driver.cache: + logger.debug ("%s.list_slices stores value in cache" % (self.driver.__module__)) + self.driver.cache.add('slices', instance_urns) + return self.driver.list_slices (creds, options) def ListResources(self, api, creds, options): call_id = options.get('call_id') if Callids().already_handled(call_id): return "" - # get slice's hrn from options - slice_xrn = options.get('geni_slice_urn', None) - # pass None if no slice is specified - if not slice_xrn: - slice_hrn, slice_urn = None, None - else: - xrn = Xrn(slice_xrn) - slice_urn=xrn.get_urn() - slice_hrn=xrn.get_hrn() - return self.driver.list_resources (slice_urn, slice_hrn, creds, options) + version_manager = VersionManager() + # get the rspec's return format from options + 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')) + + # look in cache first + cached_requested = options.get('cached', True) + if cached_requested and self.driver.cache and not slice_hrn: + rspec = self.driver.cache.get(version_string) + if rspec: + logger.debug("%s.ListResources returning cached advertisement" % (self.driver.__module__)) + return rspec + + rspec = self.driver.list_resources (creds, 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) + + 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) + def SliverStatus (self, api, xrn, creds, options): call_id = options.get('call_id') diff --git a/sfa/methods/ListResources.py b/sfa/methods/ListResources.py index 04359a04..c05d6977 100644 --- a/sfa/methods/ListResources.py +++ b/sfa/methods/ListResources.py @@ -10,7 +10,7 @@ from sfa.storage.parameter import Parameter, Mixed class ListResources(Method): """ - Returns information about available resources or resources allocated to this slice + Returns information about available resources @param credential list @param options dictionary @return string @@ -33,12 +33,8 @@ class ListResources(Method): else: raise SfaInvalidArgument('Must specify an rspec version option. geni_rspec_version cannot be null') - # get slice's hrn from options - xrn = options.get('geni_slice_urn', '') - (hrn, _) = urn_to_hrn(xrn) - # Find the valid credentials - valid_creds = self.api.auth.checkCredentials(creds, 'listnodes', hrn) + valid_creds = self.api.auth.checkCredentials(creds, 'listnodes') # get hrn of the original caller origin_hrn = options.get('origin_hrn', None) @@ -52,7 +48,7 @@ class ListResources(Method): elif self.api.interface in ['slicemgr']: chain_name = 'FORWARD-OUTGOING' self.api.logger.debug("ListResources: sfatables on chain %s"%chain_name) - filtered_rspec = run_sfatables(chain_name, hrn, origin_hrn, rspec) + filtered_rspec = run_sfatables(chain_name, '', origin_hrn, rspec) if options.has_key('geni_compressed') and options['geni_compressed'] == True: filtered_rspec = zlib.compress(filtered_rspec).encode('base64') diff --git a/sfa/openstack/nova_driver.py b/sfa/openstack/nova_driver.py index 2ac2024b..efbc2583 100644 --- a/sfa/openstack/nova_driver.py +++ b/sfa/openstack/nova_driver.py @@ -318,59 +318,22 @@ class NovaDriver(Driver): return {} def list_slices (self, creds, options): - # look in cache first - if self.cache: - slices = self.cache.get('slices') - if slices: - logger.debug("OpenStackDriver.list_slices returns from cache") - return slices - # get data from db instance_urns = [] instances = self.shell.nova_manager.servers.findall() for instance in instances: if instance.name not in instance_urns: instance_urns.append(OSXrn(instance.name, type='slice').urn) - - # cache the result - if self.cache: - logger.debug ("OpenStackDriver.list_slices stores value in cache") - self.cache.add('slices', instance_urns) - return instance_urns # first 2 args are None in case of resource discovery - def list_resources (self, slice_urn, slice_hrn, creds, options): - cached_requested = options.get('cached', True) - - version_manager = VersionManager() - # get the rspec's return format from options - 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') - - # look in cache first - if cached_requested and self.cache and not slice_hrn: - rspec = self.cache.get(version_string) - if rspec: - logger.debug("OpenStackDriver.ListResources: returning cached advertisement") - return rspec - - #panos: passing user-defined options - #print "manager options = ",options + def list_resources (self, creds, options): aggregate = OSAggregate(self) - rspec = aggregate.get_rspec(slice_xrn=slice_urn, version=rspec_version, - options=options) - - # cache the result - if self.cache and not slice_hrn: - logger.debug("OpenStackDriver.ListResources: stores advertisement in cache") - self.cache.add(version_string, rspec) - + rspec = aggregate.get_rspec(version=rspec_version, options=options) return rspec + + def describe(self, creds, urns, options): + return {} def sliver_status (self, slice_urn, slice_hrn): # find out where this slice is currently running diff --git a/sfa/planetlab/pldriver.py b/sfa/planetlab/pldriver.py index 6d5bc526..623c30e9 100644 --- a/sfa/planetlab/pldriver.py +++ b/sfa/planetlab/pldriver.py @@ -3,7 +3,6 @@ import datetime # from sfa.util.faults import MissingSfaInfo, UnknownSfaType, \ RecordNotFound, SfaNotImplemented, SliverDoesNotExist - from sfa.util.sfalogging import logger from sfa.util.defaultdict import defaultdict from sfa.util.sfatime import utcparse, datetime_to_string, datetime_to_epoch @@ -16,13 +15,11 @@ from sfa.storage.model import RegRecord # used to be used in get_ticket #from sfa.trust.sfaticket import SfaTicket - from sfa.rspecs.version_manager import VersionManager from sfa.rspecs.rspec import RSpec # the driver interface, mostly provides default behaviours from sfa.managers.driver import Driver - from sfa.planetlab.plshell import PlShell import sfa.planetlab.peers as peers from sfa.planetlab.plaggregate import PlAggregate @@ -567,65 +564,20 @@ class PlDriver (Driver): return {} def list_slices (self, creds, options): - # look in cache first - if self.cache: - slices = self.cache.get('slices') - if slices: - logger.debug("PlDriver.list_slices returns from cache") - return slices - # get data from db slices = self.shell.GetSlices({'peer_id': None}, ['name']) slice_hrns = [slicename_to_hrn(self.hrn, slice['name']) for slice in slices] slice_urns = [hrn_to_urn(slice_hrn, 'slice') for slice_hrn in slice_hrns] - - # cache the result - if self.cache: - logger.debug ("PlDriver.list_slices stores value in cache") - self.cache.add('slices', slice_urns) - return slice_urns # first 2 args are None in case of resource discovery - def list_resources (self, slice_urn, slice_hrn, creds, options): - cached_requested = options.get('cached', True) - - version_manager = VersionManager() - # get the rspec's return format from options - 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')) - - # look in cache first - if cached_requested and self.cache and not slice_hrn: - rspec = self.cache.get(version_string) - if rspec: - logger.debug("PlDriver.ListResources: returning cached advertisement") - return rspec - - #panos: passing user-defined options - #print "manager options = ",options + def list_resources (self, creds, options): aggregate = PlAggregate(self) - rspec = aggregate.get_rspec(slice_xrn=slice_urn, version=rspec_version, - options=options) - - # cache the result - if self.cache and not slice_hrn: - logger.debug("PlDriver.ListResources: stores advertisement in cache") - self.cache.add(version_string, rspec) - + rspec = aggregate.get_rspec(version=rspec_version, options=options) return rspec + + def describe(self, creds, urns, options): + return {} def sliver_status (self, slice_urn, slice_hrn): # find out where this slice is currently running -- 2.43.0