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",
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):
"""
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):
# 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:
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
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])
# 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:
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:
#!/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
version_tag="@VERSIONTAG@"
scm_url="@SCMURL@"
import socket
-
+
def version_core (more={}):
core = { 'geni_api':1,
'sfa' : 1,