Merge "bgpvpn-routes-control extension"
This commit is contained in:
@@ -8,9 +8,11 @@ A new BGPVPN resource is introduced. It contains a set of parameters for a
|
|||||||
BGP-based VPN.
|
BGP-based VPN.
|
||||||
|
|
||||||
A BGPVPN is created by the admin and given to a tenant who can then associate
|
A BGPVPN is created by the admin and given to a tenant who can then associate
|
||||||
it to Networks or Routers.
|
it to Networks, Routers or Ports (the latter when the ``bgpvpn-routes-control``
|
||||||
|
extension is available).
|
||||||
|
|
||||||
The BGP VPNs API lists, shows details for, creates, updates, and deletes BGP VPNs.
|
The BGP VPNs API lists, shows details for, creates, updates, and deletes
|
||||||
|
BGP VPNs.
|
||||||
|
|
||||||
List BGP VPNs
|
List BGP VPNs
|
||||||
=============
|
=============
|
||||||
@@ -51,6 +53,8 @@ Response Parameters
|
|||||||
- export_targets: bgpvpn-export_targets-required
|
- export_targets: bgpvpn-export_targets-required
|
||||||
- networks: bgpvpn-networks-required
|
- networks: bgpvpn-networks-required
|
||||||
- routers: bgpvpn-routers-required
|
- routers: bgpvpn-routers-required
|
||||||
|
- ports: bgpvpn-ports
|
||||||
|
- local_pref: bgpvpn-local_pref
|
||||||
- tenant_id: project_id
|
- tenant_id: project_id
|
||||||
- project_id: project_id
|
- project_id: project_id
|
||||||
|
|
||||||
@@ -82,6 +86,7 @@ Request
|
|||||||
- route_targets: bgpvpn-route_targets
|
- route_targets: bgpvpn-route_targets
|
||||||
- import_targets: bgpvpn-import_targets
|
- import_targets: bgpvpn-import_targets
|
||||||
- export_targets: bgpvpn-export_targets
|
- export_targets: bgpvpn-export_targets
|
||||||
|
- local_pref: bgpvpn-local_pref-request
|
||||||
- tenant_id: tenant_id-request
|
- tenant_id: tenant_id-request
|
||||||
- project_id: project_id-request
|
- project_id: project_id-request
|
||||||
- type: bgpvpn-type
|
- type: bgpvpn-type
|
||||||
@@ -106,6 +111,8 @@ Response Parameters
|
|||||||
- export_targets: bgpvpn-export_targets-required
|
- export_targets: bgpvpn-export_targets-required
|
||||||
- networks: bgpvpn-networks-required
|
- networks: bgpvpn-networks-required
|
||||||
- routers: bgpvpn-routers-required
|
- routers: bgpvpn-routers-required
|
||||||
|
- ports: bgpvpn-ports
|
||||||
|
- local_pref: bgpvpn-local_pref
|
||||||
- tenant_id: project_id
|
- tenant_id: project_id
|
||||||
- project_id: project_id
|
- project_id: project_id
|
||||||
|
|
||||||
@@ -148,6 +155,8 @@ Response Parameters
|
|||||||
- export_targets: bgpvpn-export_targets-required
|
- export_targets: bgpvpn-export_targets-required
|
||||||
- networks: bgpvpn-networks-required
|
- networks: bgpvpn-networks-required
|
||||||
- routers: bgpvpn-routers-required
|
- routers: bgpvpn-routers-required
|
||||||
|
- ports: bgpvpn-ports
|
||||||
|
- local_pref: bgpvpn-local_pref
|
||||||
- tenant_id: project_id
|
- tenant_id: project_id
|
||||||
- project_id: project_id
|
- project_id: project_id
|
||||||
|
|
||||||
@@ -182,6 +191,7 @@ admin privileges.
|
|||||||
- route_targets: bgpvpn-route_targets
|
- route_targets: bgpvpn-route_targets
|
||||||
- import_targets: bgpvpn-import_targets
|
- import_targets: bgpvpn-import_targets
|
||||||
- export_targets: bgpvpn-export_targets
|
- export_targets: bgpvpn-export_targets
|
||||||
|
- local_pref: bgpvpn-local_pref-request
|
||||||
|
|
||||||
Request Example
|
Request Example
|
||||||
---------------
|
---------------
|
||||||
@@ -204,6 +214,8 @@ Response Parameters
|
|||||||
- export_targets: bgpvpn-export_targets-required
|
- export_targets: bgpvpn-export_targets-required
|
||||||
- networks: bgpvpn-networks-required
|
- networks: bgpvpn-networks-required
|
||||||
- routers: bgpvpn-routers-required
|
- routers: bgpvpn-routers-required
|
||||||
|
- ports: bgpvpn-ports
|
||||||
|
- local_pref: bgpvpn-local_pref
|
||||||
- tenant_id: project_id
|
- tenant_id: project_id
|
||||||
- project_id: project_id
|
- project_id: project_id
|
||||||
|
|
||||||
@@ -220,9 +232,9 @@ Delete BGP VPN
|
|||||||
|
|
||||||
Deletes a BGP VPN and its network and/or router associations.
|
Deletes a BGP VPN and its network and/or router associations.
|
||||||
|
|
||||||
Normal response codes: 202
|
Normal response codes: 204
|
||||||
|
|
||||||
Error response codes: 400, 401, 403, 404
|
Error response codes: 401, 403, 404
|
||||||
|
|
||||||
Request
|
Request
|
||||||
-------
|
-------
|
||||||
|
|||||||
@@ -139,7 +139,7 @@ Delete Network Association
|
|||||||
|
|
||||||
Deletes a network association.
|
Deletes a network association.
|
||||||
|
|
||||||
Normal response codes: 202, 204
|
Normal response codes: 204
|
||||||
|
|
||||||
Error response codes: 400, 401, 403, 404
|
Error response codes: 400, 401, 403, 404
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ routers with Multiprotocol Label Switching (MPLS) Virtual Private
|
|||||||
Networks (VPNs) via Border Gateway Protocol (BGP) peering. BGP-MPLS VPNs
|
Networks (VPNs) via Border Gateway Protocol (BGP) peering. BGP-MPLS VPNs
|
||||||
are commonly provided by telecommunications service providers to
|
are commonly provided by telecommunications service providers to
|
||||||
customers in addition to or instead of Internet connectivity for Wide
|
customers in addition to or instead of Internet connectivity for Wide
|
||||||
Area Networking. This API enables the interconnection of with these
|
Area Networking. This API enables the interconnection with these
|
||||||
WANs using *Route Targets* to indicate the desired network(s).
|
WAN VPNs using *Route Targets* to indicate the desired network(s).
|
||||||
|
|
||||||
On Route Targets
|
On Route Targets
|
||||||
================
|
================
|
||||||
@@ -50,6 +50,36 @@ Valid strings for a Route Target or a Route Distinguisher are the following:
|
|||||||
- <4-byte AS#>:<16bit-number>
|
- <4-byte AS#>:<16bit-number>
|
||||||
- <4-byte IPv4>:<16bit-number>
|
- <4-byte IPv4>:<16bit-number>
|
||||||
|
|
||||||
|
Control of routes advertised to BGPVPNs
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
With the ``bgpvpn`` extension, when associations between networks or routers
|
||||||
|
and BGVPNs are defined, the routes corresponding to fixed IPs of neutron ports
|
||||||
|
will be advertised to BGPVPNs. For router associations, extra routes of the
|
||||||
|
router ('routes' attribute of a ``router`` resource) may also be advertised
|
||||||
|
to BGPVPNs.
|
||||||
|
|
||||||
|
To provide more flexibility, the ``bgpvpn-routes-control`` extension provides
|
||||||
|
a way to:
|
||||||
|
|
||||||
|
- advertise other routes to a BGPVPN, for instances a prefix that is reachable
|
||||||
|
via a neutron port, or routes leaked from another BGPVPN; this is implemented
|
||||||
|
thanks to the ``routes`` attribute of a BGPVPN port association
|
||||||
|
|
||||||
|
- not advertise the fixed IPs of a neutron port to a BGPVPN, which can be
|
||||||
|
particularly relevant when other IP prefixes are reachable via the port; this
|
||||||
|
is implemented thanks to the ``advertise_fixed_ips`` attribute of a BGPVPN
|
||||||
|
port association
|
||||||
|
|
||||||
|
- explictly control whether extra routes of a router are to be advertised
|
||||||
|
to a BGPVPN; this is implemented thanks to the ``advertise_extra_routes``
|
||||||
|
attribute of a BGPVPN router association
|
||||||
|
|
||||||
|
- optionally control the value of the LOCAL_PREF BGP attribute of advertised
|
||||||
|
routes, for all routes of a BGPVPN (thanks to the ``local_pref`` attribute
|
||||||
|
of a BGPVPN resource) and/or per route (thanks to the ``local_pref``
|
||||||
|
in a port association route)
|
||||||
|
|
||||||
======================
|
======================
|
||||||
BGP - MPLS VPN Caveats
|
BGP - MPLS VPN Caveats
|
||||||
======================
|
======================
|
||||||
|
|||||||
248
api-ref/source/v2/bgpvpn-port_associations.inc
Normal file
248
api-ref/source/v2/bgpvpn-port_associations.inc
Normal file
@@ -0,0 +1,248 @@
|
|||||||
|
=================
|
||||||
|
Port Associations
|
||||||
|
=================
|
||||||
|
|
||||||
|
Port associations are available if the ``bgpvpn-routes-control`` extension
|
||||||
|
is available.
|
||||||
|
|
||||||
|
Associating or disassociating a BGPVPN to a Port is done by manipulating a
|
||||||
|
Port association API resource as a sub-resource of the BGPVPN resource.
|
||||||
|
|
||||||
|
The semantic behind this API call is a form of policy-based routing: the
|
||||||
|
traffic from the given Port will be processed according to dataplane lookups
|
||||||
|
specific to this Port. This means, in particular that Ports belonging to a
|
||||||
|
given neutron network will possibly see a different L2 or L3 connectivity if
|
||||||
|
they have different BGPVPN associations.
|
||||||
|
|
||||||
|
When, a port association is defined for a given port, and at the same time,
|
||||||
|
a network association is defined for the port's network, both associations are
|
||||||
|
considered simultaneously active and the connectivity will be established
|
||||||
|
between the port and the BGPVPNs in both associations. This is true also in
|
||||||
|
the case where multiple associations are made, and for a router associations
|
||||||
|
of a router connected to the port's network.
|
||||||
|
|
||||||
|
Port routes
|
||||||
|
===========
|
||||||
|
|
||||||
|
Additionally to providing Port-level granularity in the definition of BGPVPN
|
||||||
|
connectivity, port associations also provide a way to control the
|
||||||
|
advertisement of routes other than only the fixed IPs of neutron ports.
|
||||||
|
|
||||||
|
So-called static routes are defined as follows: to indicate that prefix
|
||||||
|
20.1.0.0/16 is reachable via port A and should be advertised
|
||||||
|
accordingly in BGPVPN X, a port association is defined between port A
|
||||||
|
and BGPVPN X, with the ``routes`` attribute set to ``[ {'type': 'prefix',
|
||||||
|
'prefix': '20.1.0.0/16'} ]``.
|
||||||
|
|
||||||
|
Route leaking of the routes of a given BGPVPN into another BGPVPN belonging
|
||||||
|
to the same tenant, is supported similarily: to indicate that all the prefixes
|
||||||
|
advertised to BGPVPN Y are reachable via port A (i.e. the routes tagged with at
|
||||||
|
least an RT belonging to ``route_targets`` or ``import_targets`` of BGPVPN Y),
|
||||||
|
and that they should be leaked into BGPVPN X, a port association is defined
|
||||||
|
between port A and BGPVPN X, with the ``routes`` attribute set to
|
||||||
|
``[ {'type': 'bgpvpn', 'bgpvpn_id': <uuid of BGPVPN Y>} ]``.
|
||||||
|
|
||||||
|
Control of BGP LOCAL_PREF attribute
|
||||||
|
===================================
|
||||||
|
|
||||||
|
The BGP LOCAL_PREF for a specific route can be controlled to take a different
|
||||||
|
value than the one defined in the BGPVPN ``local_pref`` attribute, by
|
||||||
|
adding a ``'local_pref': VALUE`` in a route in the ``routes`` attribute (see
|
||||||
|
example in port association Update request).
|
||||||
|
|
||||||
|
List Port Associations
|
||||||
|
======================
|
||||||
|
|
||||||
|
.. rest_method:: GET /v2.0/bgpvpn/bgpvpns/{bgpvpn_id}/port_associations
|
||||||
|
|
||||||
|
Lists port associations for a given BGP VPN.
|
||||||
|
|
||||||
|
Use the ``fields`` query parameter to control which fields are
|
||||||
|
returned in the response body. Additionally, you can filter results
|
||||||
|
by using query string parameters. For information, see `Filtering
|
||||||
|
and Column Selection <https://wiki.openstack.org/wiki/Neutron/APIv2
|
||||||
|
-specification#Filtering_and_Column_Selection>`__.
|
||||||
|
|
||||||
|
Normal response codes: 200
|
||||||
|
|
||||||
|
Error response codes: 401, 403, 404
|
||||||
|
|
||||||
|
Request
|
||||||
|
-------
|
||||||
|
|
||||||
|
.. rest_parameters:: parameters.yaml
|
||||||
|
|
||||||
|
- bgpvpn_id: bgpvpn-id-path
|
||||||
|
- fields: fields
|
||||||
|
|
||||||
|
Response Parameters
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
.. rest_parameters:: parameters.yaml
|
||||||
|
|
||||||
|
- port_associations: bgpvpn-port_associations
|
||||||
|
- id: bgpvpn-port_association_id
|
||||||
|
- port_id: bgpvpn-port_id
|
||||||
|
- project_id: project_id
|
||||||
|
- routes: bgpvpn-routes
|
||||||
|
- advertise_fixed_ips: bgpvpn-advertise_fixed_ips
|
||||||
|
|
||||||
|
Response Example
|
||||||
|
----------------
|
||||||
|
|
||||||
|
.. literalinclude:: samples/bgpvpn/port_associations/port_association-list-response.json
|
||||||
|
:language: javascript
|
||||||
|
|
||||||
|
Create Port Association
|
||||||
|
=======================
|
||||||
|
|
||||||
|
.. rest_method:: POST /v2.0/bgpvpn/bgpvpns/{bgpvpn_id}/port_associations
|
||||||
|
|
||||||
|
Creates a port association for a given BGP VPN
|
||||||
|
|
||||||
|
Normal response codes: 201
|
||||||
|
|
||||||
|
Error response codes: 400, 401, 404
|
||||||
|
|
||||||
|
Request
|
||||||
|
-------
|
||||||
|
|
||||||
|
.. rest_parameters:: parameters.yaml
|
||||||
|
|
||||||
|
- bgpvpn_id: bgpvpn-id-path
|
||||||
|
- port_association: bgpvpn-port_association
|
||||||
|
- port_id: bgpvpn-port_id
|
||||||
|
- routes: bgpvpn-routes-request
|
||||||
|
- advertise_fixed_ips: bgpvpn-advertise_fixed_ips-request
|
||||||
|
|
||||||
|
Request Example
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. literalinclude:: samples/bgpvpn/port_associations/port_association-create-request.json
|
||||||
|
:language: javascript
|
||||||
|
|
||||||
|
Response Parameters
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
.. rest_parameters:: parameters.yaml
|
||||||
|
|
||||||
|
- port_association: bgpvpn-port_association
|
||||||
|
- id: bgpvpn-port_association_id
|
||||||
|
- port_id: bgpvpn-port_id
|
||||||
|
- project_id: project_id
|
||||||
|
- routes: bgpvpn-routes
|
||||||
|
- advertise_fixed_ips: bgpvpn-advertise_fixed_ips
|
||||||
|
|
||||||
|
Response Example
|
||||||
|
----------------
|
||||||
|
|
||||||
|
.. literalinclude:: samples/bgpvpn/port_associations/port_association-create-response.json
|
||||||
|
:language: javascript
|
||||||
|
|
||||||
|
Show Port Association details
|
||||||
|
=============================
|
||||||
|
|
||||||
|
.. rest_method:: GET /v2.0/bgpvpn/bgpvpns/{bgpvpn_id}/port_associations/{port_association_id}
|
||||||
|
|
||||||
|
Shows details for a port association.
|
||||||
|
|
||||||
|
Normal response codes: 200
|
||||||
|
|
||||||
|
Error response codes: 401, 403, 404
|
||||||
|
|
||||||
|
Request
|
||||||
|
-------
|
||||||
|
|
||||||
|
.. rest_parameters:: parameters.yaml
|
||||||
|
|
||||||
|
- bgpvpn_id: bgpvpn-id-path
|
||||||
|
- port_association_id: bgpvpn-port_association_id-path
|
||||||
|
|
||||||
|
Response Parameters
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
.. rest_parameters:: parameters.yaml
|
||||||
|
|
||||||
|
- port_association: bgpvpn-port_association
|
||||||
|
- id: bgpvpn-port_association_id
|
||||||
|
- port_id: bgpvpn-port_id
|
||||||
|
- project_id: project_id
|
||||||
|
- routes: bgpvpn-routes
|
||||||
|
- advertise_fixed_ips: bgpvpn-advertise_fixed_ips
|
||||||
|
|
||||||
|
Response Example
|
||||||
|
----------------
|
||||||
|
|
||||||
|
.. literalinclude:: samples/bgpvpn/port_associations/port_association-show-response.json
|
||||||
|
:language: javascript
|
||||||
|
|
||||||
|
Update a Port Association
|
||||||
|
=========================
|
||||||
|
|
||||||
|
.. rest_method:: PUT /v2.0/bgpvpn/bgpvpns/{bgpvpn_id}/port_associations/{port_association_id}
|
||||||
|
|
||||||
|
Updates a port Association.
|
||||||
|
|
||||||
|
Normal response codes: 201
|
||||||
|
|
||||||
|
Error response codes: 400, 401, 403, 404
|
||||||
|
|
||||||
|
Request
|
||||||
|
-------
|
||||||
|
|
||||||
|
.. rest_parameters:: parameters.yaml
|
||||||
|
|
||||||
|
- bgpvpn_id: bgpvpn-id-path
|
||||||
|
- port_association_id: bgpvpn-port_association_id-path
|
||||||
|
- port_association: bgpvpn-port_association
|
||||||
|
- routes: bgpvpn-routes-request
|
||||||
|
- advertise_fixed_ips: bgpvpn-advertise_fixed_ips-request
|
||||||
|
|
||||||
|
Request Example
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. literalinclude:: samples/bgpvpn/port_associations/port_association-update-request.json
|
||||||
|
:language: javascript
|
||||||
|
|
||||||
|
Response Parameters
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
.. rest_parameters:: parameters.yaml
|
||||||
|
|
||||||
|
- port_association: bgpvpn-port_association
|
||||||
|
- id: bgpvpn-port_association_id
|
||||||
|
- port_id: bgpvpn-port_id
|
||||||
|
- project_id: project_id
|
||||||
|
- routes: bgpvpn-routes
|
||||||
|
- advertise_fixed_ips: bgpvpn-advertise_fixed_ips
|
||||||
|
|
||||||
|
Response Example
|
||||||
|
----------------
|
||||||
|
|
||||||
|
.. literalinclude:: samples/bgpvpn/port_associations/port_association-update-response.json
|
||||||
|
:language: javascript
|
||||||
|
|
||||||
|
|
||||||
|
Delete Port Association
|
||||||
|
=======================
|
||||||
|
|
||||||
|
.. rest_method:: DELETE /v2.0/bgpvpn/bgpvpns/{bgpvpn_id}/port_associations/{port_association_id}
|
||||||
|
|
||||||
|
Deletes a port association.
|
||||||
|
|
||||||
|
Normal response codes: 204
|
||||||
|
|
||||||
|
Error response codes: 401, 403, 404
|
||||||
|
|
||||||
|
Request
|
||||||
|
-------
|
||||||
|
|
||||||
|
.. rest_parameters:: parameters.yaml
|
||||||
|
|
||||||
|
- bgpvpn_id: bgpvpn-id-path
|
||||||
|
- port_association_id: bgpvpn-port_association_id-path
|
||||||
|
|
||||||
|
Response
|
||||||
|
--------
|
||||||
|
|
||||||
|
There is no body content for the response of a successful DELETE request.
|
||||||
@@ -13,6 +13,22 @@ A said Router can be associated with multiple BGPVPNs.
|
|||||||
Associating or disassociating a BGPVPN to a Router is done by manipulating a
|
Associating or disassociating a BGPVPN to a Router is done by manipulating a
|
||||||
Router association API resource as a sub-resource of the BGPVPN resource:
|
Router association API resource as a sub-resource of the BGPVPN resource:
|
||||||
|
|
||||||
|
Advertising router extra routes to a BGPVPN
|
||||||
|
===========================================
|
||||||
|
|
||||||
|
The ``bgpvpn-routes-control`` API extension allows to control the
|
||||||
|
re-advertisement of a router extra routes in a BGPVPN ("extra routes" are
|
||||||
|
routes defined in the ``routes`` attribute of a router when the ``extraroute``
|
||||||
|
extension is available).
|
||||||
|
|
||||||
|
The ``advertise_extra_routes`` attribute can in this case be set on a
|
||||||
|
router_association:
|
||||||
|
|
||||||
|
- ``true``: the extra routes defined in the ``routes`` attribute of
|
||||||
|
the router will be advertised to the BGPVPN (default value)
|
||||||
|
- ``false``: the extra routes defined in the ``routes`` attribute of
|
||||||
|
the router will **not** be advertised to the BGPVPN
|
||||||
|
|
||||||
List Router Associations
|
List Router Associations
|
||||||
=========================
|
=========================
|
||||||
|
|
||||||
@@ -134,6 +150,55 @@ Response Example
|
|||||||
.. literalinclude:: samples/bgpvpn/router_associations/router_association-show-response.json
|
.. literalinclude:: samples/bgpvpn/router_associations/router_association-show-response.json
|
||||||
:language: javascript
|
:language: javascript
|
||||||
|
|
||||||
|
|
||||||
|
Update a Router Association ('bgpvpn-routes-control' extension)
|
||||||
|
===============================================================
|
||||||
|
|
||||||
|
.. note:: This operation is only available when the ``bgpvpn-routes-control``
|
||||||
|
API extension is enabled.
|
||||||
|
|
||||||
|
.. rest_method:: PUT /v2.0/bgpvpn/bgpvpns/{bgpvpn_id}/router_associations/{router_association_id}
|
||||||
|
|
||||||
|
Updates a router association.
|
||||||
|
|
||||||
|
Normal response codes: 201
|
||||||
|
|
||||||
|
Error response codes: 400, 401, 403, 404
|
||||||
|
|
||||||
|
Request
|
||||||
|
-------
|
||||||
|
|
||||||
|
.. rest_parameters:: parameters.yaml
|
||||||
|
|
||||||
|
- bgpvpn_id: bgpvpn-id-path
|
||||||
|
- router_association_id: bgpvpn-router_association_id-path
|
||||||
|
- router_association: bgpvpn-router_association
|
||||||
|
- advertise_extra_routes: bgpvpn-advertise_extra_routes-request
|
||||||
|
|
||||||
|
Request Example
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. literalinclude:: samples/bgpvpn/router_associations/router_association-update-request.json
|
||||||
|
:language: javascript
|
||||||
|
|
||||||
|
Response Parameters
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
.. rest_parameters:: parameters.yaml
|
||||||
|
|
||||||
|
- router_association: bgpvpn-router_association
|
||||||
|
- id: bgpvpn-router_association_id
|
||||||
|
- router_id: bgpvpn-router_id
|
||||||
|
- project_id: project_id
|
||||||
|
- advertise_extra_routes: bgpvpn-advertise_extra_routes
|
||||||
|
|
||||||
|
Response Example
|
||||||
|
----------------
|
||||||
|
|
||||||
|
.. literalinclude:: samples/bgpvpn/router_associations/router_association-update-response.json
|
||||||
|
:language: javascript
|
||||||
|
|
||||||
|
|
||||||
Delete Router Association
|
Delete Router Association
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
@@ -141,9 +206,9 @@ Delete Router Association
|
|||||||
|
|
||||||
Deletes a router association.
|
Deletes a router association.
|
||||||
|
|
||||||
Normal response codes: 202
|
Normal response codes: 204
|
||||||
|
|
||||||
Error response codes: 400, 401, 403, 404
|
Error response codes: 401, 403, 404
|
||||||
|
|
||||||
Request
|
Request
|
||||||
-------
|
-------
|
||||||
|
|||||||
@@ -74,3 +74,4 @@ BGP/MPLS VPN Interconnection
|
|||||||
.. include:: bgpvpn-bgpvpns.inc
|
.. include:: bgpvpn-bgpvpns.inc
|
||||||
.. include:: bgpvpn-network_associations.inc
|
.. include:: bgpvpn-network_associations.inc
|
||||||
.. include:: bgpvpn-router_associations.inc
|
.. include:: bgpvpn-router_associations.inc
|
||||||
|
.. include:: bgpvpn-port_associations.inc
|
||||||
@@ -13,6 +13,12 @@ bgpvpn-network_association_id-path:
|
|||||||
in: path
|
in: path
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
|
bgpvpn-port_association_id-path:
|
||||||
|
description: |
|
||||||
|
The ID of an association between a port and a BGP VPN.
|
||||||
|
in: path
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
bgpvpn-router_association_id-path:
|
bgpvpn-router_association_id-path:
|
||||||
description: |
|
description: |
|
||||||
The ID of an association between a router and a BGP VPN.
|
The ID of an association between a router and a BGP VPN.
|
||||||
@@ -630,6 +636,35 @@ bgpvpn:
|
|||||||
in: body
|
in: body
|
||||||
required: true
|
required: true
|
||||||
type: object
|
type: object
|
||||||
|
bgpvpn-advertise_extra_routes:
|
||||||
|
description: |
|
||||||
|
Boolean flag controlling whether or not the routes specified in the
|
||||||
|
``routes`` attribute of the router will be advertised to the BGPVPN.
|
||||||
|
in: body
|
||||||
|
required: true
|
||||||
|
type: boolean
|
||||||
|
bgpvpn-advertise_extra_routes-request:
|
||||||
|
description: |
|
||||||
|
Boolean flag controlling whether or not the routes specified in the
|
||||||
|
``routes`` attribute of the router will be advertised to the BGPVPN
|
||||||
|
(default: true).
|
||||||
|
in: body
|
||||||
|
required: false
|
||||||
|
type: boolean
|
||||||
|
bgpvpn-advertise_fixed_ips:
|
||||||
|
description: |
|
||||||
|
Boolean flag controlling whether or not the fixed IPs of a port will
|
||||||
|
be advertised to the BGPVPN.
|
||||||
|
in: body
|
||||||
|
required: true
|
||||||
|
type: boolean
|
||||||
|
bgpvpn-advertise_fixed_ips-request:
|
||||||
|
description: |
|
||||||
|
Boolean flag controlling whether or not the fixed IPs of a port will
|
||||||
|
be advertised to the BGPVPN (default: true).
|
||||||
|
in: body
|
||||||
|
required: false
|
||||||
|
type: boolean
|
||||||
bgpvpn-export_targets:
|
bgpvpn-export_targets:
|
||||||
description: |
|
description: |
|
||||||
Additional Route Targets that will be used for export.
|
Additional Route Targets that will be used for export.
|
||||||
@@ -660,6 +695,20 @@ bgpvpn-import_targets-required:
|
|||||||
in: body
|
in: body
|
||||||
required: true
|
required: true
|
||||||
type: array
|
type: array
|
||||||
|
bgpvpn-local_pref:
|
||||||
|
description: |
|
||||||
|
The default BGP LOCAL_PREF of routes that will be advertised to the
|
||||||
|
BGPVPN (unless overriden per-route).
|
||||||
|
in: body
|
||||||
|
required: true
|
||||||
|
type: integer
|
||||||
|
bgpvpn-local_pref-request:
|
||||||
|
description: |
|
||||||
|
The default BGP LOCAL_PREF of routes that will be advertised to the
|
||||||
|
BGPVPN (unless overriden per-route).
|
||||||
|
in: body
|
||||||
|
required: false
|
||||||
|
type: integer
|
||||||
bgpvpn-name:
|
bgpvpn-name:
|
||||||
description: |
|
description: |
|
||||||
The user meaningful name of the BGP VPN.
|
The user meaningful name of the BGP VPN.
|
||||||
@@ -674,7 +723,7 @@ bgpvpn-name-required:
|
|||||||
type: string
|
type: string
|
||||||
bgpvpn-network_association:
|
bgpvpn-network_association:
|
||||||
description: |
|
description: |
|
||||||
A ``network_association`` object represents the binding of an MPLS network
|
A ``network_association`` object represents the binding of a BGP VPN
|
||||||
to a Neutron network.
|
to a Neutron network.
|
||||||
in: body
|
in: body
|
||||||
required: true
|
required: true
|
||||||
@@ -700,25 +749,63 @@ bgpvpn-network_id:
|
|||||||
type: string
|
type: string
|
||||||
bgpvpn-networks:
|
bgpvpn-networks:
|
||||||
description: |
|
description: |
|
||||||
This read-only list of network IDs reflects the associations defined by Network association API resources.
|
This read-only list of network IDs reflects the associations defined by
|
||||||
|
Network association API resources.
|
||||||
in: body
|
in: body
|
||||||
required: false
|
required: false
|
||||||
type: array
|
type: array
|
||||||
bgpvpn-networks-required:
|
bgpvpn-networks-required:
|
||||||
description: |
|
description: |
|
||||||
This read-only list of network IDs reflects the associations defined by Network association API resources.
|
This read-only list of network IDs reflects the associations defined by
|
||||||
|
Network association API resources.
|
||||||
|
in: body
|
||||||
|
required: true
|
||||||
|
type: array
|
||||||
|
bgpvpn-port_association:
|
||||||
|
description: |
|
||||||
|
A ``port_association`` object represents the binding of a BGP VPN
|
||||||
|
to a Neutron port.
|
||||||
|
in: body
|
||||||
|
required: true
|
||||||
|
type: object
|
||||||
|
bgpvpn-port_association_id:
|
||||||
|
description: |
|
||||||
|
The ID of an association between a port and a BGP VPN.
|
||||||
|
in: body
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
bgpvpn-port_associations:
|
||||||
|
description: |
|
||||||
|
A list of ``port_association`` objects which represent bindings
|
||||||
|
of MPLS networks to Neutron ports.
|
||||||
|
in: body
|
||||||
|
required: true
|
||||||
|
type: array
|
||||||
|
bgpvpn-port_id:
|
||||||
|
description: |
|
||||||
|
The ID of a Neutron port with which to associate the BGP VPN.
|
||||||
|
in: body
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
bgpvpn-ports:
|
||||||
|
description: |
|
||||||
|
This read-only list of port IDs reflects the associations defined by Port
|
||||||
|
association API resources (only present if the ``bgpvpn-routes-control``
|
||||||
|
API extension is enabled).
|
||||||
in: body
|
in: body
|
||||||
required: true
|
required: true
|
||||||
type: array
|
type: array
|
||||||
bgpvpn-route_distinguishers:
|
bgpvpn-route_distinguishers:
|
||||||
description: |
|
description: |
|
||||||
List of route distinguisher strings. If this parameter is specified, one of these RDs will be used to advertise VPN routes.
|
List of route distinguisher strings. If this parameter is specified, one
|
||||||
|
of these RDs will be used to advertise VPN routes.
|
||||||
in: body
|
in: body
|
||||||
required: false
|
required: false
|
||||||
type: array
|
type: array
|
||||||
bgpvpn-route_distinguishers-required:
|
bgpvpn-route_distinguishers-required:
|
||||||
description: |
|
description: |
|
||||||
List of route distinguisher strings. If this parameter is specified, one of these RDs will be used to advertise VPN routes.
|
List of route distinguisher strings. If this parameter is specified, one
|
||||||
|
of these RDs will be used to advertise VPN routes.
|
||||||
in: body
|
in: body
|
||||||
required: true
|
required: true
|
||||||
type: array
|
type: array
|
||||||
@@ -736,7 +823,7 @@ bgpvpn-route_targets-required:
|
|||||||
type: array
|
type: array
|
||||||
bgpvpn-router_association:
|
bgpvpn-router_association:
|
||||||
description: |
|
description: |
|
||||||
A ``router_association`` object represents the binding of an MPLS network
|
A ``router_association`` object represents the binding of a BGP VPN
|
||||||
to a Neutron router.
|
to a Neutron router.
|
||||||
in: body
|
in: body
|
||||||
required: true
|
required: true
|
||||||
@@ -762,16 +849,58 @@ bgpvpn-router_id:
|
|||||||
type: string
|
type: string
|
||||||
bgpvpn-routers:
|
bgpvpn-routers:
|
||||||
description: |
|
description: |
|
||||||
This read-only list of router IDs reflects the associations defined by Router association API resources.
|
This read-only list of router IDs reflects the associations defined by
|
||||||
|
Router association API resources.
|
||||||
in: body
|
in: body
|
||||||
required: false
|
required: false
|
||||||
type: array
|
type: array
|
||||||
bgpvpn-routers-required:
|
bgpvpn-routers-required:
|
||||||
description: |
|
description: |
|
||||||
This read-only list of router IDs reflects the associations defined by Router association API resources.
|
This read-only list of router IDs reflects the associations defined by
|
||||||
|
Router association API resources.
|
||||||
in: body
|
in: body
|
||||||
required: true
|
required: true
|
||||||
type: array
|
type: array
|
||||||
|
bgpvpn-routes:
|
||||||
|
description: |
|
||||||
|
List of routes, each route being a dict with at least a ``type`` key,
|
||||||
|
which can be ``prefix`` or ``bgpvpn``.
|
||||||
|
|
||||||
|
For the ``prefix`` type, the IP prefix (v4 or v6) to advertise
|
||||||
|
is specified in the ``prefix`` key.
|
||||||
|
|
||||||
|
For the ``bgpvpn`` type, the ``bgpvpn_id`` key specifies the BGPVPN from
|
||||||
|
which routes will be readvertised with the association port as the
|
||||||
|
nexthop (any route carrying an RT among ``route_targets`` or
|
||||||
|
``import_targets`` of this BGPVPN, will be re-announced toward the RTs
|
||||||
|
of the associated BGPVPN (``export_targets`` + ``route_targets``), with
|
||||||
|
their next-hop/label pointing to this port).
|
||||||
|
|
||||||
|
For both types, the ``local_pref`` key can be used to control the
|
||||||
|
value of the BGP LOCAL_PREF of the routes that will be advertised.
|
||||||
|
in: body
|
||||||
|
required: true
|
||||||
|
type: array
|
||||||
|
bgpvpn-routes-request:
|
||||||
|
description: |
|
||||||
|
List of routes, each route being a dict with at least a ``type`` key,
|
||||||
|
which can be ``prefix`` or ``bgpvpn``.
|
||||||
|
|
||||||
|
For the ``prefix`` type, the IP prefix (v4 or v6) to advertise
|
||||||
|
is specified in the ``prefix`` key.
|
||||||
|
|
||||||
|
For the ``bgpvpn`` type, the ``bgpvpn_id`` key specifies the BGPVPN from
|
||||||
|
which routes will be readvertised with the association port as the
|
||||||
|
nexthop (any route carrying an RT among ``route_targets`` or
|
||||||
|
``import_targets`` of this BGPVPN, will be re-announced toward the RTs
|
||||||
|
of the associated BGPVPN (``export_targets`` + ``route_targets``), with
|
||||||
|
their next-hop/label pointing to this port).
|
||||||
|
|
||||||
|
For both types, the ``local_pref`` key can be used to control the
|
||||||
|
value of the BGP LOCAL_PREF of the routes that will be advertised.
|
||||||
|
in: body
|
||||||
|
required: false
|
||||||
|
type: array
|
||||||
bgpvpn-type:
|
bgpvpn-type:
|
||||||
description: |
|
description: |
|
||||||
Selection of the type of VPN and the technology behind it. Allowed
|
Selection of the type of VPN and the technology behind it. Allowed
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
],
|
],
|
||||||
"type": "l3",
|
"type": "l3",
|
||||||
"id": "0f9d472a-908f-40f5-8574-b4e8a63ccbf0",
|
"id": "0f9d472a-908f-40f5-8574-b4e8a63ccbf0",
|
||||||
"networks": []
|
"networks": [],
|
||||||
|
"local_pref": null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"route_distinguishers": [],
|
"route_distinguishers": [],
|
||||||
"networks": [
|
"networks": [
|
||||||
"a4f2b8df-cb42-4893-a333-d0b5c36ade17"
|
"a4f2b8df-cb42-4893-a333-d0b5c36ade17"
|
||||||
]
|
],
|
||||||
|
"local_pref": null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
"route_targets": ["64512:1444"],
|
"route_targets": ["64512:1444"],
|
||||||
"type": "l3",
|
"type": "l3",
|
||||||
"id": "4d627abf-06dd-45ab-920b-8e61422bb984",
|
"id": "4d627abf-06dd-45ab-920b-8e61422bb984",
|
||||||
"networks": []
|
"networks": [],
|
||||||
|
"local_pref": null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,8 @@
|
|||||||
],
|
],
|
||||||
"type": "l3",
|
"type": "l3",
|
||||||
"id": "0f9d472a-908f-40f5-8574-b4e8a63ccbf0",
|
"id": "0f9d472a-908f-40f5-8574-b4e8a63ccbf0",
|
||||||
"networks": []
|
"networks": [],
|
||||||
|
"local_pref": null
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"port_association": {
|
||||||
|
"port_id": "b58a6241-6e49-4b11-87c6-8e0606dde796",
|
||||||
|
"routes": [
|
||||||
|
{
|
||||||
|
"type": "prefix",
|
||||||
|
"prefix": "20.1.0.0/16"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"port_association": {
|
||||||
|
"id": "c63149a0-a0b3-4ca7-aba4-9aaa1b39d7f3",
|
||||||
|
"port_id": "46a1a80b-7c42-4c45-88fd-b531e636969f",
|
||||||
|
"project_id": "b7549121395844bea941bb92feb3fad9",
|
||||||
|
"routes": [
|
||||||
|
{
|
||||||
|
"type": "prefix",
|
||||||
|
"prefix": "20.1.0.0/16"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"advertise_fixed_ips": true
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"port_associations": [
|
||||||
|
{
|
||||||
|
"id": "95277be7-a231-4e96-9625-8f9fe41de9d6",
|
||||||
|
"port_id": "61222227-49eb-4dcc-b2d6-66bbfb2fdd7a",
|
||||||
|
"project_id": "b7549121395844bea941bb92feb3fad9",
|
||||||
|
"routes": [
|
||||||
|
{
|
||||||
|
"type": "prefix",
|
||||||
|
"prefix": "20.1.0.0/16"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"advertise_fixed_ips": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"port_association": {
|
||||||
|
"id": "c63149a0-a0b3-4ca7-aba4-9aaa1b39d7f3",
|
||||||
|
"port_id": "46a1a80b-7c42-4c45-88fd-b531e636969f",
|
||||||
|
"project_id": "b7549121395844bea941bb92feb3fad9",
|
||||||
|
"routes": [
|
||||||
|
{
|
||||||
|
"type": "prefix",
|
||||||
|
"prefix": "20.1.0.0/16"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"advertise_fixed_ips": true
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"port_association": {
|
||||||
|
"port_id": "46a1a80b-7c42-4c45-88fd-b531e636969f",
|
||||||
|
"routes": [
|
||||||
|
{
|
||||||
|
"type": "bgpvpn",
|
||||||
|
"bgpvpn_id": "180630e3-9eae-4ba7-9939-d5f47966e1f0",
|
||||||
|
"local_pref": 111
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"advertise_fixed_ips": false
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"port_association": {
|
||||||
|
"id": "c63149a0-a0b3-4ca7-aba4-9aaa1b39d7f3",
|
||||||
|
"port_id": "46a1a80b-7c42-4c45-88fd-b531e636969f",
|
||||||
|
"project_id": "b7549121395844bea941bb92feb3fad9",
|
||||||
|
"routes": [
|
||||||
|
{
|
||||||
|
"type": "bgpvpn",
|
||||||
|
"bgpvpn_id": "180630e3-9eae-4ba7-9939-d5f47966e1f0",
|
||||||
|
"local_pref": 111
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"advertise_fixed_ips": false
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
"router_id": "46a1a80b-7c42-4c45-88fd-b531e636969f",
|
"router_id": "46a1a80b-7c42-4c45-88fd-b531e636969f",
|
||||||
"tenant_id": "b7549121395844bea941bb92feb3fad9",
|
"tenant_id": "b7549121395844bea941bb92feb3fad9",
|
||||||
"project_id": "b7549121395844bea941bb92feb3fad9",
|
"project_id": "b7549121395844bea941bb92feb3fad9",
|
||||||
"id": "c63149a0-a0b3-4ca7-aba4-9aaa1b39d7f3"
|
"id": "c63149a0-a0b3-4ca7-aba4-9aaa1b39d7f3",
|
||||||
|
"advertise_extra_routes": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,8 @@
|
|||||||
"router_id": "61222227-49eb-4dcc-b2d6-66bbfb2fdd7a",
|
"router_id": "61222227-49eb-4dcc-b2d6-66bbfb2fdd7a",
|
||||||
"tenant_id": "b7549121395844bea941bb92feb3fad9",
|
"tenant_id": "b7549121395844bea941bb92feb3fad9",
|
||||||
"project_id": "b7549121395844bea941bb92feb3fad9",
|
"project_id": "b7549121395844bea941bb92feb3fad9",
|
||||||
"id": "95277be7-a231-4e96-9625-8f9fe41de9d6"
|
"id": "95277be7-a231-4e96-9625-8f9fe41de9d6",
|
||||||
|
"advertise_extra_routes": true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
{
|
{
|
||||||
"router_association": {
|
"router_association": {
|
||||||
"id": "c63149a0-a0b3-4ca7-aba4-9aaa1b39d7f3",
|
"id": "c63149a0-a0b3-4ca7-aba4-9aaa1b39d7f3",
|
||||||
"router_id": "46a1a80b-7c42-4c45-88fd-b531e636969f",
|
"router_id": "46a1a80b-7c42-4c45-88fd-b531e636969f",
|
||||||
"tenant_id": "b7549121395844bea941bb92feb3fad9",
|
"tenant_id": "b7549121395844bea941bb92feb3fad9",
|
||||||
"project_id": "b7549121395844bea941bb92feb3fad9"
|
"project_id": "b7549121395844bea941bb92feb3fad9",
|
||||||
}
|
"advertise_extra_routes": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"router_association": {
|
||||||
|
"router_id": "46a1a80b-7c42-4c45-88fd-b531e636969f",
|
||||||
|
"advertise_extra_routes": false
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"router_association": {
|
||||||
|
"id": "c63149a0-a0b3-4ca7-aba4-9aaa1b39d7f3",
|
||||||
|
"project_id": "b7549121395844bea941bb92feb3fad9",
|
||||||
|
"router_id": "46a1a80b-7c42-4c45-88fd-b531e636969f",
|
||||||
|
"advertise_extra_routes": false
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11,6 +11,7 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from neutron_lib.api.definitions import bgpvpn
|
from neutron_lib.api.definitions import bgpvpn
|
||||||
|
from neutron_lib.api.definitions import bgpvpn_routes_control
|
||||||
from neutron_lib.api.definitions import data_plane_status
|
from neutron_lib.api.definitions import data_plane_status
|
||||||
from neutron_lib.api.definitions import extra_dhcp_opt
|
from neutron_lib.api.definitions import extra_dhcp_opt
|
||||||
from neutron_lib.api.definitions import fip64
|
from neutron_lib.api.definitions import fip64
|
||||||
@@ -33,6 +34,7 @@ from neutron_lib.api.definitions import trunk_details
|
|||||||
|
|
||||||
_ALL_API_DEFINITIONS = {
|
_ALL_API_DEFINITIONS = {
|
||||||
bgpvpn,
|
bgpvpn,
|
||||||
|
bgpvpn_routes_control,
|
||||||
data_plane_status,
|
data_plane_status,
|
||||||
extra_dhcp_opt,
|
extra_dhcp_opt,
|
||||||
fip64,
|
fip64,
|
||||||
|
|||||||
@@ -121,6 +121,7 @@ KNOWN_EXTENSIONS = (
|
|||||||
'fwaasrouterinsertion',
|
'fwaasrouterinsertion',
|
||||||
'fwaas_v2',
|
'fwaas_v2',
|
||||||
'bgpvpn', # https://git.openstack.org/cgit/openstack/networking-bgpvpn
|
'bgpvpn', # https://git.openstack.org/cgit/openstack/networking-bgpvpn
|
||||||
|
'bgpvpn-routes-control',
|
||||||
)
|
)
|
||||||
|
|
||||||
KNOWN_KEYWORDS = (
|
KNOWN_KEYWORDS = (
|
||||||
|
|||||||
168
neutron_lib/api/definitions/bgpvpn_routes_control.py
Normal file
168
neutron_lib/api/definitions/bgpvpn_routes_control.py
Normal file
@@ -0,0 +1,168 @@
|
|||||||
|
# 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 neutron_lib.api import converters
|
||||||
|
from neutron_lib.api.definitions import bgpvpn
|
||||||
|
from neutron_lib.db import constants as db_const
|
||||||
|
|
||||||
|
|
||||||
|
# The alias of the extension.
|
||||||
|
ALIAS = 'bgpvpn-routes-control'
|
||||||
|
|
||||||
|
# The label to lookup the plugin in the plugin directory. It can match the
|
||||||
|
# alias, as required.
|
||||||
|
LABEL = ALIAS
|
||||||
|
|
||||||
|
# Whether or not this extension is simply signaling behavior to the user
|
||||||
|
# or it actively modifies the attribute map (mandatory).
|
||||||
|
IS_SHIM_EXTENSION = False
|
||||||
|
|
||||||
|
# Whether the extension is marking the adoption of standardattr model for
|
||||||
|
# legacy resources, or introducing new standardattr attributes. False or
|
||||||
|
# None if the standardattr model is adopted since the introduction of
|
||||||
|
# resource extension (mandatory).
|
||||||
|
# If this is True, the alias for the extension should be prefixed with
|
||||||
|
# 'standard-attr-'.
|
||||||
|
IS_STANDARD_ATTR_EXTENSION = False
|
||||||
|
|
||||||
|
# The name of the extension (mandatory).
|
||||||
|
NAME = 'BGPVPN Routes Control Extension'
|
||||||
|
|
||||||
|
# The description of the extension (mandatory).
|
||||||
|
DESCRIPTION = "Provides support for controlling routes advertised to a BGPVPN"
|
||||||
|
|
||||||
|
# A timestamp of when the extension was introduced (mandatory).
|
||||||
|
UPDATED_TIMESTAMP = "2017-05-20T00:00:00-00:00"
|
||||||
|
|
||||||
|
# The specific resources and/or attributes for the extension (optional).
|
||||||
|
# In case of simple extensions, with single resource, the string constants
|
||||||
|
# RESOURCE_NAME and COLLECTION_NAME can be used, otherwise string literals
|
||||||
|
# can be used instead.
|
||||||
|
|
||||||
|
# The name of the resource introduced or being extended (later case)
|
||||||
|
RESOURCE_NAME = bgpvpn.RESOURCE_NAME
|
||||||
|
|
||||||
|
# The plural for the resource introduced or being extended (later case)
|
||||||
|
COLLECTION_NAME = bgpvpn.COLLECTION_NAME
|
||||||
|
|
||||||
|
LOCAL_PREF_KEY = 'local_pref'
|
||||||
|
LOCAL_PREF_RANGE = [0, 2**32-1], # RFC 4271, section 4.3 (p.18)
|
||||||
|
|
||||||
|
RESOURCE_ATTRIBUTE_MAP = {
|
||||||
|
COLLECTION_NAME: {
|
||||||
|
'ports': {'allow_post': False, 'allow_put': False,
|
||||||
|
'is_visible': True,
|
||||||
|
'enforce_policy': True},
|
||||||
|
LOCAL_PREF_KEY: {
|
||||||
|
'allow_post': True, 'allow_put': True,
|
||||||
|
'is_visible': True,
|
||||||
|
'default': None,
|
||||||
|
'validate': {'type:range': LOCAL_PREF_RANGE},
|
||||||
|
'enforce_policy': True}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PORT_ASSOCIATION = 'port_association'
|
||||||
|
PORT_ASSOCIATIONS = 'port_associations'
|
||||||
|
|
||||||
|
ROUTES = 'routes'
|
||||||
|
|
||||||
|
PREFIX_TYPE = 'prefix'
|
||||||
|
BGPVPN_TYPE = 'bgpvpn'
|
||||||
|
ROUTE_TYPES = [PREFIX_TYPE, BGPVPN_TYPE]
|
||||||
|
|
||||||
|
ADV_FIXED_IPS = 'advertise_fixed_ips'
|
||||||
|
|
||||||
|
TYPE = 'type'
|
||||||
|
|
||||||
|
PREFIX = 'prefix'
|
||||||
|
BGPVPN_ID = 'bgpvpn_id'
|
||||||
|
|
||||||
|
ADV_EXTRA_ROUTES = 'advertise_extra_routes'
|
||||||
|
|
||||||
|
LOCAL_PREF_KEY_SPEC = {'type:range': LOCAL_PREF_RANGE,
|
||||||
|
'required': False}
|
||||||
|
|
||||||
|
ROUTE_SPECS = EXTRA_DHCP_OPT_KEY_SPECS = [
|
||||||
|
{'type': {'type:values': [PREFIX_TYPE],
|
||||||
|
'required': True},
|
||||||
|
'prefix': {'type:subnet': None,
|
||||||
|
'required': True},
|
||||||
|
LOCAL_PREF_KEY: LOCAL_PREF_KEY_SPEC,
|
||||||
|
},
|
||||||
|
{'type': {'type:values': [BGPVPN_TYPE],
|
||||||
|
'required': True},
|
||||||
|
'bgpvpn_id': {'type:uuid': None,
|
||||||
|
'required': True},
|
||||||
|
LOCAL_PREF_KEY: LOCAL_PREF_KEY_SPEC,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
SUB_RESOURCE_ATTRIBUTE_MAP = {
|
||||||
|
PORT_ASSOCIATIONS: {
|
||||||
|
'parent': {
|
||||||
|
'collection_name': COLLECTION_NAME,
|
||||||
|
'member_name': RESOURCE_NAME},
|
||||||
|
'parameters': {
|
||||||
|
'id': {'allow_post': False, 'allow_put': False,
|
||||||
|
'validate': {'type:uuid': None},
|
||||||
|
'is_visible': True,
|
||||||
|
'primary_key': True},
|
||||||
|
'project_id': {'allow_post': True, 'allow_put': False,
|
||||||
|
'validate': {
|
||||||
|
'type:string': db_const.PROJECT_ID_FIELD_SIZE},
|
||||||
|
'required_by_policy': True,
|
||||||
|
'is_visible': True,
|
||||||
|
'enforce_policy': True},
|
||||||
|
'port_id': {'allow_post': True, 'allow_put': False,
|
||||||
|
'validate': {'type:uuid': None},
|
||||||
|
'is_visible': True,
|
||||||
|
'enforce_policy': True},
|
||||||
|
ROUTES: {'allow_post': True, 'allow_put': False,
|
||||||
|
'default': [],
|
||||||
|
'convert_list_to': converters.convert_kvp_list_to_dict,
|
||||||
|
'validate': {
|
||||||
|
'type:list_of_any_key_specs_or_none': ROUTE_SPECS
|
||||||
|
},
|
||||||
|
'enforce_policy': True,
|
||||||
|
'is_visible': True},
|
||||||
|
ADV_FIXED_IPS: {'allow_post': True, 'allow_put': True,
|
||||||
|
'default': True,
|
||||||
|
'convert_to': converters.convert_to_boolean,
|
||||||
|
'is_visible': True},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
bgpvpn.ROUTER_ASSOCIATIONS: {
|
||||||
|
'parent': {'collection_name': COLLECTION_NAME,
|
||||||
|
'member_name': RESOURCE_NAME},
|
||||||
|
'parameters': {
|
||||||
|
ADV_EXTRA_ROUTES: {'allow_post': True, 'allow_put': True,
|
||||||
|
'default': True,
|
||||||
|
'convert_to': converters.convert_to_boolean,
|
||||||
|
'is_visible': True},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ACTION_MAP = {
|
||||||
|
}
|
||||||
|
|
||||||
|
ACTION_STATUS = {}
|
||||||
|
|
||||||
|
REQUIRED_EXTENSIONS = [
|
||||||
|
bgpvpn.ALIAS
|
||||||
|
]
|
||||||
|
|
||||||
|
OPTIONAL_EXTENSIONS = []
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
#
|
||||||
|
# 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 neutron_lib.api.definitions import bgpvpn
|
||||||
|
from neutron_lib.api.definitions import bgpvpn_routes_control
|
||||||
|
from neutron_lib.tests.unit.api.definitions import base
|
||||||
|
|
||||||
|
|
||||||
|
class BgpvpnRoutesControlDefinitionTestCase(base.DefinitionBaseTestCase):
|
||||||
|
|
||||||
|
extension_module = bgpvpn_routes_control
|
||||||
|
extension_resources = (bgpvpn.COLLECTION_NAME,)
|
||||||
|
extension_attributes = ('ports', 'routes', 'advertise_fixed_ips',
|
||||||
|
'advertise_extra_routes', 'local_pref')
|
||||||
|
extension_subresources = ('port_associations', 'router_associations')
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
The ``bgpvpn-routes-control`` API extension is introduced to enrich the
|
||||||
|
base ``bgpvpn`` extension. It allows to control BGPVPN connectivity at
|
||||||
|
the granularity of a port and the advertisement into a BGPVPN of routes
|
||||||
|
corresponding to destination reachable via a given port (static routes,
|
||||||
|
BGPVPN route leaking).
|
||||||
Reference in New Issue
Block a user