X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fmanagers%2Faggregate_manager_vini.py;h=d961443590d024c3c453ff3307443f3a077007cf;hb=5307e4e09dd0a7982f0c6dfdd13065425c802005;hp=51b74d584699c0a4eb2c8b98e58fa69aa5318b64;hpb=a4b3bb98c2a7705152fcfaae9f164a61ca22ac1b;p=sfa.git diff --git a/sfa/managers/aggregate_manager_vini.py b/sfa/managers/aggregate_manager_vini.py index 51b74d58..d9614435 100644 --- a/sfa/managers/aggregate_manager_vini.py +++ b/sfa/managers/aggregate_manager_vini.py @@ -1,13 +1,11 @@ -### $Id: slices.py 15842 2009-11-22 09:56:13Z anil $ -### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/plc/slices.py $ - import datetime import time import traceback import sys from types import StringTypes -from sfa.util.namespace import * +from sfa.util.xrn import urn_to_hrn, Xrn +from sfa.util.plxrn import hrn_to_pl_slicename from sfa.util.rspec import * from sfa.util.specdict import * from sfa.util.faults import * @@ -16,60 +14,50 @@ from sfa.util.policy import Policy from sfa.util.record import * from sfa.util.sfaticket import SfaTicket from sfa.server.registry import Registries -from sfa.util.debug import log from sfa.plc.slices import Slices import sfa.plc.peers as peers from sfa.managers.vini.vini_network import * from sfa.plc.api import SfaAPI from sfa.plc.slices import * from sfa.managers.aggregate_manager_pl import __get_registry_objects, __get_hostnames +from sfa.util.version import version_core +from sfa.util.callids import Callids # VINI aggregate is almost identical to PLC aggregate for many operations, # so lets just import the methods form the PLC manager - from sfa.managers.aggregate_manager_pl import ( -start_slice, stop_slice, renew_slice, reset_slice, get_slices, get_ticket) - - -def get_version(): - version = {} - version['geni_api'] = 1 - version['sfa'] = 1 - return version +start_slice, stop_slice, renew_slice, reset_slice, get_slices, get_ticket, slice_status) -def slice_status(api, slice_xrn, creds): - result = {} - result['geni_urn'] = slice_xrn - result['geni_status'] = 'unknown' - result['geni_resources'] = {} - return result +def GetVersion(api): + xrn=Xrn(api.hrn) + return version_core({'interface':'aggregate', + 'testbed':'myplc.vini', + 'hrn':xrn.get_hrn(), + }) -def delete_slice(api, xrn, creds): - hrn, type = urn_to_hrn(xrn) +def DeleteSliver(api, xrn, creds, call_id): + if Callids().already_handled(call_id): return "" + (hrn, type) = urn_to_hrn(xrn) slicename = hrn_to_pl_slicename(hrn) slices = api.plshell.GetSlices(api.plauth, {'name': slicename}) if not slices: return 1 slice = slices[0] - # determine if this is a peer slice - peer = peers.get_peer(api, hrn) - if peer: - api.plshell.UnBindObjectFromPeer(api.plauth, 'slice', slice['slice_id'], peer) api.plshell.DeleteSliceFromNodes(api.plauth, slicename, slice['node_ids']) - if peer: - api.plshell.BindObjectToPeer(api.plauth, 'slice', slice['slice_id'], peer, slice['peer_slice_id']) return 1 -def create_slice(api, xrn, creds, xml, users): +def CreateSliver(api, xrn, creds, xml, users, call_id): """ Verify HRN and initialize the slice record in PLC if necessary. """ + if Callids().already_handled(call_id): return "" + hrn, type = urn_to_hrn(xrn) peer = None - reg_objects = __get_registry_objects(slice_xrn, creds, users) + reg_objects = __get_registry_objects(xrn, creds, users) slices = Slices(api) peer = slices.get_peer(hrn) sfa_peer = slices.get_sfa_peer(hrn) @@ -96,42 +84,49 @@ def create_slice(api, xrn, creds, xml, users): # add nodes from rspec added_nodes = list(set(request).difference(current)) - if peer: - api.plshell.UnBindObjectFromPeer(api.plauth, 'slice', slice.id, peer) - api.plshell.AddSliceToNodes(api.plauth, slice.name, added_nodes) api.plshell.DeleteSliceFromNodes(api.plauth, slice.name, deleted_nodes) - network.updateSliceTags() - if peer: - api.plshell.BindObjectToPeer(api.plauth, 'slice', slice.id, peer, - slice.peer_id) - - # print network.toxml() - - return True + # xxx - check this holds enough data for the client to understand what's happened + return network.toxml() -def get_rspec(api, xrn=None, origin_hrn=None): +def ListResources(api, creds, options,call_id): + if Callids().already_handled(call_id): return "" + # get slice's hrn from options + xrn = options.get('geni_slice_urn', '') hrn, type = urn_to_hrn(xrn) + + # look in cache first + if api.cache and not xrn: + rspec = api.cache.get('nodes') + if rspec: + return rspec + network = ViniNetwork(api) if (hrn): if network.get_slice(api, hrn): network.addSlice() - return network.toxml() + rspec = network.toxml() + + # cache the result + if api.cache and not xrn: + api.cache.add('nodes', rspec) + + return rspec def main(): api = SfaAPI() """ - #rspec = get_rspec(api, None, None) - rspec = get_rspec(api, "plc.princeton.iias", None) + #rspec = ListResources(api, None, None,) + rspec = ListResources(api, "plc.princeton.iias", None, 'vini_test') print rspec """ f = open(sys.argv[1]) xml = f.read() f.close() - create_slice(api, "plc.princeton.iias", xml) + CreateSliver(api, "plc.princeton.iias", xml, 'call-id-iias') if __name__ == "__main__": main()