use sfa.rspecs.version_manager instead of sfa.rspecs.rspec_version
authorTony Mack <tmack@paris.CS.Princeton.EDU>
Sat, 1 Oct 2011 04:05:28 +0000 (00:05 -0400)
committerTony Mack <tmack@paris.CS.Princeton.EDU>
Sat, 1 Oct 2011 04:05:28 +0000 (00:05 -0400)
sfa/managers/slice_manager_pl.py

index 7b57e0f..bbf8eda 100644 (file)
@@ -15,13 +15,9 @@ from sfa.util.rspec import *
 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 *
@@ -64,9 +60,16 @@ def GetVersion(api):
     # 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(),
@@ -103,6 +106,7 @@ def add_slicemgr_stat(rspec, callname, aggname, elapsed, status):
         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)
@@ -114,7 +118,7 @@ def ListResources(api, creds, options, call_id):
             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:
@@ -130,8 +134,8 @@ def ListResources(api, creds, options, call_id):
         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:
@@ -160,17 +164,13 @@ def ListResources(api, creds, options, call_id):
         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")
 
@@ -183,6 +183,7 @@ def ListResources(api, creds, options, call_id):
 
 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:
@@ -206,7 +207,7 @@ def CreateSliver(api, xrn, creds, rspec_str, users, call_id):
     # 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)
@@ -235,12 +236,12 @@ def CreateSliver(api, xrn, creds, rspec_str, users, call_id):
         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()