merged
[sfa.git] / sfa / managers / slice_manager_pl.py
index 01b3b55..0f7774f 100644 (file)
@@ -99,7 +99,7 @@ def add_slicemgr_stat(rspec, callname, aggname, elapsed, status):
         if stats_tags:
             stats_tag = stats_tags[0]
         else:
-            stats_tag = etree.SubElement(rspec.xml, "statistics", call=callname)
+            stats_tag = etree.SubElement(rspec.xml.root, "statistics", call=callname)
 
         etree.SubElement(stats_tag, "aggregate", name=str(aggname), elapsed=str(elapsed), status=str(status))
     except Exception, e:
@@ -118,11 +118,11 @@ 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'] = version_manager.get_version('ProtoGENI 1')
+                my_opts['rspec_version'] = version_manager.get_version('ProtoGENI 2').to_dict()
             rspec = server.ListResources(*args)
             return {"aggregate": aggregate, "rspec": rspec, "elapsed": time.time()-tStart, "status": "success"}
         except Exception, e:
-            api.logger.warn("ListResources failed at %s: %s" %(server.url, str(e)))
+            api.logger.log_exc("ListResources failed at %s: %s" %(server.url))
             return {"aggregate": aggregate, "elapsed": time.time()-tStart, "status": "exception"}
 
     if Callids().already_handled(call_id): return ""
@@ -165,7 +165,11 @@ def ListResources(api, creds, options, call_id):
 
     results = threads.get_results()
     rspec_version = version_manager.get_version(options.get('rspec_version'))
-    rspec = RSpec(version=rspec_version)
+    if xrn:    
+        result_version = version_manager._get_version(rspec_version.type, rspec_version.version, 'manifest')
+    else: 
+        result_version = version_manager._get_version(rspec_version.type, rspec_version.version, 'ad')
+    rspec = RSpec(version=result_version)
     for result in results:
         add_slicemgr_stat(rspec, "ListResources", result["aggregate"], result["elapsed"], result["status"])
         if result["status"]=="success":
@@ -190,11 +194,13 @@ def CreateSliver(api, xrn, creds, rspec_str, users, call_id):
             # Need to call GetVersion at an aggregate to determine the supported
             # rspec type/format beofre calling CreateSliver at an Aggregate.
             server_version = api.get_cached_server_version(server)
+            requested_users = users
             if 'sfa' not in server_version and 'geni_api' in server_version:
                 # sfa aggregtes support both sfa and pg rspecs, no need to convert
                 # if aggregate supports sfa rspecs. otherwise convert to pg rspec
-                rspec = RSpecConverter.to_pg_rspec(rspec)
-            args = [xrn, credential, rspec, users]
+                rspec = RSpecConverter.to_pg_rspec(rspec, 'request')
+                requested_users = sfa_to_pg_users(users)
+            args = [xrn, credential, rspec, requested_users]
             if _call_id_supported(api, server):
                 args.append(call_id)
             rspec = server.CreateSliver(*args)
@@ -236,15 +242,16 @@ 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()
-    result_rspec = RSpec(version=rspec.version)
+    manifest_version = version_manager._get_version(rspec.version.type, rspec.version.version, 'manifest')
+    result_rspec = RSpec(version=manifest_version)
     for result in results:
-        add_slicemgr_stat(rspec, "CreateSliver", result["aggregate"], result["elapsed"], result["status"])
+        add_slicemgr_stat(result_rspec, "CreateSliver", result["aggregate"], result["elapsed"], result["status"])
         if result["status"]=="success":
             try:
                 result_rspec.version.merge(result["rspec"])
             except:
                 api.logger.log_exc("SM.CreateSliver: Failed to merge aggregate rspec")
-    return rspec.toxml()
+    return result_rspec.toxml()
 
 def RenewSliver(api, xrn, creds, expiration_time, call_id):
     def _RenewSliver(server, xrn, creds, expiration_time, call_id):