Пример #1
0
def prepare_slice(api, slice_xrn, creds, users):
    reg_objects = __get_registry_objects(slice_xrn, creds, users)
    (hrn, type) = urn_to_hrn(slice_xrn)
    slices = Slices(api)
    peer = slices.get_peer(hrn)
    sfa_peer = slices.get_sfa_peer(hrn)
    slice_record=None
    if users:
        slice_record = users[0].get('slice_record', {})
    registry = api.registries[api.hrn]
    credential = api.getCredential()
    # ensure site record exists
    site = slices.verify_site(hrn, slice_record, peer, sfa_peer)
    # ensure slice record exists
    slice = slices.verify_slice(hrn, slice_record, peer, sfa_peer)
    # ensure person records exists
    persons = slices.verify_persons(hrn, slice, users, peer, sfa_peer)
Пример #2
0
def CreateSliver(api, slice_xrn, creds, rspec_string, users, call_id):
    """
    Create the sliver[s] (slice) at this aggregate.    
    Verify HRN and initialize the slice record in PLC if necessary.
    """
    if Callids().already_handled(call_id): return ""

    aggregate = Aggregate(api)
    slices = Slices(api)
    (hrn, type) = urn_to_hrn(slice_xrn)
    peer = slices.get_peer(hrn)
    sfa_peer = slices.get_sfa_peer(hrn)
    slice_record=None    
    if users:
        slice_record = users[0].get('slice_record', {})

    # parse rspec
    rspec = RSpec(rspec_string)
    requested_attributes = rspec.version.get_slice_attributes()
    
    # ensure site record exists
    site = slices.verify_site(hrn, slice_record, peer, sfa_peer)
    # ensure slice record exists
    slice = slices.verify_slice(hrn, slice_record, peer, sfa_peer)
    # ensure person records exists
    persons = slices.verify_persons(hrn, slice, users, peer, sfa_peer)
    # ensure slice attributes exists
    slices.verify_slice_attributes(slice, requested_attributes)
    
    # add/remove slice from nodes
    requested_slivers = [str(host) for host in rspec.version.get_nodes_with_slivers()]
    slices.verify_slice_nodes(slice, requested_slivers, peer) 

    # hanlde MyPLC peer association.
    # only used by plc and ple.
    slices.handle_peer(site, slice, persons, peer)
    
    return aggregate.get_rspec(slice_xrn=slice_xrn, version=rspec.version)