Merge branch 'thgeneric' of ssh://git.onelab.eu/git/sfa into thgeneric
[sfa.git] / sfa / managers / slice_manager.py
index b84ef71..685e67a 100644 (file)
@@ -8,12 +8,12 @@ from sfa.trust.sfaticket import SfaTicket
 from sfa.trust.credential import Credential
 
 from sfa.util.sfalogging import logger
-from sfa.util.rspecHelper import merge_rspecs
 from sfa.util.xrn import Xrn, urn_to_hrn
-from sfa.util.threadmanager import ThreadManager
 from sfa.util.version import version_core
 from sfa.util.callids import Callids
 
+from sfa.server.threadmanager import ThreadManager
+
 from sfa.rspecs.rspec_converter import RSpecConverter
 from sfa.rspecs.version_manager import VersionManager
 from sfa.rspecs.rspec import RSpec 
@@ -150,7 +150,7 @@ def ListResources(api, creds, options, call_id):
 
         # get the rspec from the aggregate
         interface = api.aggregates[aggregate]
-        server = api.get_server(interface, cred)
+        server = api.server_proxy(interface, cred)
         threads.run(_ListResources, aggregate, server, [cred], options, call_id)
 
 
@@ -232,7 +232,7 @@ def CreateSliver(api, xrn, creds, rspec_str, users, call_id):
         if caller_hrn == aggregate and aggregate != api.hrn:
             continue
         interface = api.aggregates[aggregate]
-        server = api.get_server(interface, cred)
+        server = api.server_proxy(interface, cred)
         # Just send entire RSpec to each aggregate
         threads.run(_CreateSliver, aggregate, server, xrn, [cred], rspec.toxml(), users, call_id)
             
@@ -274,7 +274,7 @@ def RenewSliver(api, xrn, creds, expiration_time, call_id):
         if caller_hrn == aggregate and aggregate != api.hrn:
             continue
         interface = api.aggregates[aggregate]
-        server = api.get_server(interface, cred)
+        server = api.server_proxy(interface, cred)
         threads.run(_RenewSliver, server, xrn, [cred], expiration_time, call_id)
     # 'and' the results
     return reduce (lambda x,y: x and y, threads.get_results() , True)
@@ -304,7 +304,7 @@ def DeleteSliver(api, xrn, creds, call_id):
         if caller_hrn == aggregate and aggregate != api.hrn:
             continue
         interface = api.aggregates[aggregate]
-        server = api.get_server(interface, cred)
+        server = api.server_proxy(interface, cred)
         threads.run(_DeleteSliver, server, xrn, [cred], call_id)
     threads.get_results()
     return 1
@@ -327,7 +327,7 @@ def SliverStatus(api, slice_xrn, creds, call_id):
     threads = ThreadManager()
     for aggregate in api.aggregates:
         interface = api.aggregates[aggregate]
-        server = api.get_server(interface, cred)
+        server = api.server_proxy(interface, cred)
         threads.run (_SliverStatus, server, slice_xrn, [cred], call_id)
     results = threads.get_results()
 
@@ -386,7 +386,7 @@ def ListSlices(api, creds, call_id):
         if caller_hrn == aggregate and aggregate != api.hrn:
             continue
         interface = api.aggregates[aggregate]
-        server = api.get_server(interface, cred)
+        server = api.server_proxy(interface, cred)
         threads.run(_ListSlices, server, [cred], call_id)
 
     # combime results
@@ -428,13 +428,13 @@ def get_ticket(api, xrn, creds, rspec, users):
             continue
         
         interface = api.aggregates[aggregate]
-        server = api.get_server(interface, cred)
+        server = api.server_proxy(interface, cred)
         threads.run(server.GetTicket, xrn, [cred], aggregate_rspec, users)
 
     results = threads.get_results()
     
     # gather information from each ticket 
-    rspecs = []
+    rspec = None
     initscripts = []
     slivers = [] 
     object_gid = None  
@@ -443,15 +443,17 @@ def get_ticket(api, xrn, creds, rspec, users):
         attrs = agg_ticket.get_attributes()
         if not object_gid:
             object_gid = agg_ticket.get_gid_object()
-        rspecs.append(agg_ticket.get_rspec())
+        if not rspec:
+            rspec = RSpec(agg_ticket.get_rspec())
+        else:
+            rspec.version.merge(agg_ticket.get_rspec())
         initscripts.extend(attrs.get('initscripts', [])) 
         slivers.extend(attrs.get('slivers', [])) 
     
     # merge info
     attributes = {'initscripts': initscripts,
                  'slivers': slivers}
-    merged_rspec = merge_rspecs(rspecs) 
-
+    
     # create a new ticket
     ticket = SfaTicket(subject = slice_hrn)
     ticket.set_gid_caller(api.auth.client_gid)
@@ -460,7 +462,7 @@ def get_ticket(api, xrn, creds, rspec, users):
     ticket.set_pubkey(object_gid.get_pubkey())
     #new_ticket.set_parent(api.auth.hierarchy.get_auth_ticket(auth_hrn))
     ticket.set_attributes(attributes)
-    ticket.set_rspec(merged_rspec)
+    ticket.set_rspec(rspec.toxml())
     ticket.encode()
     ticket.sign()          
     return ticket.save_to_string(save_parents=True)
@@ -483,7 +485,7 @@ def start_slice(api, xrn, creds):
         if caller_hrn == aggregate and aggregate != api.hrn:
             continue
         interface = api.aggregates[aggregate]
-        server = api.get_server(interface, cred)    
+        server = api.server_proxy(interface, cred)    
         threads.run(server.Start, xrn, cred)
     threads.get_results()    
     return 1
@@ -506,7 +508,7 @@ def stop_slice(api, xrn, creds):
         if caller_hrn == aggregate and aggregate != api.hrn:
             continue
         interface = api.aggregates[aggregate]
-        server = api.get_server(interface, cred)
+        server = api.server_proxy(interface, cred)
         threads.run(server.Stop, xrn, cred)
     threads.get_results()    
     return 1