X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fmanagers%2Faggregate_manager_pl.py;h=2a1fe0b04b14432b7361ec5aba506a40c17a5bd1;hb=11d02cbfd5e91784119bb9377fceb4fa6adae621;hp=34230e0802cabe353fe3460d0672e1738d687e1e;hpb=c6808303b7564ed7ba3bc888c4f6e56167a83e2a;p=sfa.git diff --git a/sfa/managers/aggregate_manager_pl.py b/sfa/managers/aggregate_manager_pl.py index 34230e08..2a1fe0b0 100644 --- a/sfa/managers/aggregate_manager_pl.py +++ b/sfa/managers/aggregate_manager_pl.py @@ -7,18 +7,21 @@ 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.debug import log +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 -def delete_slice(api, hrn): +def delete_slice(api, xrn): + hrn, type = urn_to_hrn(xrn) slicename = hrn_to_pl_slicename(hrn) slices = api.plshell.GetSlices(api.plauth, {'name': slicename}) if not slices: @@ -34,14 +37,61 @@ def delete_slice(api, hrn): api.plshell.BindObjectToPeer(api.plauth, 'slice', slice['slice_id'], peer, slice['peer_slice_id']) return 1 -def create_slice(api, hrn, rspec): +def create_slice(api, xrn, rspec): + hrn, type = urn_to_hrn(xrn) # XX just import the legacy module and excute that until # we transition the code to this module from sfa.plc.slices import Slices slices = Slices(api) - slices.create_slice(hrn, rspec) + slices.create_slice_aggregate(hrn, rspec) + +def get_ticket(api, xrn, rspec, origin_hrn=None): + slice_hrn, type = urn_to_hrn(xrn) + # the the slice record + registries = Registries(api) + registry = registries[api.hrn] + credential = api.getCredential() + records = registry.resolve(credential, xrn) + + # make sure we get a local slice record + record = None + for tmp_record in records: + if tmp_record['type'] == 'slice' and \ + not tmp_record['peer_authority']: + record = SliceRecord(dict=tmp_record) + if not record: + raise RecordNotFound(slice_hrn) + + # get sliver info + slivers = Slices(api).get_slivers(slice_hrn) + if not slivers: + raise SliverDoesNotExist(slice_hrn) + + # get initscripts + initscripts = None + data = { + 'timestamp': int(time.time()), + 'initscripts': initscripts, + 'slivers': slivers + } + + # create the ticket + object_gid = record.get_gid_object() + new_ticket = SfaTicket(subject = object_gid.get_subject()) + new_ticket.set_gid_caller(api.auth.client_gid) + new_ticket.set_gid_object(object_gid) + new_ticket.set_issuer(key=api.key, subject=api.hrn) + new_ticket.set_pubkey(object_gid.get_pubkey()) + new_ticket.set_attributes(data) + new_ticket.set_rspec(rspec) + #new_ticket.set_parent(api.auth.hierarchy.get_auth_ticket(auth_hrn)) + new_ticket.encode() + new_ticket.sign() + + return new_ticket.save_to_string(save_parents=True) -def start_slice(api, hrn): +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: @@ -53,7 +103,8 @@ def start_slice(api, hrn): return 1 -def stop_slice(api, 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: @@ -64,7 +115,7 @@ def stop_slice(api, hrn): api.plshell.UpdateSliceTag(api.plauth, attribute_id, "0") return 1 -def reset_slice(api, hrn): +def reset_slice(api, xrn): # XX not implemented at this interface return 1 @@ -74,15 +125,36 @@ 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): - nodes = Nodes(api) + +def get_rspec(api, xrn=None, origin_hrn=None): + from sfa.plc.nodes import Nodes + nodes = Nodes(api, origin_hrn=origin_hrn) if hrn: - rspec = nodes.get_rspec(hrn) + rspec = nodes.get_rspec(xrn) else: nodes.refresh() rspec = nodes['rspec'] return rspec + +""" +Returns the request context required by sfatables. At some point, this mechanism should be changed +to refer to "contexts", which is the information that sfatables is requesting. But for now, we just +return the basic information needed in a dict. +""" +def fetch_context(slice_xrn, user_xrn, 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 + +def main(): + r = RSpec() + r.parseFile(sys.argv[1]) + rspec = r.toDict() + create_slice(None,'plc.princeton.tmacktestslice',rspec) + +if __name__ == "__main__": + main()