from sfa.util.specdict import *
from sfa.util.faults import *
from sfa.util.record import SfaRecord
-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.sfa_rspec import sfa_rspec_version
-from sfa.rspecs.pg_rspec import pg_rspec_ad_version, pg_rspec_request_version
+from sfa.rspecs.version_manager import VersionManager
+from sfa.rspecs.rspec import RSpec
from sfa.util.policy import Policy
from sfa.util.prefixTree import prefixTree
from sfa.util.sfaticket import *
# peers explicitly in aggregates.xml
peers =dict ([ (peername,get_serverproxy_url(v)) for (peername,v) in api.aggregates.iteritems()
if peername != api.hrn])
- xrn=Xrn (api.hrn)
- request_rspec_versions = [dict(pg_rspec_request_version), dict(sfa_rspec_version)]
- ad_rspec_versions = [dict(pg_rspec_ad_version), dict(sfa_rspec_version)]
+ version_manager = VersionManager()
+ ad_rspec_versions = []
+ request_rspec_versions = []
+ for rspec_version in version_manager.versions:
+ if rspec_version in ['*', 'ad']:
+ request_rspec_versions.append(rspec_version.to_dict())
+ if rspec_version in ['*', 'request']:
+ request_rspec_version.append(rspec_version.to_dict())
+ default_rspec_version = version_manager.get_version("sfa 1").to_dict()
+ xrn=Xrn(api.hrn)
version_more = {'interface':'slicemgr',
'hrn' : xrn.get_hrn(),
'urn' : xrn.get_urn(),
api.logger.warn("add_slicemgr_stat failed on %s: %s" %(aggname, str(e)))
def ListResources(api, creds, options, call_id):
+ version_manager = VersionManager()
def _ListResources(aggregate, server, credential, opts, call_id):
my_opts = copy(opts)
version = api.get_cached_server_version(server)
# force ProtoGENI aggregates to give us a v2 RSpec
if 'sfa' not in version.keys():
- my_opts['rspec_version'] = dict(pg_rspec_ad_version)
+ my_opts['rspec_version'] = version_manager.get_version('ProtoGENI 1')
rspec = server.ListResources(*args)
return {"aggregate": aggregate, "rspec": rspec, "elapsed": time.time()-tStart, "status": "success"}
except Exception, e:
del(options['geni_compressed'])
# get the rspec's return format from options
- rspec_version = RSpecVersion(options.get('rspec_version'))
- version_string = "rspec_%s" % (rspec_version.get_version_name())
+ rspec_version = version_manager.get_version(options.get('rspec_version'))
+ version_string = "rspec_%s" % (rspec_version.to_string())
# look in cache first
if caching and api.cache and not xrn:
threads.run(_ListResources, aggregate, server, credentials, options, call_id)
results = threads.get_results()
- rspec_version = RSpecVersion(options.get('rspec_version'))
- if rspec_version['type'] == pg_rspec_ad_version['type']:
- rspec = PGRSpec()
- else:
- rspec = SfaRSpec()
-
+ rspec_version = version_manager.get_version(options.get('rspec_version'))
+ rspec = RSpec(version=rspec_version)
for result in results:
add_slicemgr_stat(rspec, "ListResources", result["aggregate"], result["elapsed"], result["status"])
if result["status"]=="success":
try:
- rspec.merge(result["rspec"])
+ rspec.version.merge(result["rspec"])
except:
api.logger.log_exc("SM.ListResources: Failed to merge aggregate rspec")
def CreateSliver(api, xrn, creds, rspec_str, users, call_id):
+ version_manager = VersionManager()
def _CreateSliver(aggregate, server, xrn, credential, rspec, users, call_id):
tStart = time.time()
try:
# Validate the RSpec against PlanetLab's schema --disabled for now
# The schema used here needs to aggregate the PL and VINI schemas
# schema = "/var/www/html/schemas/pl.rng"
- rspec = parse_rspec(rspec_str)
+ rspec = RSpec(rspec_str)
schema = None
if schema:
rspec.validate(schema)
threads.run(_CreateSliver, aggregate, server, xrn, credential, rspec.toxml(), users, call_id)
results = threads.get_results()
- rspec = SfaRSpec()
+ result_rspec = RSpec(version=rspec.version)
for result in results:
add_slicemgr_stat(rspec, "CreateSliver", result["aggregate"], result["elapsed"], result["status"])
if result["status"]=="success":
try:
- rspec.merge(result["rspec"])
+ result_rspec.version.merge(result["rspec"])
except:
api.logger.log_exc("SM.CreateSliver: Failed to merge aggregate rspec")
return rspec.toxml()