fix for name error
[sfa.git] / sfa / managers / slice_manager_pl.py
index dda726a..665ac39 100644 (file)
@@ -7,11 +7,11 @@ import traceback
 import sys
 
 from types import StringTypes
-from sfa.util.misc import *
+from sfa.util.namespace import *
 from sfa.util.rspec import *
 from sfa.util.specdict import *
 from sfa.util.faults import *
-from sfa.util.record import GeniRecord
+from sfa.util.record import SfaRecord
 from sfa.util.policy import Policy
 from sfa.util.prefixTree import prefixTree
 from sfa.util.rspec import *
@@ -21,34 +21,22 @@ from sfa.server.registry import Registries
 from sfa.server.aggregate import Aggregates
 import sfa.plc.peers as peers
 
-def delete_slice(api, hrn, gid_origin_caller=None):
+def delete_slice(api, xrn, origin_hrn=None):
     credential = api.getCredential()
-    credential.set_gid_origin_caller(gid_origin_caller)
     aggregates = Aggregates(api)
     for aggregate in aggregates:
         success = False
         # request hash is optional so lets try the call without it
         try:
-            request_hash=None
-            aggregates[aggregate].delete_slice(credential, hrn, request_hash, origin_hrn)
+            aggregates[aggregate].delete_slice(credential, xrn, origin_hrn)
             success = True
         except:
             print >> log, "%s" % (traceback.format_exc())
             print >> log, "Error calling delete slice at aggregate %s" % aggregate
-
-        # try sending the request hash if the previous call failed
-        if not success:
-            try:
-                arg_list = [credential, hrn]
-                request_hash = api.key.compute_hash(arg_list)
-                aggregates[aggregate].delete_slice(credential, hrn, request_hash)
-                success = True
-            except:
-                print >> log, "%s" % (traceback.format_exc())
-                print >> log, "Error calling list nodes at aggregate %s" % aggregate
     return 1
 
-def create_slice(api, hrn, rspec, gid_origin_caller=None):
+def create_slice(api, xrn, rspec, origin_hrn=None):
+    hrn, type = urn_to_hrn(xrn)
     spec = RSpec()
     tempspec = RSpec()
     spec.parseString(rspec)
@@ -63,7 +51,6 @@ def create_slice(api, hrn, rspec, gid_origin_caller=None):
     rspecs = {}
     aggregates = Aggregates(api)
     credential = api.getCredential()
-    credential.set_gid_origin_caller(gid_origin_caller)
     # split the netspecs into individual rspecs
     netspecs = spec.getDictsByTagName('NetSpec')
     for netspec in netspecs:
@@ -77,6 +64,7 @@ def create_slice(api, hrn, rspec, gid_origin_caller=None):
     #print "aggregates:", aggregates.keys() 
     # send each rspec to the appropriate aggregate/sm
     for net_hrn in rspecs:
+        net_urn = hrn_to_urn(net_hrn, 'authority')
         try:
             # if we are directly connected to the aggregate then we can just 
             # send them the rspec. if not, then we may be connected to an sm 
@@ -84,44 +72,18 @@ def create_slice(api, hrn, rspec, gid_origin_caller=None):
             if net_hrn in aggregates:
                 # send the whloe rspec to the local aggregate
                 if net_hrn in [api.hrn]:
-                    try:
-                        request_hash = None
-                        aggregates[net_hrn].create_slice(credential, hrn, \
-                                        rspec, request_hash)
-                    except:
-                        arg_list = [credential,hrn,rspec]
-                        request_hash = api.key.compute_hash(arg_list)
-                        aggregates[net_hrn].create_slice(credential, hrn, \
-                                        rspec, request_hash)
+                    aggregates[net_hrn].create_slice(credential, xrn, rspec, \
+                                origin_hrn)
                 else:
-                    try:
-                        request_hash = None
-                        aggregates[net_hrn].create_slice(credential, hrn, \
-                                rspecs[net_hrn], request_hash)
-                    except:
-                        arg_list = [credential,hrn,rspecs[net_hrn]]
-                        request_hash = api.key.compute_hash(arg_list)
-                        aggregates[net_hrn].create_slice(credential, hrn, \
-                                rspecs[net_hrn], request_hash)
+                    aggregates[net_hrn].create_slice(credential, xrn, \
+                                rspecs[net_hrn], origin_hrn)
             else:
                 # lets forward this rspec to a sm that knows about the network
-                arg_list = [credential, net_hrn]
-                request_hash = api.key.compute_hash(arg_list)
                 for aggregate in aggregates:
-                    try:
-                        network_found = aggregates[aggregate].get_aggregates(credential, net_hrn)
-                    except:
-                        network_found = aggregates[aggregate].get_aggregates(credential, net_hrn, request_hash)
+                    network_found = aggregates[aggregate].get_aggregates(credential, net_hrn)
                     if network_found:
-                        try:
-                            request_hash = None
-                            aggregates[aggregate].create_slice(credential, hrn, \
-                                    rspecs[net_hrn], request_hash, origin_hrn)
-                        except:
-                            arg_list = [credential, hrn, rspecs[net_hrn]]
-                            request_hash = api.key.compute_hash(arg_list)
-                            aggregates[aggregate].create_slice(credential, hrn, \
-                                    rspecs[net_hrn], request_hash, origin_hrn)
+                        aggregates[aggregate].create_slice(credential, xrn, \
+                                    rspecs[net_hrn], origin_hrn)
 
         except:
             print >> log, "Error creating slice %(hrn)s at aggregate %(net_hrn)s" % \
@@ -129,8 +91,8 @@ def create_slice(api, hrn, rspec, gid_origin_caller=None):
             traceback.print_exc()
     return 1
 
-def get_ticket(api, slice_hrn, rspec, origin_hrn=None):
-    
+def get_ticket(api, xrn, rspec, origin_hrn=None):
+    slice_hrn, type = urn_to_hrn(xrn)
     # get the netspecs contained within the clients rspec
     client_rspec = RSpec(xml=rspec)
     netspecs = client_rspec.getDictsByTagName('NetSpec')
@@ -150,44 +112,24 @@ def get_ticket(api, slice_hrn, rspec, origin_hrn=None):
     aggregates = Aggregates(api)
     credential = api.getCredential()
     tickets = {}
-    for net_hrn in rspecs:    
+    for net_hrn in rspecs:
+        net_urn = urn_to_hrn(net_hrn, 'authority')     
         try:
             # if we are directly connected to the aggregate then we can just
             # send them the request. if not, then we may be connected to an sm
             # thats connected to the aggregate
             if net_hrn in aggregates:
-                try:
-                    ticket = aggregates[net_hrn].get_ticket(credential, slice_hrn, \
-                                rspecs[net_hrn], None, origin_hrn)
-                    tickets[net_hrn] = ticket
-                except:
-                    arg_list = [credential,hrn,rspecs[net_hrn]]
-                    request_hash = api.key.compute_hash(arg_list)
-                    ticket = aggregates[net_hrn].get_ticket(credential, slice_hrn, \
-                                rspecs[net_hrn], request_hash, origin_hrn)
-                    tickets[net_hrn] = ticket 
+                ticket = aggregates[net_hrn].get_ticket(credential, xrn, \
+                            rspecs[net_hrn], origin_hrn)
+                tickets[net_hrn] = ticket
             else:
                 # lets forward this rspec to a sm that knows about the network
-                arg_list = [credential, net_hrn]
-                request_hash = api.key.compute_hash(arg_list)
                 for agg in aggregates:
-                    try:
-                        network_found = aggregates[agg].get_aggregates(credential, \
-                                                        net_hrn)
-                    except:
-                        network_found = aggregates[agg].get_aggregates(credential, \
-                                                        net_hrn, request_hash)
+                    network_found = aggregates[agg].get_aggregates(credential, net_urn)
                     if network_found:
-                        try:
-                            ticket = aggregates[aggregate].get_ticket(credential, \
-                                        slice_hrn, rspecs[net_hrn], None, origin_hrn)
-                            tickets[aggregate] = ticket
-                        except:
-                            arg_list = [credential, hrn, rspecs[net_hrn]]
-                            request_hash = api.key.compute_hash(arg_list)
-                            aggregates[aggregate].get_ticket(credential, slice_hrn, \
-                                    rspecs[net_hrn], request_hash, origin_hrn)
-                            tickets[aggregate] = ticket
+                        ticket = aggregates[aggregate].get_ticket(credential, \
+                                        slice_hrn, rspecs[net_hrn], origin_hrn)
+                        tickets[aggregate] = ticket
         except:
             print >> log, "Error getting ticket for %(slice_hrn)s at aggregate %(net_hrn)s" % \
                            locals()
@@ -221,7 +163,8 @@ def get_ticket(api, slice_hrn, rspec, origin_hrn=None):
     new_ticket.sign()          
     return new_ticket.save_to_string(save_parents=True)
 
-def start_slice(api, hrn, origin_hrn=None):
+def start_slice(api, xrn):
+    hrn, type = urn_to_hrn(xrn)
     slicename = hrn_to_pl_slicename(hrn)
     slices = api.plshell.GetSlices(api.plauth, {'name': slicename}, ['slice_id'])
     if not slices:
@@ -233,7 +176,8 @@ def start_slice(api, hrn, origin_hrn=None):
 
     return 1
  
-def stop_slice(api, hrn, origin_hrn):
+def stop_slice(api, xrn):
+    hrn, type = urn_to_hrn(xrn)
     slicename = hrn_to_pl_slicename(hrn)
     slices = api.plshell.GetSlices(api.plauth, {'name': slicename}, ['slice_id'])
     if not slices:
@@ -244,7 +188,7 @@ def stop_slice(api, hrn, origin_hrn):
     api.plshell.UpdateSliceTag(api.plauth, attribute_id, "0")
     return 1
 
-def reset_slice(api, hrn, origin_hrn):
+def reset_slice(api, xrn):
     # XX not implemented at this interface
     return 1
 
@@ -254,13 +198,14 @@ def get_slices(api):
     from sfa.plc.slices import Slices
     slices = Slices(api)
     slices.refresh()
-    return slices['hrn']
+    return [hrn_to_urn(slice_hrn, 'slice') for slice_hrn in slices['hrn']]
      
-def get_rspec(api, hrn=None, origin_gid_caller=None):
+def get_rspec(api, xrn=None, origin_hrn=None):
+    
     from sfa.plc.nodes import Nodes
-    nodes = Nodes(api, origin_gid_caller=origin_gid_caller)
-    if hrn:
-        rspec = nodes.get_rspec(hrn)
+    nodes = Nodes(api, origin_hrn=origin_hrn)
+    if xrn:
+        rspec = nodes.get_rspec(xrn)
     else:
         nodes.refresh()
         rspec = nodes['rspec']
@@ -273,6 +218,8 @@ to refer to "contexts", which is the information that sfatables is requesting. B
 return the basic information needed in a dict.
 """
 def fetch_context(slice_hrn, user_hrn, contexts):
+    slice_hrn = urn_to_hrn(slice_xrn)[0]
+    user_hrn = urn_to_hrn(user_xrn)[0]
     base_context = {'sfa':{'user':{'hrn':user_hrn}}}
     return base_context