diff --git a/doc/source/samples/__init__.py b/doc/source/samples/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/doc/source/samples/bgpvpn-sample01.py b/doc/source/samples/bgpvpn-sample01.py new file mode 100755 index 00000000..6edf2e6f --- /dev/null +++ b/doc/source/samples/bgpvpn-sample01.py @@ -0,0 +1,138 @@ +# 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'] diff --git a/doc/source/usage.rst b/doc/source/usage.rst index 1942ecab..b9cedeca 100755 --- a/doc/source/usage.rst +++ b/doc/source/usage.rst @@ -26,7 +26,79 @@ Use from Horizon See :doc:`horizon`. Use from Heat -------------- +------------- See :doc:`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 +^^^^^^^^^^^^^^^^ + +.. csv-table:: API methods for BGPVPN resources + :header: 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 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. csv-table:: API methods for Network association resources + :header: 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 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. csv-table:: API methods for Router associations + :header: 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 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + .. literalinclude:: ./samples/bgpvpn-sample01.py + + diff --git a/tox.ini b/tox.ini index 97f3fe2e..1242c668 100755 --- a/tox.ini +++ b/tox.ini @@ -23,8 +23,10 @@ deps = {[testenv]deps} commands = flake8 + flake8 doc/source/samples pylint --version pylint --rcfile=.pylintrc --output-format=colorized {posargs:networking_bgpvpn} + pylint --rcfile=.pylintrc --output-format=colorized doc/source/samples neutron-db-manage --subproject networking-bgpvpn --database-connection sqlite:// check_migration [testenv:venv]