From 27091c5dbe38674fee5e91d153315449027d3061 Mon Sep 17 00:00:00 2001 From: Tony Mack Date: Tue, 17 May 2011 18:57:13 -0400 Subject: [PATCH] update how RSpecVersion is used --- sfa/client/sfi.py | 9 ++++++--- sfa/managers/aggregate_manager_pl.py | 18 +++++++++++++----- sfa/managers/slice_manager_pl.py | 14 ++++++++++---- sfa/rspecs/pg_rspec.py | 25 ++++++++++++++++--------- sfa/rspecs/pl_rspec_version.py | 21 ++++++--------------- sfa/rspecs/rspec.py | 1 + sfa/rspecs/rspec_converter.py | 8 ++++---- sfa/rspecs/rspec_parser.py | 4 ++-- sfa/rspecs/rspec_version.py | 4 ++-- sfa/rspecs/sfa_rspec.py | 4 ++-- 10 files changed, 62 insertions(+), 46 deletions(-) diff --git a/sfa/client/sfi.py b/sfa/client/sfi.py index 84c77d68..8fe23490 100755 --- a/sfa/client/sfi.py +++ b/sfa/client/sfi.py @@ -841,8 +841,10 @@ class Sfi: delegated_cred = self.delegate_cred(cred, get_authority(self.authority)) creds.append(delegated_cred) if opts.rspec_version: - call_options['rspec_version'] = opts.rspec_version + #call_options['rspec_version'] = opts.rspec_version + call_options['rspec_version'] = {'type': opts.rspec_version, 'version': "2"} result = server.ListResources(creds, call_options,unique_call_id()) + #result = server.ListResources(creds, call_options) format = opts.format if opts.file is None: display_rspec(result, format) @@ -875,8 +877,9 @@ class Sfi: version = server.GetVersion() if 'sfa' not in version: # need to pass along user keys if this request is going to a ProtoGENI aggregate - # ProtoGeni Aggregaes will only install the keys of the user that is issuing the - # request. all slice keys + # ProtoGeni Aggregates will only install the keys of the user that is issuing the + # request. So we will only pass in one user that contains the keys for all + # users of the slice user = {'urn': user_cred.get_gid_caller().get_urn(), 'keys': []} slice_record = self.registry.Resolve(slice_urn, creds) diff --git a/sfa/managers/aggregate_manager_pl.py b/sfa/managers/aggregate_manager_pl.py index f38d68fb..081695dd 100644 --- a/sfa/managers/aggregate_manager_pl.py +++ b/sfa/managers/aggregate_manager_pl.py @@ -1,3 +1,5 @@ +#!/usr/bin/python + import datetime import time import traceback @@ -23,17 +25,23 @@ from sfa.plc.aggregate import Aggregate from sfa.plc.slices import * from sfa.util.version import version_core from sfa.rspecs.rspec_version import RSpecVersion -from sfa.rspecs.pl_rspec_version import supported_rspecs +from sfa.rspecs.sfa_rspec import sfa_rspec_version +from sfa.rspecs.pg_rspec import pg_rspec_version from sfa.rspecs.rspec_parser import parse_rspec from sfa.util.sfatime import utcparse from sfa.util.callids import Callids def GetVersion(api): xrn=Xrn(api.hrn) + + supported_rspecs = [dict(pg_rspec_version), dict(sfa_rspec_version)] version_more = {'interface':'aggregate', 'testbed':'myplc', - 'hrn':xrn.get_hrn()} - version_more.update(supported_rspecs) + 'hrn':xrn.get_hrn(), + 'request_rspec_versions': supported_rspecs, + 'ad_rspec_versions': supported_rspecs, + 'default_ad_rspec': dict(sfa_rspec_version) + } return version_core(version_more) def __get_registry_objects(slice_xrn, creds, users): @@ -202,7 +210,7 @@ def CreateSliver(api, slice_xrn, creds, rspec_string, users, call_id): api.plshell.BindObjectToPeer(api.plauth, 'slice', slice.id, peer, slice.peer_id) - return aggregate.get_rspec(slice_xrn=slice_xrn, version=rspec.type) + return aggregate.get_rspec(slice_xrn=slice_xrn, version=rspec.version) def RenewSliver(api, xrn, creds, expiration_time, call_id): @@ -303,7 +311,7 @@ def ListResources(api, creds, options,call_id): (hrn, type) = urn_to_hrn(xrn) # get the rspec's return format from options - rspec_version = RSpecVersion(options.get('rspec_version', 'SFA 1')) + rspec_version = RSpecVersion(options.get('rspec_version')) version_string = "rspec_%s" % (rspec_version.get_version_name()) # look in cache first diff --git a/sfa/managers/slice_manager_pl.py b/sfa/managers/slice_manager_pl.py index fa535e45..17651795 100644 --- a/sfa/managers/slice_manager_pl.py +++ b/sfa/managers/slice_manager_pl.py @@ -20,7 +20,8 @@ from sfa.rspecs.sfa_rspec import SfaRSpec from sfa.rspecs.rspec_converter import RSpecConverter from sfa.rspecs.rspec_parser import parse_rspec from sfa.rspecs.rspec_version import RSpecVersion -from sfa.rspecs.pl_rspec_version import supported_rspecs +from sfa.rspecs.sfa_rspec import sfa_rspec_version +from sfa.rspecs.pg_rspec import pg_rspec_version from sfa.util.policy import Policy from sfa.util.prefixTree import prefixTree from sfa.util.sfaticket import * @@ -45,11 +46,15 @@ def GetVersion(api): peers =dict ([ (peername,get_serverproxy_url(v)) for (peername,v) in api.aggregates.iteritems() if peername != api.hrn]) xrn=Xrn (api.hrn) + supported_rspecs = [dict(pg_rspec_version), dict(sfa_rspec_version)] version_more = {'interface':'slicemgr', 'hrn' : xrn.get_hrn(), 'urn' : xrn.get_urn(), - 'peers': peers,} - version_more.update(supported_rspecs) + 'peers': peers, + 'request_rspec_versions': supported_rspecs, + 'ad_rspec_versions': supported_rspecs, + 'default_ad_rspec': dict(sfa_rspec_version) + } sm_version=version_core(version_more) # local aggregate if present needs to have localhost resolved if api.hrn in api.aggregates: @@ -354,7 +359,8 @@ def ListResources(api, creds, options, call_id): (hrn, type) = urn_to_hrn(xrn) # get the rspec's return format from options - rspec_version = RSpecVersion(options.get('rspec_version', 'SFA 1')) + rspec_version = RSpecVersion(options.get('rspec_version')) + print dict(rspec_version) version_string = "rspec_%s" % (rspec_version.get_version_name()) # look in cache first diff --git a/sfa/rspecs/pg_rspec.py b/sfa/rspecs/pg_rspec.py index a2033cdc..a998f86c 100755 --- a/sfa/rspecs/pg_rspec.py +++ b/sfa/rspecs/pg_rspec.py @@ -4,19 +4,26 @@ from StringIO import StringIO from sfa.rspecs.rspec import RSpec from sfa.util.xrn import * from sfa.util.plxrn import hostname_to_urn -from sfa.util.config import Config +from sfa.util.config import Config +from sfa.rspecs.rspec_version import RSpecVersion + +_version = {'type': 'protogeni', + 'version': '2', + 'schema': 'http://www.protogeni.net/resources/rspec/2/request.xsd', + 'namespace': 'http://www.protogeni.net/resources/rspec/2', + 'extenstions': [ + 'http://www.protogeni.net/resources/rspec/ext/gre-tunnel/1', + 'http://www.protogeni.net/resources/rspec/ext/other-ext/3' + ] +} +pg_rspec_version = RSpecVersion(_version) class PGRSpec(RSpec): + xml = None header = '\n' template = """""" - namespaces = {'rspecv2':'http://www.protogeni.net/resources/rspec/0.2', - 'xsi': 'http://www.w3.org/2001/XMLSchema-instance' - } - schemas = {'xsi': 'http://www.protogeni.net/resources/rspec/0.2 http://www.protogeni.net/resources/rspec/0.2/ad.xsd' - } - format = 'pg' - format = 'protogeni' - xml = None + version = pg_rspec_version + namespaces = {'rspecv2': version['namespace']} def get_network(self): network = None diff --git a/sfa/rspecs/pl_rspec_version.py b/sfa/rspecs/pl_rspec_version.py index fb96f74c..28185015 100644 --- a/sfa/rspecs/pl_rspec_version.py +++ b/sfa/rspecs/pl_rspec_version.py @@ -1,20 +1,11 @@ +from sfa.rspecs.sfa_rspec import sfa_rspec_version +from sfa.rspecs.pg_rspec import pg_rspec_version + ad_rspec_versions = [ - { 'type': 'ProtoGENI', - 'version': '2', - 'schema': 'http://www.protogeni.net/resources/rspec/2/request.xsd', - 'namespace': 'http://www.protogeni.net/resources/rspec/2', - 'extenstions': [ - 'http://www.protogeni.net/resources/rspec/ext/gre-tunnel/1', - 'http://www.protogeni.net/resources/rspec/ext/other-ext/3'] - }, - { 'type': 'SFA', - 'version': '1', - 'schema': [], - 'namespace': [], - 'extensions': [] - } -] + pg_rspec_vesion, + sfa_rspec_version + ] request_rspec_versions = ad_rspec_versions diff --git a/sfa/rspecs/rspec.py b/sfa/rspecs/rspec.py index d35fb787..fe80006b 100755 --- a/sfa/rspecs/rspec.py +++ b/sfa/rspecs/rspec.py @@ -14,6 +14,7 @@ class RSpec: config = Config() xml = None type = None + version = None def __init__(self, rspec="", namespaces={}): if rspec: diff --git a/sfa/rspecs/rspec_converter.py b/sfa/rspecs/rspec_converter.py index bb90b250..dd7fe1f8 100755 --- a/sfa/rspecs/rspec_converter.py +++ b/sfa/rspecs/rspec_converter.py @@ -10,9 +10,9 @@ class RSpecConverter: @staticmethod def to_sfa_rspec(in_rspec): rspec = parse_rspec(in_rspec) - if rspec.format == 'sfa': + if rspec.version['type'] == 'sfa': return in_rspec - elif rspec.format == 'pg': + elif rspec.version['type'] == 'protogeni': return PGRSpecConverter.to_sfa_rspec(in_rspec) else: return in_rspec @@ -20,9 +20,9 @@ class RSpecConverter: @staticmethod def to_pg_rspec(in_rspec): rspec = parse_rspec(in_rspec) - if rspec.format == 'pg': + if rspec.version['type'] == 'protogeni': return in_rspec - elif rspec.format == 'sfa': + elif rspec.version['type'] == 'sfa': return SfaRSpecConverter.to_pg_rspec(in_rspec) else: return in_rspec diff --git a/sfa/rspecs/rspec_parser.py b/sfa/rspecs/rspec_parser.py index 91f58e53..5625ec73 100755 --- a/sfa/rspecs/rspec_parser.py +++ b/sfa/rspecs/rspec_parser.py @@ -23,10 +23,10 @@ if __name__ == '__main__': print "Parsing SFA RSpec:", rspec = parse_rspec('nodes.rspec') - print rspec.format + print rspec.version rspec = parse_rspec('protogeni.rspec') print "Parsing ProtoGENI RSpec:", - print rspec.format + print rspec.version diff --git a/sfa/rspecs/rspec_version.py b/sfa/rspecs/rspec_version.py index 1c8a599d..b96a765b 100755 --- a/sfa/rspecs/rspec_version.py +++ b/sfa/rspecs/rspec_version.py @@ -1,6 +1,5 @@ #!/usr/bin/python from sfa.util.sfalogging import _SfaLogger -from sfa.rspecs.pl_rspec_version import default_rspec_version class RSpecVersion(dict): @@ -16,7 +15,8 @@ class RSpecVersion(dict): dict.__init__(self, self.fields) if not version: - self.update(default_rspec_version) + from sfa.rspecs.sfa_rspec import sfa_rspec_version + self.update(sfa_rspec_version) elif isinstance(version, dict): self.update(version) elif isinstance(version, basestring): diff --git a/sfa/rspecs/sfa_rspec.py b/sfa/rspecs/sfa_rspec.py index 8cf1c8b1..830c8535 100755 --- a/sfa/rspecs/sfa_rspec.py +++ b/sfa/rspecs/sfa_rspec.py @@ -8,11 +8,11 @@ from sfa.util.config import Config from sfa.rspecs.rspec_version import RSpecVersion -_version = { 'type': 'SFA', +_version = { 'type': 'sfa', 'version': '1' } -sfa_rspec_version = RSpecVersion(_sfa_rspec_version) +sfa_rspec_version = RSpecVersion(_version) class SfaRSpec(RSpec): xml = None -- 2.43.0