Beispiel #1
0
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', None)
    (hrn, type) = urn_to_hrn(xrn)

    version_manager = VersionManager()
    # get the rspec's return format from options
    rspec_version = version_manager.get_version(options.get('rspec_version'))
    version_string = "rspec_%s" % (rspec_version.to_string())

    #panos adding the info option to the caching key (can be improved)
    if options.get('info'):
        version_string = version_string + "_"+options.get('info', 'default')

    # look in cache first
    if caching and api.cache and not xrn:
        rspec = api.cache.get(version_string)
        if rspec:
            api.logger.info("aggregate.ListResources: returning cached value for hrn %s"%hrn)
            return rspec 

    #panos: passing user-defined options
    #print "manager options = ",options
    aggregate = Aggregate(api, options)
    rspec =  aggregate.get_rspec(slice_xrn=xrn, version=rspec_version)

    # cache the result
    if caching and api.cache and not xrn:
        api.cache.add(version_string, rspec)

    return rspec
Beispiel #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)