X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fmanagers%2Fslice_manager_pl.py;h=dd80ddd74f7b7bd2a5c485d57fc6b688eb6acfba;hb=3d7237fa0b5f2b4a60cb97c7fb3b6aecfd94558a;hp=28ca8d9a4501188bfbded507009b868c9c55950e;hpb=d955087267f52addacb65bf5ce775e95823d683a;p=sfa.git diff --git a/sfa/managers/slice_manager_pl.py b/sfa/managers/slice_manager_pl.py index 28ca8d9a..dd80ddd7 100644 --- a/sfa/managers/slice_manager_pl.py +++ b/sfa/managers/slice_manager_pl.py @@ -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 * @@ -28,23 +28,11 @@ def delete_slice(api, hrn, origin_hrn=None): 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, hrn, 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, origin_hrn) - 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, origin_hrn=None): @@ -62,7 +50,6 @@ def create_slice(api, hrn, rspec, origin_hrn=None): rspecs = {} aggregates = Aggregates(api) credential = api.getCredential() - # split the netspecs into individual rspecs netspecs = spec.getDictsByTagName('NetSpec') for netspec in netspecs: @@ -83,44 +70,18 @@ def create_slice(api, hrn, rspec, origin_hrn=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, origin_hrn) - except: - arg_list = [credential,hrn,rspec] - request_hash = api.key.compute_hash(arg_list) - aggregates[net_hrn].create_slice(credential, hrn, \ - rspec, request_hash, origin_hrn) + aggregates[net_hrn].create_slice(credential, hrn, rspec, \ + origin_hrn) else: - try: - request_hash = None - aggregates[net_hrn].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[net_hrn].create_slice(credential, hrn, \ - rspecs[net_hrn], request_hash, origin_hrn) + aggregates[net_hrn].create_slice(credential, hrn, \ + 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, hrn, \ + rspecs[net_hrn], origin_hrn) except: print >> log, "Error creating slice %(hrn)s at aggregate %(net_hrn)s" % \ @@ -155,40 +116,19 @@ def get_ticket(api, slice_hrn, rspec, origin_hrn=None): # 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, 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, hrn, \ - rspecs[net_hrn], request_hash, origin_hrn) - tickets[net_hrn] = ticket + ticket = aggregates[net_hrn].get_ticket(credential, slice_hrn, \ + 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_hrn) if network_found: - try: - ticket = aggregates[aggregate].get_ticket(credential, \ - 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, 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 %(hrn)s at aggregate %(net_hrn)s" % \ + print >> log, "Error getting ticket for %(slice_hrn)s at aggregate %(net_hrn)s" % \ locals() # create a new ticket @@ -196,7 +136,7 @@ def get_ticket(api, slice_hrn, rspec, origin_hrn=None): new_ticket.set_gid_caller(api.auth.client_gid) tmp_rspec = RSpec() - tmp_networks = [] + networks = [] valid_data = {} # merge data from aggregate ticket into new ticket for agg_ticket in tickets.values(): @@ -206,10 +146,9 @@ def get_ticket(api, slice_hrn, rspec, origin_hrn=None): new_ticket.set_issuer(key=api.key, subject=api.hrn) new_ticket.set_pubkey(object_gid.get_pubkey()) - #new_ticket.set_attributes(data) - tmp_rspec.parseString(agg_ticket.get_rspec) - newtworks.extend([{'NetSpec': rspec.getDictsByTagName('NetSpec')}]) + tmp_rspec.parseString(agg_ticket.get_rspec()) + networks.extend([{'NetSpec': tmp_rspec.getDictsByTagName('NetSpec')}]) #new_ticket.set_parent(api.auth.hierarchy.get_auth_ticket(auth_hrn)) resources = {'networks': networks, 'start_time': 0, 'duration': 0} @@ -219,8 +158,9 @@ def get_ticket(api, slice_hrn, rspec, origin_hrn=None): new_ticket.encode() new_ticket.sign() + return new_ticket.save_to_string(save_parents=True) -def start_slice(api, hrn, origin_hrn=None): +def start_slice(api, hrn): slicename = hrn_to_pl_slicename(hrn) slices = api.plshell.GetSlices(api.plauth, {'name': slicename}, ['slice_id']) if not slices: @@ -232,7 +172,7 @@ def start_slice(api, hrn, origin_hrn=None): return 1 -def stop_slice(api, hrn, origin_hrn): +def stop_slice(api, hrn): slicename = hrn_to_pl_slicename(hrn) slices = api.plshell.GetSlices(api.plauth, {'name': slicename}, ['slice_id']) if not slices: @@ -243,7 +183,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, hrn): # XX not implemented at this interface return 1