From: Tony Mack Date: Tue, 22 Nov 2011 21:19:40 +0000 (-0500) Subject: support the 'geni_available' option for ListResources X-Git-Tag: sfa-2.0-0~5^2 X-Git-Url: http://git.onelab.eu/?p=sfa.git;a=commitdiff_plain;h=6a5b0c92373c2cd388e0d76f25319c8822a79a01 support the 'geni_available' option for ListResources --- diff --git a/sfa/managers/aggregate_manager.py b/sfa/managers/aggregate_manager.py index eda3007c..56d60086 100644 --- a/sfa/managers/aggregate_manager.py +++ b/sfa/managers/aggregate_manager.py @@ -299,6 +299,7 @@ class AggregateManager: if Callids().already_handled(call_id): return "" # get slice's hrn from options xrn = options.get('geni_slice_urn', None) + cached = options.get('cached', True) (hrn, _) = urn_to_hrn(xrn) version_manager = VersionManager() @@ -311,7 +312,7 @@ class AggregateManager: version_string = version_string + "_"+options.get('info', 'default') # look in cache first - if self.caching and api.cache and not xrn: + if self.caching and api.cache and not xrn and cached: rspec = api.cache.get(version_string) if rspec: api.logger.info("aggregate.ListResources: returning cached value for hrn %s"%hrn) @@ -319,8 +320,8 @@ class AggregateManager: #panos: passing user-defined options #print "manager options = ",options - aggregate = Aggregate(api, options) - rspec = aggregate.get_rspec(slice_xrn=xrn, version=rspec_version) + aggregate = Aggregate(api) + rspec = aggregate.get_rspec(slice_xrn=xrn, version=rspec_version, options=options) # cache the result if self.caching and api.cache and not xrn: diff --git a/sfa/plc/aggregate.py b/sfa/plc/aggregate.py index afd72352..0eff6cca 100644 --- a/sfa/plc/aggregate.py +++ b/sfa/plc/aggregate.py @@ -23,10 +23,9 @@ class Aggregate: #panos new user options variable user_options = {} - def __init__(self, api, user_options={}): + def __init__(self, api): self.api = api - self.user_options = user_options - + def get_sites(self, filter={}): sites = {} for site in self.api.driver.GetSites(filter): @@ -136,12 +135,16 @@ class Aggregate: return (slice, slivers) - def get_nodes_and_links(self, slice=None,slivers=[]): + def get_nodes_and_links(self, slice=None,slivers=[], options={}): filter = {} tags_filter = {} if slice and 'node_ids' in slice and slice['node_ids']: filter['node_id'] = slice['node_ids'] tags_filter=filter.copy() + + geni_available = options.get('geni_available') + if geni_available: + filter['boot_state'] = 'boot' filter.update({'peer_id': None}) nodes = self.api.driver.GetNodes(filter) @@ -220,7 +223,7 @@ class Aggregate: return (rspec_nodes, links) - def get_rspec(self, slice_xrn=None, version = None): + def get_rspec(self, slice_xrn=None, version = None, options={}): version_manager = VersionManager() version = version_manager.get_version(version) @@ -230,7 +233,7 @@ class Aggregate: 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=self.user_options) + rspec = RSpec(version=rspec_version, user_options=options) if slice and 'expires' in slice: rspec.xml.set('expires', epochparse(slice['expires']))