X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fmanagers%2Faggregate_manager_pl.py;h=212699beb75eb81ba6a293e32a62b6a565f93356;hb=9797fe9b994b5bddd2d1ee6ade36c6716fb9c118;hp=5791bfaaf7b9af62b354f4b010587df8806bf15d;hpb=70ee1916beed76677a3f2d5fedda3a0a2a068af4;p=sfa.git diff --git a/sfa/managers/aggregate_manager_pl.py b/sfa/managers/aggregate_manager_pl.py index 5791bfaa..212699be 100644 --- a/sfa/managers/aggregate_manager_pl.py +++ b/sfa/managers/aggregate_manager_pl.py @@ -13,9 +13,10 @@ from sfa.util.specdict import * from sfa.util.faults import * from sfa.util.record import GeniRecord 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 import sfa.plc.peers as peers def delete_slice(api, hrn): @@ -26,7 +27,7 @@ def delete_slice(api, hrn): slice = slices[0] # determine if this is a peer slice - peer = peers.get_peer(hrn) + 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']) @@ -41,6 +42,50 @@ def create_slice(api, hrn, rspec): slices = Slices(api) slices.create_slice(hrn, rspec) +def get_ticket(api, slice_hrn, rspec, origin_hrn=None): + # the the slice record + registries = Registries(api) + registry = registries[api.hrn] + credential = api.getCredential() + records = registry.resolve(credential, slice_hrn) + + # make sure we get a local slice record + record = None + for tmp_record in records: + if record['type'] == 'slice' and \ + not 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): slicename = hrn_to_pl_slicename(hrn) slices = api.plshell.GetSlices(api.plauth, {'name': slicename}, ['slice_id']) @@ -76,4 +121,32 @@ def get_slices(api): slices.refresh() return slices['hrn'] - + +def get_rspec(api, hrn=None, origin_hrn=None): + from sfa.plc.nodes import Nodes + nodes = Nodes(api, origin_hrn=origin_hrn) + if hrn: + rspec = nodes.get_rspec(hrn) + 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_hrn, user_hrn, contexts): + 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()