From 40d980701a909581b485fbcf7c58ca3ace543961 Mon Sep 17 00:00:00 2001 From: Tony Mack Date: Thu, 12 May 2011 16:22:12 -0400 Subject: [PATCH] sfa.rspecs.rspec_version and GetVersion() updates --- sfa/client/sfi.py | 2 +- sfa/managers/aggregate_manager_pl.py | 17 ++++----- sfa/managers/slice_manager_pl.py | 14 ++++--- sfa/plc/aggregate.py | 5 ++- sfa/rspecs/rspec_version.py | 57 +++++++++++++++++----------- sfa/util/version.py.in | 2 +- 6 files changed, 55 insertions(+), 42 deletions(-) mode change 100644 => 100755 sfa/rspecs/rspec_version.py diff --git a/sfa/client/sfi.py b/sfa/client/sfi.py index 9d55258e..84c77d68 100755 --- a/sfa/client/sfi.py +++ b/sfa/client/sfi.py @@ -204,7 +204,7 @@ class Sfi: default="all") # display formats if command in ("resources"): - parser.add_option("-r", "--rspec-version", dest="rspec_version", default="sfa 1", + parser.add_option("-r", "--rspec-version", dest="rspec_version", default="SFA 1", help="schema type and version of resulting RSpec") parser.add_option("-f", "--format", dest="format", type="choice", help="display format ([xml]|dns|ip)", default="xml", diff --git a/sfa/managers/aggregate_manager_pl.py b/sfa/managers/aggregate_manager_pl.py index e44f7bf7..311b07af 100644 --- a/sfa/managers/aggregate_manager_pl.py +++ b/sfa/managers/aggregate_manager_pl.py @@ -23,19 +23,18 @@ 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.rspec_parser import parse_rspec from sfa.util.sfatime import utcparse from sfa.util.callids import Callids def GetVersion(api): xrn=Xrn(api.hrn) - return version_core({'interface':'aggregate', - 'testbed':'myplc', - 'hrn':xrn.get_hrn(), - 'input_rspec' : ['PG 2', 'SFA 1'], - 'output_rspec' : ["SFA 1"], - 'ad_rspec' : ["PG 2", "SFA 1"], - }) + version_more = {'interface':'aggregate', + 'testbed':'myplc', + 'hrn':xrn.get_hrn()} + version_more.update(supported_rspecs) + return version_core(version_more) def __get_registry_objects(slice_xrn, creds, users): """ @@ -203,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("pg")) + return aggregate.get_rspec(slice_xrn=slice_xrn, version=RSpecVersion("protogeni")) def RenewSliver(api, xrn, creds, expiration_time, call_id): @@ -305,7 +304,7 @@ def ListResources(api, creds, options,call_id): # get the rspec's return format from options rspec_version = RSpecVersion(options.get('rspec_version', 'SFA 1')) - version_string = "rspec_%s_%s" % (rspec_version.format, rspec_version.version) + version_string = "rspec_%s" % (rspec_version.get_version_name()) # look in cache first if caching and api.cache and not xrn: diff --git a/sfa/managers/slice_manager_pl.py b/sfa/managers/slice_manager_pl.py index 01fd43b2..acf7864c 100644 --- a/sfa/managers/slice_manager_pl.py +++ b/sfa/managers/slice_manager_pl.py @@ -28,6 +28,7 @@ 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 @@ -44,11 +45,12 @@ 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) - sm_version=version_core({'interface':'slicemgr', - 'hrn' : xrn.get_hrn(), - 'urn' : xrn.get_urn(), - 'peers': peers, - }) + version_more = {'interface':'slicemgr', + 'hrn' : xrn.get_hrn(), + 'urn' : xrn.get_urn(), + 'peers': peers,} + version_more.update(supported_rspecs) + sm_version=version_core(version_more) # local aggregate if present needs to have localhost resolved if api.hrn in api.aggregates: local_am_url=get_serverproxy_url(api.aggregates[api.hrn]) @@ -344,7 +346,7 @@ def ListResources(api, creds, options, call_id): # get the rspec's return format from options rspec_version = RSpecVersion(options.get('rspec_version', 'SFA 1')) - version_string = "rspec_%s_%s" % (rspec_version.format, rspec_version.version) + version_string = "rspec_%s" % (rspec_version.get_version_name()) # look in cache first if caching and api.cache and not xrn: diff --git a/sfa/plc/aggregate.py b/sfa/plc/aggregate.py index 1ba75d2d..9626d316 100644 --- a/sfa/plc/aggregate.py +++ b/sfa/plc/aggregate.py @@ -68,9 +68,10 @@ class Aggregate: self.prepare() rspec = None if version: - format = version.format - if format == 'pg': + if version['type'].lower() == 'protogeni': rspec = PGRSpec() + elif version['type'].lower() == 'sfa': + rspec = SfaRSpec() else: rspec = SfaRSpec() else: diff --git a/sfa/rspecs/rspec_version.py b/sfa/rspecs/rspec_version.py old mode 100644 new mode 100755 index 5caa5442..1c8a599d --- a/sfa/rspecs/rspec_version.py +++ b/sfa/rspecs/rspec_version.py @@ -1,31 +1,42 @@ #!/usr/bin/python from sfa.util.sfalogging import _SfaLogger +from sfa.rspecs.pl_rspec_version import default_rspec_version +class RSpecVersion(dict): -class RSpecVersion: + fields = {'type': None, + 'version': None, + 'schema': None, + 'namespace': None, + 'extensions': [] + } + def __init__(self, version={}): + + self.logger = _SfaLogger('/var/log/sfa.log') + dict.__init__(self, self.fields) - format = 'sfa' - version = '1' - schema = None - namespace = None - extensions = [] + if not version: + self.update(default_rspec_version) + elif isinstance(version, dict): + self.update(version) + elif isinstance(version, basestring): + version_parts = version.split(' ') + num_parts = len(version_parts) + self['type'] = version_parts[0] + if num_parts > 1: + self['version'] = version_parts[1] + else: + logger.info("Unable to parse rspec version, using default") - def __init__(self, version_string): - self.logger = _SfaLogger('/var/log/sfa.log') - self.parse_version_string(version_string) + def get_version_name(self): + return "%s %s" % (str(self['type']), str(self['version'])) - def parse_version_string(self, version_string): - # version_raw is currently a string but will - # eventually be a struct. - format_split = version_string.split(' ') - try: self.format = format_split[0].lower() - except: pass - try: self.version = format_split[1] - except: pass - +if __name__ == '__main__': + + from sfa.rspecs.pl_rspec_version import ad_rspec_versions + for version in [RSpecVersion(), + RSpecVersion("SFA"), + RSpecVersion("SFA 1"), + RSpecVersion(ad_rspec_versions[0])]: + print version.get_version_name() + ": " + str(version) - def parse_version_struct(self, version_struct): - try: - pass - except: - pass diff --git a/sfa/util/version.py.in b/sfa/util/version.py.in index 37490233..52913281 100644 --- a/sfa/util/version.py.in +++ b/sfa/util/version.py.in @@ -2,7 +2,7 @@ version_tag="@VERSIONTAG@" scm_url="@SCMURL@" import socket - + def version_core (more={}): core = { 'geni_api':1, 'sfa' : 1, -- 2.43.0