Usage

Use from Neutron API CLI

Example commands to use by the admin to create a BGPVPN resource:

neutron bgpvpn-create --route-targets 64512:1 --tenant-id b954279e1e064dc9b8264474cb3e6bd2
neutron bgpvpn-list
neutron bgpvpn-update 1009a0f326b6403180c18f3caa1430de --name myBGPVPN --tenant 4a75e08c45f14aa9afc5da081c9bb534

Example commands to use by the tenant owning the BGPVPN to associate a Network to it:

neutron bgpvpn-net-assoc-create myBGPVPN --network 828cddad3b834e79b79abc1b87b6cca0
# returns <net-assoc-uuid>
neutron bgpvpn-net-assoc-list myBGPVPN
neutron bgpvpn-net-assoc-show <net-assoc-uuid> myBGPVPN

neutron bgpvpn-net-assoc-delete <net-assoc-uuid> myBGPVPN

Use from Horizon

See Horizon.

Use from Heat

See Heat.

Use from Python

The BGPVPN API is dynamically loaded by Neutron. There is the same behaviour with the Python lib “neutronclient” use. This allows to programmatically handle BGPVPN resources as well as Network association resources and Router association resources.

Methods

BGPVPN Resources

API methods for BGPVPN resources
Method Name Description Input parameter(s) Output
list_bgpvpns() Get the list of defined BGPVPN resources for the current tenant. An optional list of BGPVPN parameters can be used as filter.
  1. Use **kwargs as filter, e.g. list_bgpvpn(param1=val1, param2=val2,...) (Optional)
Dictionary of BGPVPN attributes
create_bgpvpn() Create a BGPVPN resource for the current tenant. Extra information about the BGPVPN resource can be provided as input.
  1. Dictionary of BGPVPN attributes (Optional)
Dictionary of BGPVPN attributes
show_bgpvpn() Get all information for a given BGPVPN.
  1. UUID of the said BGPVPN
Dictionary of BGPVPN attributes related to the BGPVPN provided as input
update_bgpvpn() Update the BGPVPN resource with the parameters provided as input.
  1. UUID of the said BGPVPN
  2. Dictionary of BGPVPN attributes to be updated
Dictionary of BGPVPN attributes
delete_bgpvpn() Delete a given BGPVPN resource of which the UUID is provided as input.
  1. UUID of the said BGPVPN
Boolean

Network Association Resources

API methods for Network association resources
Method Name Description Input parameter(s) Output
list_network_associations() Get the list of defined NETWORK ASSOCIATION resources for a given BGPVPN. An optional list of NETWORK ASSOCIATION parameters can be used as filter.
  1. UUID of the BGPVPN
  2. Use **kwargs as filter, e.g. list_network_associations( BGPVPN UUID, param1=val1, param2=val2,...) (Optional)
List of dictionaries of NETWORK ASSOCIATION attributes, one of each related to a given BGPVPN
create_network_association() Create a NETWORK ASSOCIATION resource for a given BGPVPN. Network UUID must be defined, provided in a NETWORK ASSOCIATION resource as input parameter.
  1. UUID of the said BGPVPN
  2. Dictionary of NETWORK ASSOCIATION parameters
Dictionary of NETWORK ASSOCIATION attributes
show_network_association() Get all parameters for a given NETWORK ASSOCIATION.
  1. UUID of the NETWORK ASSOCIATION resource
  2. UUID of the BGPVPN resource
Dictionary of NETWORK ASSOCIATION parameters
update_network_association() Update the parameters of the NETWORK ASSOCIATION resource provided as input.
  1. UUID of the NETWORK ASSOCIATION resource
  2. UUID of the BGPVPN resource
  3. Dictionary of NETWORK ASSOCIATION parameters
Dictionary of NETWORK ASSOCIATION parameters
delete_network_association() Delete a given NETWORK ASSOCIATION resource of which the UUID is provided as input.
  1. UUID of the NETWORK ASSOCIATION resource
  2. UUID of the BGPVPN resource
Boolean

Router Association Resources

API methods for Router associations
Method Name Description Input parameter(s) Output
list_router_associations() Get the list of defined ROUTER ASSOCIATION resources for a given BGPVPN. An optional list of ROUTER ASSOCIATION parameters can be used as filter
  1. UUID of the BGPVPN
  2. Use **kwargs as filter, e.g. list_router_associations( BGPVPN UUID, param1=val1, param2=val2,...) (Optional)
List of dictionaries of ROUTER ASSOCIATION attributes, one of each related to a given BGPVPN
create_router_association() Create a ROUTER ASSOCIATION resource for a given BGPVPN UUID. Router UUID must be defined, provided in a ROUTER ASSOCIATION resource as input parameter.
  1. UUID of the said BGPVPN
  2. Dictionary of ROUTER ASSOCIATION parameters (Optional)
Dictionary of ROUTER ASSOCIATION parameters
show_router_association() Get all parameters for a given ROUTER ASSOCIATION.
  1. UUID of the ROUTER ASSOCIATION resource
  2. UUID of the BGPVPN resource
Dictionary of ROUTER ASSOCIATION parameters
update_router_association() Update the parameters of the ROUTER ASSOCIATION resource provided as input.
  1. UUID of the ROUTER ASSOCIATION resource
  2. UUID of the BGPVPN resource
  3. Dictionary of ROUTER ASSOCIATION parameters
Dictionary of ROUTER ASSOCIATION parameters
delete_router_association() Delete a given ROUTER ASSOCIATION resource.
  1. UUID of the ROUTER ASSOCIATION resource
  2. UUID of the BGPVPN resource
Boolean

Examples

BGPVPN + Network Association Resources

# Copyright (c) 2016 Orange.
# All Rights Reserved.
#
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
#    not use this file except in compliance with the License. You may obtain
#    a copy of the License at
#
#         http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
#    License for the specific language governing permissions and limitations
#    under the License.

from neutronclient.v2_0 import client
import os
import sys

# Parameter for subnet neutron object
SUBNET_IP = "192.168.24.0/24"

# Parameters for bgpvpn neutron object
BGPVPN_RT = "64512:2"


# Function to obtain stack parameters from system vars
def get_keystone_creds():
    d = {}
    try:
        d['username'] = os.environ['OS_USERNAME']
        d['password'] = os.environ['OS_PASSWORD']
        d['auth_url'] = os.environ['OS_AUTH_URL']
        d['tenant_name'] = os.environ['OS_TENANT_NAME']
    except KeyError:
        print ("ERROR: Stack environment variables type "
               "OS_* are not properly set")
        sys.exit(1)
    return d


# Main function
def main():
    # Call function that imports (dev)stack vars
    creds = get_keystone_creds()

    # Neutron object
    # It dynamically loads the BGPVPN API
    neutron = client.Client(**creds)

    try:
        # Network object creation. This dummy network will be used to bind the
        # attached subnet to the BGPVPN object.

        # Creation of the Network
        net_obj = neutron.create_network({'network': {'name': "dummyNet"}})
        # Verify creation
        print ('Network created\t[network-id:%s]...' %
               net_obj['network']['id'])

        # Creation of the subnet, is attached to the created network
        subnet_obj = neutron.create_subnet(
            {'subnet':
                {'name': "dummySubnet",
                 'cidr': SUBNET_IP,
                 'network_id': net_obj['network']['id'],
                 'ip_version': 4}})
        # Verify
        print ("Subnet created\t[subnet-id:%s]..." %
               subnet_obj['subnet']['id'])

        # Creation of a BGPVPN object. This object is created with the
        # required parameter 'routes_targets'.
        # This object can be created with others parameters or be updated with
        # them by calling the update function on the object.

        print ("\nBGPVPN object handling.")
        # Creation of the BGPVPN object
        bgpvpn_obj = neutron.create_bgpvpn(
            {'bgpvpn': {'route_targets': [BGPVPN_RT]}})
        print ("BGPVPN object created\t[bgpvpn-id:%s]..." %
               bgpvpn_obj['bgpvpn']['id'])
        # Update the BGPVPN object
        bgpvpn_obj = neutron.update_bgpvpn(
            bgpvpn_obj['bgpvpn']['id'], {'bgpvpn': {'name': "dummyBGPVPN"}})
        # List all BGPVPN objects
        list_bgpvpn_obj = neutron.list_bgpvpns()
        print ("List of all BGPVPN object\t[%s]" % list_bgpvpn_obj)
        # List of all BGPVPN objects filtered on the type parameter set to l3
        # value
        list_bgpvpn_obj = neutron.list_bgpvpns(type='l3')
        print ("List of all BGPVPN object with type=l3\t[%s]" %
               list_bgpvpn_obj)

        # Creation of a BGPVPN Network association.
        print ("\nBGPVPN Network Association object handling.")
        # Creation of a Network Association bound on the created BGPVPN object
        bgpvpn_net_assoc_obj = neutron.create_network_association(
            bgpvpn_obj['bgpvpn']['id'],
            {'network_association':
                {'network_id':
                    net_obj['network']['id']}})
        print ("BGPVPN Network Association created\t"
               "[network_association:%s]..." %
               bgpvpn_net_assoc_obj['network_association']['id'])
        # List all NETWORK ASSOCIATION object filtered on the network created
        # above
        list_bgpvpn_net_assoc_obj = neutron.list_network_associations(
            bgpvpn_obj['bgpvpn']['id'],
            network_id=net_obj['network']['id'])
        print ("List of NETWORK ASSOCIATION objects using network_id"
               "[%s]\t[%s]" %
               (net_obj['network']['id'], list_bgpvpn_net_assoc_obj))

        # Deletion of all objects created in this example

        print ("\nDeletion of all created objects")
        # First declared associations related of the created BGPVPN object in
        # this example
        neutron.delete_network_association(
            bgpvpn_net_assoc_obj['network_association']['id'],
            bgpvpn_obj['bgpvpn']['id'])
        # Then the BGPVPN object
        neutron.delete_bgpvpn(bgpvpn_obj['bgpvpn']['id'])
        # Subnet
        neutron.delete_subnet(subnet_obj['subnet']['id'])
        # And finally the Network
        neutron.delete_network(net_obj['network']['id'])
    except Exception as e:
        print ("[ERROR][%s]" % str(e))
        sys.exit(1)

    print ("[Done]")

if __name__ == '__main__':
        main()

__all__ = ['main']