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.sfa_rspec import sfa_rspec_version
-from sfa.rspecs.pg_rspec import pg_rspec_ad_version, pg_rspec_request_version
-from sfa.rspecs.rspec_parser import parse_rspec
+from sfa.rspecs.version_manager import VersionManager
+from sfa.rspecs.rspec import RSpec
from sfa.util.sfatime import utcparse
from sfa.util.callids import Callids
def GetVersion(api):
+
+ 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)
- 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_more = {'interface':'aggregate',
'testbed':'myplc',
'hrn':xrn.get_hrn(),
'request_rspec_versions': request_rspec_versions,
'ad_rspec_versions': ad_rspec_versions,
- 'default_ad_rspec': dict(sfa_rspec_version)
+ 'default_ad_rspec': default_rspec_version
}
return version_core(version_more)
slice_record = users[0].get('slice_record', {})
# parse rspec
- rspec = parse_rspec(rspec_string)
- requested_attributes = rspec.get_slice_attributes()
+ rspec = RSpec(rspec_string)
+ requested_attributes = rspec.version.get_slice_attributes()
# ensure site record exists
site = slices.verify_site(hrn, slice_record, peer, sfa_peer)
slices.verify_slice_attributes(slice, requested_attributes)
# add/remove slice from nodes
- requested_slivers = [str(host) for host in rspec.get_nodes_with_slivers()]
+ requested_slivers = [str(host) for host in rspec.version.get_nodes_with_slivers()]
slices.verify_slice_nodes(slice, requested_slivers, peer)
# hanlde MyPLC peer association.
xrn = options.get('geni_slice_urn', '')
(hrn, type) = urn_to_hrn(xrn)
+ version_manager = VersionManager()
# 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())
#panos adding the info option to the caching key (can be improved)
if options.get('info'):
- version_string = version_string + "_"+options.get('info', 'default')
+ version_string = version_string + "_"+options.get('info', 'default')
# look in cache first
if caching and api.cache and not xrn:
#!/usr/bin/python
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
+#from sfa.rspecs.sfa_rspec import SfaRSpec
+#from sfa.rspecs.pg_rspec import PGRSpec
+#from sfa.rspecs.rspec_version import RSpecVersion
+from sfa.rspecs.rspec import RSpec
class Aggregate:
def get_rspec(self, slice_xrn=None, version = None):
self.prepare()
- rspec = None
- rspec_version = RSpecVersion(version)
- if slice_xrn:
- type = 'manifest'
- else:
- type = 'advertisement'
- if rspec_version['type'].lower() == 'protogeni':
- rspec = PGRSpec(type=type)
- elif rspec_version['type'].lower() == 'sfa':
- rspec = SfaRSpec(type=type, user_options=self.user_options)
- else:
- rspec = SfaRSpec(type=type, user_options=self.user_options)
+ rspec = RSpec(version=version, user_options=self.user_options)
+ #rspec_version = RSpecVersion(version)
+ #if slice_xrn:
+ # type = 'manifest'
+ #else:
+ # type = 'advertisement'
+ #if rspec_version['type'].lower() == 'protogeni':
+ # rspec = PGRSpec(type=type)
+ #elif rspec_version['type'].lower() == 'sfa':
+ # rspec = SfaRSpec(type=type, user_options=self.user_options)
+ #else:
+ # rspec = SfaRSpec(type=type, user_options=self.user_options)
# get slice details if specified
slice = None
elif not slice and not node['slice_ids_whitelist']:
valid_nodes.append(node)
- rspec.add_nodes(valid_nodes)
- rspec.add_interfaces(self.interfaces.values())
- rspec.add_links(self.links.values())
+ rspec.version.add_nodes(valid_nodes)
+ rspec.version.add_interfaces(self.interfaces.values())
+ rspec.version.add_links(self.links.values())
# add slivers
if slice_xrn and slice:
# if tag isn't bound to a node then it applies to all slivers
# and belongs in the <sliver_defaults> tag
if not tag['node_id']:
- rspec.add_default_sliver_attribute(tag['tagname'], tag['value'], self.api.hrn)
+ rspec.version.add_default_sliver_attribute(tag['tagname'], tag['value'], self.api.hrn)
for node_id in slice['node_ids']:
try:
sliver['tags'].append(tag)
except:
self.api.logger.log_exc('unable to add sliver %s to node %s' % (slice['name'], node_id))
- rspec.add_slivers(slivers, sliver_urn=slice_xrn)
+ rspec.version.add_slivers(slivers, sliver_urn=slice_xrn)
return rspec.toxml(cleanup=True)