From b4d3c48e1f55ef03042a03173dcdf8e9ef425937 Mon Sep 17 00:00:00 2001 From: Tony Mack Date: Thu, 12 May 2011 17:01:56 -0400 Subject: [PATCH] SM.CreateSliver() result rspec is same format as rspec request --- TODO | 10 +++++----- sfa/managers/aggregate_manager_pl.py | 2 +- sfa/managers/slice_manager_pl.py | 17 +++++++++-------- sfa/plc/aggregate.py | 15 +++++++-------- sfa/rspecs/pg_rspec.py | 1 + sfa/rspecs/rspec.py | 1 + sfa/rspecs/sfa_rspec.py | 1 + 7 files changed, 25 insertions(+), 22 deletions(-) diff --git a/TODO b/TODO index 5aa5541f..d009554c 100644 --- a/TODO +++ b/TODO @@ -1,11 +1,11 @@ +RSpecs +- RSpecConverter should convert sliver tags +- SM should cache result of Aggregte GetVersion call when CreateSliver is executed +- CreateSlivers should update SliverTags/attributes + Registry - Verify that sub authority certificates still work -SM -- Slice Manager methods should return real result instead of just 1 (Renew - Sliver, etc) - -- connect SM to ProtoGeni Aggregates Stop invalid users * a recently disabled/deleted user may still have a valid cred. Keep a list of valid/invalid users on the aggregate and check callers against this list diff --git a/sfa/managers/aggregate_manager_pl.py b/sfa/managers/aggregate_manager_pl.py index 311b07af..f38d68fb 100644 --- a/sfa/managers/aggregate_manager_pl.py +++ b/sfa/managers/aggregate_manager_pl.py @@ -202,7 +202,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=RSpecVersion("protogeni")) + return aggregate.get_rspec(slice_xrn=slice_xrn, version=rspec.type) def RenewSliver(api, xrn, creds, expiration_time, call_id): diff --git a/sfa/managers/slice_manager_pl.py b/sfa/managers/slice_manager_pl.py index acf7864c..6be29bfa 100644 --- a/sfa/managers/slice_manager_pl.py +++ b/sfa/managers/slice_manager_pl.py @@ -19,6 +19,8 @@ from sfa.rspecs.pg_rspec import PGRSpec 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.util.policy import Policy from sfa.util.prefixTree import prefixTree from sfa.util.sfaticket import * @@ -27,8 +29,6 @@ from sfa.util.threadmanager import ThreadManager import sfa.util.xmlrpcprotocol as xmlrpcprotocol import sfa.plc.peers as peers 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.util.callids import Callids # we have specialized xmlrpclib.ServerProxy to remember the input url @@ -60,14 +60,15 @@ def GetVersion(api): def CreateSliver(api, xrn, creds, rspec_str, users, call_id): def _CreateSliver(server, xrn, credentail, rspec, users, call_id): + # should check the cache first # get aggregate version version = server.GetVersion() - if 'sfa' in version: - # just send the whole rspec to SFA AM/SM - server.CreateSliver(xrn, credential, rspec, users, call_id) - elif 'geni_api' in version: - pass - # convert to pg rspec + if 'sfa' not in version and 'geni_api' in version: + # sfa aggregtes support both sfa and pg rspecs, no need to convert + # if aggregate supports sfa rspecs. othewise convert to pg rspec + rspec = RSpecConverter.to_pg_rspec(rspec) + + return server.CreateSliver(xrn, credential, rspec, users, call_id) if Callids().already_handled(call_id): return "" diff --git a/sfa/plc/aggregate.py b/sfa/plc/aggregate.py index 9626d316..5de3ad84 100644 --- a/sfa/plc/aggregate.py +++ b/sfa/plc/aggregate.py @@ -3,6 +3,7 @@ from sfa.util.xrn import * from sfa.util.plxrn import * from sfa.rspecs.sfa_rspec import SfaRSpec from sfa.rspecs.pg_rspec import PGRSpec +from sfa.rspecs.rspec_version import RSpecVersion class Aggregate: @@ -67,14 +68,12 @@ class Aggregate: def get_rspec(self, slice_xrn=None, version = None): self.prepare() rspec = None - if version: - if version['type'].lower() == 'protogeni': - rspec = PGRSpec() - elif version['type'].lower() == 'sfa': - rspec = SfaRSpec() - else: - rspec = SfaRSpec() - else: + rspec_version = RSpecVersion(version) + if rspec_version['type'].lower() == 'protogeni': + rspec = PGRSpec() + elif rspec_version['type'].lower() == 'sfa': + rspec = SfaRSpec() + else: rspec = SfaRSpec() rspec.add_nodes(self.nodes.values()) diff --git a/sfa/rspecs/pg_rspec.py b/sfa/rspecs/pg_rspec.py index d1c4ea7e..a2033cdc 100755 --- a/sfa/rspecs/pg_rspec.py +++ b/sfa/rspecs/pg_rspec.py @@ -15,6 +15,7 @@ class PGRSpec(RSpec): 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 def get_network(self): diff --git a/sfa/rspecs/rspec.py b/sfa/rspecs/rspec.py index 96523f00..d35fb787 100755 --- a/sfa/rspecs/rspec.py +++ b/sfa/rspecs/rspec.py @@ -13,6 +13,7 @@ class RSpec: namespaces = {} config = Config() xml = None + type = None def __init__(self, rspec="", namespaces={}): if rspec: diff --git a/sfa/rspecs/sfa_rspec.py b/sfa/rspecs/sfa_rspec.py index ea4544ed..e8f608ab 100755 --- a/sfa/rspecs/sfa_rspec.py +++ b/sfa/rspecs/sfa_rspec.py @@ -12,6 +12,7 @@ class SfaRSpec(RSpec): header = '\n' namespaces = {} format = 'sfa' + type = 'sfa' ################### # Parser ################### -- 2.43.0