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)
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)
+#!/usr/bin/python
+
import datetime
import time
import traceback
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):
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):
(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
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 *
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:
(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
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 = '<?xml version="1.0"?>\n'
template = """<rspec xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.protogeni.net/resources/rspec/0.2" xsi:schemaLocation="http://www.protogeni.net/resources/rspec/0.2 http://www.protogeni.net/resources/rspec/0.2/ad.xsd"></rspec>"""
- 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
+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
config = Config()
xml = None
type = None
+ version = None
def __init__(self, rspec="", namespaces={}):
if rspec:
@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
@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
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
#!/usr/bin/python
from sfa.util.sfalogging import _SfaLogger
-from sfa.rspecs.pl_rspec_version import default_rspec_version
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):
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