use sfa.rspecs.version_manager.VersionManager to parse rspec versions. Use sfa.rspecs...
authorTony Mack <tmack@paris.CS.Princeton.EDU>
Sat, 1 Oct 2011 02:29:50 +0000 (22:29 -0400)
committerTony Mack <tmack@paris.CS.Princeton.EDU>
Sat, 1 Oct 2011 02:29:50 +0000 (22:29 -0400)
sfa/managers/aggregate_manager_pl.py
sfa/plc/aggregate.py

index f723f49..2c2a696 100644 (file)
@@ -24,23 +24,29 @@ from sfa.plc.api import SfaAPI
 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)
 
@@ -178,8 +184,8 @@ def CreateSliver(api, slice_xrn, creds, rspec_string, users, call_id):
         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)
@@ -191,7 +197,7 @@ def CreateSliver(api, slice_xrn, creds, rspec_string, users, call_id):
     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.
@@ -298,13 +304,14 @@ def ListResources(api, creds, options,call_id):
     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:
index ef4705b..d678dbe 100644 (file)
@@ -1,9 +1,10 @@
 #!/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:
 
@@ -77,18 +78,18 @@ 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
@@ -113,9 +114,9 @@ class Aggregate:
             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:
@@ -127,7 +128,7 @@ class Aggregate:
                 # 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:
@@ -144,6 +145,6 @@ class Aggregate:
                             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)