Introduce new bgp_associations API definition
Related-Bug: #1921461 Related-Change: https://review.opendev.org/783791 (spec) Signed-off-by: Manu B <manubk2020@gmail.com> Change-Id: If80cf13417dca40de127fbac52ebaa8169be9422
This commit is contained in:
parent
63c8443a65
commit
6df74e063d
@ -15,6 +15,14 @@ external network is best for being used as a gateway network.
|
|||||||
The association builds a list of all virtual routers with gateways on provider
|
The association builds a list of all virtual routers with gateways on provider
|
||||||
and self-service networks within the same address scope.
|
and self-service networks within the same address scope.
|
||||||
|
|
||||||
|
BGP associations extension
|
||||||
|
==========================
|
||||||
|
|
||||||
|
The ``bgp_associations`` extension enables addition of router, peer association
|
||||||
|
resources as sub-resources to the existing ``bgp-speakers`` resource. New
|
||||||
|
action ``get_routes`` is also added that will list both learnt as well as
|
||||||
|
advertised routes by the bgp speaker.
|
||||||
|
|
||||||
List BGP Speakers
|
List BGP Speakers
|
||||||
=================
|
=================
|
||||||
|
|
||||||
@ -207,7 +215,7 @@ There is no body content for the response of a successful DELETE request.
|
|||||||
Add BGP Peer to a BGP Speaker
|
Add BGP Peer to a BGP Speaker
|
||||||
=============================
|
=============================
|
||||||
|
|
||||||
.. rest_method:: PUT /v2.0/bgp-speakers/<bgp-speaker-id>/add-bgp-peer
|
.. rest_method:: PUT /v2.0/bgp-speakers/{bgp-speaker-id}/add-bgp-peer
|
||||||
|
|
||||||
Bind the BGP peer to the specified BGP Speaker.
|
Bind the BGP peer to the specified BGP Speaker.
|
||||||
|
|
||||||
@ -243,7 +251,7 @@ Response Example
|
|||||||
Remove BGP Peer from a BGP Speaker
|
Remove BGP Peer from a BGP Speaker
|
||||||
==================================
|
==================================
|
||||||
|
|
||||||
.. rest_method:: PUT /v2.0/bgp-speakers/<bgp-speaker-id>/remove-bgp-peer
|
.. rest_method:: PUT /v2.0/bgp-speakers/{bgp-speaker-id}/remove-bgp-peer
|
||||||
|
|
||||||
Unbind the BGP peer from a BGP Speaker.
|
Unbind the BGP peer from a BGP Speaker.
|
||||||
|
|
||||||
@ -271,7 +279,7 @@ There is no body content for the response of a successful DELETE request.
|
|||||||
Add Network to a BGP Speaker
|
Add Network to a BGP Speaker
|
||||||
============================
|
============================
|
||||||
|
|
||||||
.. rest_method:: PUT /v2.0/bgp-speakers/<bgp-speaker-id>/add_gateway_network
|
.. rest_method:: PUT /v2.0/bgp-speakers/{bgp-speaker-id}/add_gateway_network
|
||||||
|
|
||||||
Add a network to the specified BGP speaker.
|
Add a network to the specified BGP speaker.
|
||||||
|
|
||||||
@ -308,16 +316,360 @@ Response Example
|
|||||||
Delete Network from a BGP Speaker
|
Delete Network from a BGP Speaker
|
||||||
=================================
|
=================================
|
||||||
|
|
||||||
.. rest_method:: PUT /v2.0/bgp-speakers/<bgp-speaker-id>/remove_gateway_network
|
.. rest_method:: PUT /v2.0/bgp-speakers/{bgp-speaker-id}/remove_gateway_network
|
||||||
|
|
||||||
Remove a network from the specified BGP speaker.
|
Remove a network from the specified BGP speaker.
|
||||||
|
|
||||||
Normal response codes: 200
|
Normal response codes: 200
|
||||||
|
|
||||||
|
List Router associations for a given BGP speaker
|
||||||
|
================================================
|
||||||
|
|
||||||
|
.. rest_method:: GET /v2.0/bgp-speakers/{bgp-speaker-id}/router_associations
|
||||||
|
|
||||||
|
List all the associated routers for a given BGP speaker
|
||||||
|
|
||||||
|
Normal response codes: 200
|
||||||
|
|
||||||
|
Error response codes: 400, 401, 403
|
||||||
|
|
||||||
|
Request
|
||||||
|
-------
|
||||||
|
|
||||||
|
.. rest_parameters:: parameters.yaml
|
||||||
|
|
||||||
|
- bgp-speaker-id: bgp_speaker_id-path
|
||||||
|
|
||||||
|
Response Parameters
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
.. rest_parameters:: parameters.yaml
|
||||||
|
|
||||||
|
- router_associations: bgp_speaker_router_associations-body
|
||||||
|
- id: bgp_speaker_router_association_id-body
|
||||||
|
- router_id: bgp_speaker-router_id-body
|
||||||
|
- project_id: project_id
|
||||||
|
- advertise_extra_routes: bgp_speaker_advertise_extra_routes-body
|
||||||
|
- status: bgp_speaker_association_status
|
||||||
|
|
||||||
|
Response Example
|
||||||
|
----------------
|
||||||
|
|
||||||
|
.. literalinclude:: samples/bgp/bgp_speaker_list_all_router_associations-response.json
|
||||||
|
:language: javascript
|
||||||
|
|
||||||
|
Show details for a BGP speaker Router Association
|
||||||
|
=================================================
|
||||||
|
|
||||||
|
.. rest_method:: GET /v2.0/bgp-speakers/{bgp-speaker-id}/router_associations/{router-association-id}
|
||||||
|
|
||||||
|
Normal response codes: 200
|
||||||
|
|
||||||
|
Error response codes: 401, 404
|
||||||
|
|
||||||
|
Request
|
||||||
|
-------
|
||||||
|
|
||||||
|
.. rest_parameters:: parameters.yaml
|
||||||
|
|
||||||
|
- bgp-speaker-id: bgp_speaker_id-path
|
||||||
|
- router-association-id: bgp_speaker_router_association_id-path
|
||||||
|
|
||||||
|
Response Parameters
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
.. rest_parameters:: parameters.yaml
|
||||||
|
|
||||||
|
- id: bgp_speaker_router_association_id-body
|
||||||
|
- router_id: bgp_speaker-router_id-body
|
||||||
|
- project_id: project_id
|
||||||
|
- advertise_extra_routes: bgp_speaker_advertise_extra_routes-body
|
||||||
|
- status: bgp_speaker_association_status
|
||||||
|
|
||||||
|
Response Example
|
||||||
|
|
||||||
|
.. literalinclude:: samples/bgp/bgp_speaker_show_router_association-response.json
|
||||||
|
:language: javascript
|
||||||
|
|
||||||
|
Create BGP Speaker Router Association
|
||||||
|
=====================================
|
||||||
|
|
||||||
|
.. rest_method:: POST /v2.0/bgp-speakers/{bgp-speaker-id}/router_associations
|
||||||
|
|
||||||
|
Add a router to the specified BGP speaker.
|
||||||
|
|
||||||
|
Normal response codes: 200
|
||||||
|
|
||||||
|
Error response codes: 401, 403, 404, 409
|
||||||
|
|
||||||
|
Request
|
||||||
|
-------
|
||||||
|
|
||||||
|
.. rest_parameters:: parameters.yaml
|
||||||
|
|
||||||
|
- bgp-speaker-id: bgp_speaker_id-path
|
||||||
|
- router_id: bgp_speaker-router_id-body
|
||||||
|
- advertise_extra_routes: bgp_speaker_advertise_extra_routes-body
|
||||||
|
|
||||||
|
Request Example
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. literalinclude:: samples/bgp/bgp_speaker_create_router_association-request.json
|
||||||
|
:language: javascript
|
||||||
|
|
||||||
|
Response Parameters
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
.. rest_parameters:: parameters.yaml
|
||||||
|
|
||||||
|
- id: bgp_speaker_router_association_id-body
|
||||||
|
- router_id: bgp_speaker-router_id-body
|
||||||
|
- project_id: project_id
|
||||||
|
- advertise_extra_routes: bgp_speaker_advertise_extra_routes-body
|
||||||
|
- status: bgp_speaker_association_status
|
||||||
|
|
||||||
|
Response Example
|
||||||
|
----------------
|
||||||
|
|
||||||
|
.. literalinclude:: samples/bgp/bgp_speaker_create_router_association-response.json
|
||||||
|
:language: javascript
|
||||||
|
|
||||||
|
Update BGP Speaker Router Association
|
||||||
|
=====================================
|
||||||
|
|
||||||
|
.. rest_method:: PUT /v2.0/bgp-speakers/{bgp-speaker-id}/router_associations/{router-association-uuid}
|
||||||
|
|
||||||
|
Update router associated to the specified BGP speaker.
|
||||||
|
|
||||||
|
Normal response codes: 200
|
||||||
|
|
||||||
|
Error response codes: 400, 401, 404, 412
|
||||||
|
|
||||||
|
Request
|
||||||
|
-------
|
||||||
|
|
||||||
|
.. rest_parameters:: parameters.yaml
|
||||||
|
|
||||||
|
- bgp-speaker-id: bgp_speaker_id-path
|
||||||
|
- router-association-uuid: bgp_speaker_router_association_id-path
|
||||||
|
- advertise_extra_routes: bgp_speaker_advertise_extra_routes-body
|
||||||
|
|
||||||
|
Request Example
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. literalinclude:: samples/bgp/bgp_speaker_update_router_association-request.json
|
||||||
|
:language: javascript
|
||||||
|
|
||||||
|
Response Parameters
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
.. rest_parameters:: parameters.yaml
|
||||||
|
|
||||||
|
- id: bgp_speaker_router_association_id-body
|
||||||
|
- router_id: bgp_speaker-router_id-body
|
||||||
|
- project_id: project_id
|
||||||
|
- advertise_extra_routes: bgp_speaker_advertise_extra_routes-body
|
||||||
|
- status: bgp_speaker_association_status
|
||||||
|
|
||||||
|
Response Example
|
||||||
|
----------------
|
||||||
|
|
||||||
|
.. literalinclude:: samples/bgp/bgp_speaker_update_router_association-response.json
|
||||||
|
:language: javascript
|
||||||
|
|
||||||
|
Delete BGP Speaker Router Association
|
||||||
|
=====================================
|
||||||
|
|
||||||
|
.. rest_method:: DELETE /v2.0/bgp-speakers/{bgp-speaker-id}/router_associations/{router-association-uuid}
|
||||||
|
|
||||||
|
Remove a router from the specified BGP speaker.
|
||||||
|
|
||||||
|
Normal response codes: 200
|
||||||
|
|
||||||
|
Error response codes: 400, 401, 404, 412
|
||||||
|
|
||||||
|
Request
|
||||||
|
-------
|
||||||
|
|
||||||
|
.. rest_parameters:: parameters.yaml
|
||||||
|
|
||||||
|
- bgp-speaker-id: bgp_speaker_id-path
|
||||||
|
- router-association-uuid: bgp_speaker_router_association_id-path
|
||||||
|
|
||||||
|
Response
|
||||||
|
--------
|
||||||
|
|
||||||
|
There is no body content for the response of a successful DELETE request.
|
||||||
|
|
||||||
|
List Peer associations for a given BGP speaker
|
||||||
|
==============================================
|
||||||
|
|
||||||
|
.. rest_method:: GET /v2.0/bgp-speakers/{bgp-speaker-id}/peer_associations
|
||||||
|
|
||||||
|
List all the peer associations for a given BGP speaker.
|
||||||
|
|
||||||
|
Normal response codes: 200
|
||||||
|
|
||||||
|
Error response codes: 400, 401, 403
|
||||||
|
|
||||||
|
Request
|
||||||
|
-------
|
||||||
|
|
||||||
|
.. rest_parameters:: parameters.yaml
|
||||||
|
|
||||||
|
- bgp-speaker-id: bgp_speaker_id-path
|
||||||
|
|
||||||
|
Response Parameters
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
.. rest_parameters:: parameters.yaml
|
||||||
|
|
||||||
|
- peer_associations: bgp_speaker_peer_associations-body
|
||||||
|
- id: bgp_speaker_peer_association_id-body
|
||||||
|
- project_id: project_id
|
||||||
|
- bgp_peer_id: bgp_speaker_peer_id-body
|
||||||
|
- status: bgp_speaker_association_status
|
||||||
|
|
||||||
|
Response Example
|
||||||
|
----------------
|
||||||
|
|
||||||
|
.. literalinclude:: samples/bgp/bgp_speaker_list_all_peer_associations-response.json
|
||||||
|
:language: javascript
|
||||||
|
|
||||||
|
Show details for a BGP speaker Peer Association
|
||||||
|
===============================================
|
||||||
|
|
||||||
|
.. rest_method:: GET /v2.0/bgp-speakers/{bgp-speaker-id}/peer_associations/{peer-association-id}
|
||||||
|
|
||||||
|
Normal response codes: 200
|
||||||
|
|
||||||
|
Error response codes: 401, 404
|
||||||
|
|
||||||
|
Request
|
||||||
|
-------
|
||||||
|
|
||||||
|
.. rest_parameters:: parameters.yaml
|
||||||
|
|
||||||
|
- bgp-speaker-id: bgp_speaker_id-path
|
||||||
|
- peer-association-id: bgp_speaker_peer_association_id-path
|
||||||
|
|
||||||
|
Response Parameters
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
.. rest_parameters:: parameters.yaml
|
||||||
|
|
||||||
|
- id: bgp_speaker_peer_association_id-body
|
||||||
|
- project_id: project_id
|
||||||
|
- bgp_peer_id: bgp_speaker_peer_id-body
|
||||||
|
- status: bgp_speaker_association_status
|
||||||
|
|
||||||
|
Response Example
|
||||||
|
----------------
|
||||||
|
|
||||||
|
.. literalinclude:: samples/bgp/bgp_speaker_show_peer_association-response.json
|
||||||
|
:language: javascript
|
||||||
|
|
||||||
|
Create BGP speaker Peer Association
|
||||||
|
===================================
|
||||||
|
|
||||||
|
.. rest_method:: POST /v2.0/bgp-speakers/{bgp-speaker-id}/peer_associations
|
||||||
|
|
||||||
|
Add a peer association to the specified BGP speaker. This operation is
|
||||||
|
currently planned to be supported only for router-associated BGP speakers and
|
||||||
|
will not be supported for network-associated BGP speakers.
|
||||||
|
|
||||||
|
Normal response codes: 200
|
||||||
|
|
||||||
|
Error response codes: 401, 403, 404, 409
|
||||||
|
|
||||||
|
Request
|
||||||
|
-------
|
||||||
|
|
||||||
|
.. rest_parameters:: parameters.yaml
|
||||||
|
|
||||||
|
- bgp-speaker-id: bgp_speaker_id-path
|
||||||
|
- bgp_peer_id: bgp_speaker_peer_id-body
|
||||||
|
|
||||||
|
Request Example
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. literalinclude:: samples/bgp/bgp_speaker_create_peer_association-request.json
|
||||||
|
:language: javascript
|
||||||
|
|
||||||
|
Response Parameters
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
.. rest_parameters:: parameters.yaml
|
||||||
|
|
||||||
|
- id: bgp_speaker_peer_association_id-body
|
||||||
|
- project_id: project_id
|
||||||
|
- bgp_peer_id: bgp_speaker_peer_id-body
|
||||||
|
- status: bgp_speaker_association_status
|
||||||
|
|
||||||
|
Response Example
|
||||||
|
----------------
|
||||||
|
|
||||||
|
.. literalinclude:: samples/bgp/bgp_speaker_create_peer_association-response.json
|
||||||
|
:language: javascript
|
||||||
|
|
||||||
|
Delete BGP speaker Peer Association
|
||||||
|
===================================
|
||||||
|
|
||||||
|
.. rest_method:: DELETE /v2.0/bgp-speakers/{bgp-speaker-id}/peer_associations/{peer-association-uuid}
|
||||||
|
|
||||||
|
Remove a peer association from the specified BGP speaker. This operation is
|
||||||
|
currently planned to be supported only for router-associated BGP speakers and
|
||||||
|
will not be supported for network-associated BGP speakers.
|
||||||
|
|
||||||
|
Normal response codes: 200
|
||||||
|
|
||||||
|
Error response codes: 400, 401, 404, 412
|
||||||
|
|
||||||
|
Request
|
||||||
|
-------
|
||||||
|
|
||||||
|
.. rest_parameters:: parameters.yaml
|
||||||
|
|
||||||
|
- bgp-speaker-id: bgp_speaker_id-path
|
||||||
|
- peer-association-uuid: bgp_speaker_peer_association_id-path
|
||||||
|
|
||||||
|
Response
|
||||||
|
--------
|
||||||
|
|
||||||
|
There is no body content for the response of a successful DELETE request.
|
||||||
|
|
||||||
|
List learnt and advertised routes advertised by a BGP Speaker
|
||||||
|
=============================================================
|
||||||
|
|
||||||
|
.. rest_method:: GET /v2.0/bgp-speakers/{bgp-speaker-id}/get_routes
|
||||||
|
|
||||||
|
List all routes which includes learnt routes and routes advertised by the
|
||||||
|
specified BGP Speaker.
|
||||||
|
|
||||||
|
Normal response codes: 200
|
||||||
|
|
||||||
|
Error response codes: 401, 404
|
||||||
|
|
||||||
|
Response Parameters
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
.. rest_parameters:: parameters.yaml
|
||||||
|
|
||||||
|
- routes: bgp_speaker_routes-body
|
||||||
|
- cidr: bgp_speaker_cidr-body
|
||||||
|
- nexthop: bgp_speaker_nexthop-body
|
||||||
|
- route_type: bgp_speaker_route_type-body
|
||||||
|
|
||||||
|
Response Example
|
||||||
|
----------------
|
||||||
|
|
||||||
|
.. literalinclude:: samples/bgp/bgp_speaker_list_all_routes-response.json
|
||||||
|
:language: javascript
|
||||||
|
|
||||||
List routes advertised by a BGP Speaker
|
List routes advertised by a BGP Speaker
|
||||||
=======================================
|
=======================================
|
||||||
|
|
||||||
.. rest_method:: GET /v2.0/bgp-speakers/<bgp-speaker-id>/get_advertised_routes
|
.. rest_method:: GET /v2.0/bgp-speakers/{bgp-speaker-id}/get_advertised_routes
|
||||||
|
|
||||||
List all routes advertised by the specified BGP Speaker.
|
List all routes advertised by the specified BGP Speaker.
|
||||||
|
|
||||||
@ -341,7 +693,7 @@ Response Example
|
|||||||
List Dynamic Routing Agents hosting a specific BGP Speaker
|
List Dynamic Routing Agents hosting a specific BGP Speaker
|
||||||
==========================================================
|
==========================================================
|
||||||
|
|
||||||
.. rest_method:: GET /v2.0/bgp-speakers/<bgp-speaker-id>/bgp-dragents
|
.. rest_method:: GET /v2.0/bgp-speakers/{bgp-speaker-id}/bgp-dragents
|
||||||
|
|
||||||
List all BGP dynamic agents which are hosting the specified BGP Speaker.
|
List all BGP dynamic agents which are hosting the specified BGP Speaker.
|
||||||
|
|
||||||
|
@ -19,6 +19,18 @@ bgp_speaker_id-path:
|
|||||||
in: path
|
in: path
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
|
bgp_speaker_peer_association_id-path:
|
||||||
|
description: |
|
||||||
|
The ID of the BGP Speaker Peer association.
|
||||||
|
in: path
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
bgp_speaker_router_association_id-path:
|
||||||
|
description: |
|
||||||
|
The ID of the BGP Speaker Router association.
|
||||||
|
in: path
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
bgpvpn-id-path:
|
bgpvpn-id-path:
|
||||||
description: |
|
description: |
|
||||||
The ID of the BGP VPN.
|
The ID of the BGP VPN.
|
||||||
@ -1779,6 +1791,20 @@ bgp_speaker-networks-body:
|
|||||||
in: body
|
in: body
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
|
bgp_speaker-router_id-body:
|
||||||
|
description: |
|
||||||
|
The ID of a Neutron router to be associated with the BGP speaker.
|
||||||
|
in: body
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
bgp_speaker_advertise_extra_routes-body:
|
||||||
|
description: |
|
||||||
|
Boolean flag which determines whether Neutron extra routes on the Neutron
|
||||||
|
router will be redistributed to bgp-peers by the bgpspeaker. Default is
|
||||||
|
true.
|
||||||
|
in: body
|
||||||
|
required: false
|
||||||
|
type: boolean
|
||||||
bgp_speaker_advertise_fip_host_routes-body:
|
bgp_speaker_advertise_fip_host_routes-body:
|
||||||
description: |
|
description: |
|
||||||
Whether to enable or disable the advertisement of floating ip host
|
Whether to enable or disable the advertisement of floating ip host
|
||||||
@ -1799,6 +1825,13 @@ bgp_speaker_advertised_routes-body:
|
|||||||
in: body
|
in: body
|
||||||
required: true
|
required: true
|
||||||
type: array
|
type: array
|
||||||
|
bgp_speaker_association_status:
|
||||||
|
description: |
|
||||||
|
Status of realization of a peer or a router association on the underlying
|
||||||
|
Openstack infrastructure. It can be either ``DOWN`` or ``ACTIVE``.
|
||||||
|
in: body
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
bgp_speaker_cidr-body:
|
bgp_speaker_cidr-body:
|
||||||
description: |
|
description: |
|
||||||
The cidr of the route advertised by the BGP Speaker.
|
The cidr of the route advertised by the BGP Speaker.
|
||||||
@ -1823,12 +1856,50 @@ bgp_speaker_nexthop-body:
|
|||||||
in: body
|
in: body
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
|
bgp_speaker_peer_association_id-body:
|
||||||
|
description: |
|
||||||
|
The ID of Peer association associated to BGP speaker.
|
||||||
|
in: body
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
bgp_speaker_peer_associations-body:
|
||||||
|
description: |
|
||||||
|
A list of ``peer_association`` objects associated to a BGP speaker.
|
||||||
|
in: body
|
||||||
|
required: true
|
||||||
|
type: array
|
||||||
bgp_speaker_peer_id-body:
|
bgp_speaker_peer_id-body:
|
||||||
description: |
|
description: |
|
||||||
The id of the peer.
|
The id of the peer.
|
||||||
in: body
|
in: body
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
|
bgp_speaker_route_type-body:
|
||||||
|
description: |
|
||||||
|
The type of route that describes where the route is originated. Valid
|
||||||
|
values are ``local``, ``peer``.
|
||||||
|
in: body
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
bgp_speaker_router_association_id-body:
|
||||||
|
description: |
|
||||||
|
The ID of Router association associated to BGP speaker.
|
||||||
|
in: body
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
bgp_speaker_router_associations-body:
|
||||||
|
description: |
|
||||||
|
A list of ``router_association`` objects associated to a BGP speaker.
|
||||||
|
in: body
|
||||||
|
required: true
|
||||||
|
type: array
|
||||||
|
bgp_speaker_routes-body:
|
||||||
|
description: |
|
||||||
|
A list of routes (cidr-nexthop-route_type values) advertised and learnt by
|
||||||
|
the BGP Speaker.
|
||||||
|
in: body
|
||||||
|
required: true
|
||||||
|
type: array
|
||||||
bgp_speakers:
|
bgp_speakers:
|
||||||
description: |
|
description: |
|
||||||
A list of ``bgp_speaker`` objects. Each ``bgp_speaker`` object acts as a
|
A list of ``bgp_speaker`` objects. Each ``bgp_speaker`` object acts as a
|
||||||
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"peer_association":
|
||||||
|
{
|
||||||
|
"peer_id": "b930d7f6-ceb7-40a0-8b81-a425dd994ccf"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"peer_association":
|
||||||
|
{
|
||||||
|
"project_id": "d84c70a21fed4aeba121a1a429ba0d14",
|
||||||
|
"id": "a3ebaec0-0570-43ac-82f6-60d2b03168d3",
|
||||||
|
"peer_id": "b930d7f6-ceb7-40a0-8b81-a425dd994ccf",
|
||||||
|
"status": "DOWN"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"router_association":
|
||||||
|
{
|
||||||
|
"router_id": "c930d7f6-ceb7-40a0-8b81-a425dd994ccf",
|
||||||
|
"advertise_extra_routes": false
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"router_association":
|
||||||
|
{
|
||||||
|
"project_id": "d84c70a21fed4aeba121a1a429ba0d14",
|
||||||
|
"id": "c3ebaec0-0570-43ac-82f6-60d2b03168d3",
|
||||||
|
"router_id": "c930d7f6-ceb7-40a0-8b81-a425dd994ccf",
|
||||||
|
"advertise_extra_routes": false,
|
||||||
|
"status": "DOWN"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"peer_associations": [
|
||||||
|
{
|
||||||
|
"project_id": "d84c70a21fed4aeba121a1a429ba0d14",
|
||||||
|
"id": "a3ebaec0-0570-43ac-82f6-60d2b03168d3",
|
||||||
|
"peer_id": "b930d7f6-ceb7-40a0-8b81-a425dd994ccf",
|
||||||
|
"status": "ACTIVE"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"project_id": "d84c70a21fed4aeba121a1a429ba0d14",
|
||||||
|
"id": "b3ebaec0-0570-43ac-82f6-60d2b03178f2",
|
||||||
|
"peer_id": "a640d7f6-ceb7-40a0-8b81-a425dd994dde",
|
||||||
|
"status": "ACTIVE"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"router_associations": [
|
||||||
|
{
|
||||||
|
"project_id": "d84c70a21fed4aeba121a1a429ba0d14",
|
||||||
|
"id": "c3ebaec0-0570-43ac-82f6-60d2b03168d3",
|
||||||
|
"router_id": "c930d7f6-ceb7-40a0-8b81-a425dd994ccf",
|
||||||
|
"advertise_extra_routes": true,
|
||||||
|
"status": "ACTIVE"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"project_id": "d84c70a21fed4aeba121a1a429ba0d14",
|
||||||
|
"id": "a4ebaec0-0570-43ac-82f6-60d2b0316844",
|
||||||
|
"router_id": "ac30d7f6-ceb7-40a0-8b81-b425dd994ddf",
|
||||||
|
"advertise_extra_routes": true,
|
||||||
|
"status": "ACTIVE"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"routes":[
|
||||||
|
{
|
||||||
|
"cidr":"192.168.10.0/24",
|
||||||
|
"nexthop":"10.0.0.1",
|
||||||
|
"route_type": "local"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cidr":"192.168.11.0/24",
|
||||||
|
"nexthop":"10.0.0.5",
|
||||||
|
"route_type": "peer"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"peer_association":
|
||||||
|
{
|
||||||
|
"project_id": "d84c70a21fed4aeba121a1a429ba0d14",
|
||||||
|
"id": "a3ebaec0-0570-43ac-82f6-60d2b03168d3",
|
||||||
|
"peer_id": "b930d7f6-ceb7-40a0-8b81-a425dd994ccf",
|
||||||
|
"status": "ACTIVE"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"router_association":
|
||||||
|
{
|
||||||
|
"project_id": "d84c70a21fed4aeba121a1a429ba0d14",
|
||||||
|
"id": "c3ebaec0-0570-43ac-82f6-60d2b03168d3",
|
||||||
|
"router_id": "c930d7f6-ceb7-40a0-8b81-a425dd994ccf",
|
||||||
|
"advertise_extra_routes": true,
|
||||||
|
"status": "ACTIVE"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"router_association":
|
||||||
|
{
|
||||||
|
"advertise_extra_routes": true
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"router_association":
|
||||||
|
{
|
||||||
|
"project_id": "d84c70a21fed4aeba121a1a429ba0d14",
|
||||||
|
"id": "c3ebaec0-0570-43ac-82f6-60d2b03168d3",
|
||||||
|
"router_id": "c930d7f6-ceb7-40a0-8b81-a425dd994ccf",
|
||||||
|
"advertise_extra_routes": true,
|
||||||
|
"status": "ACTIVE"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -21,6 +21,7 @@ from neutron_lib.api.definitions import availability_zone
|
|||||||
from neutron_lib.api.definitions import availability_zone_filter
|
from neutron_lib.api.definitions import availability_zone_filter
|
||||||
from neutron_lib.api.definitions import bgp
|
from neutron_lib.api.definitions import bgp
|
||||||
from neutron_lib.api.definitions import bgp_4byte_asn
|
from neutron_lib.api.definitions import bgp_4byte_asn
|
||||||
|
from neutron_lib.api.definitions import bgp_associations
|
||||||
from neutron_lib.api.definitions import bgp_dragentscheduler
|
from neutron_lib.api.definitions import bgp_dragentscheduler
|
||||||
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 bgpvpn_routes_control
|
||||||
@ -146,6 +147,7 @@ _ALL_API_DEFINITIONS = {
|
|||||||
availability_zone_filter,
|
availability_zone_filter,
|
||||||
bgp,
|
bgp,
|
||||||
bgp_4byte_asn,
|
bgp_4byte_asn,
|
||||||
|
bgp_associations,
|
||||||
bgp_dragentscheduler,
|
bgp_dragentscheduler,
|
||||||
bgpvpn,
|
bgpvpn,
|
||||||
bgpvpn_routes_control,
|
bgpvpn_routes_control,
|
||||||
|
86
neutron_lib/api/definitions/bgp_associations.py
Normal file
86
neutron_lib/api/definitions/bgp_associations.py
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
# 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 as n_conv
|
||||||
|
from neutron_lib.api.definitions import bgp
|
||||||
|
from neutron_lib.db import constants as db_const
|
||||||
|
|
||||||
|
ALIAS = 'bgp-associations'
|
||||||
|
DESCRIPTION = "Allow adding router, peer association objects to BGP extension"
|
||||||
|
IS_SHIM_EXTENSION = False
|
||||||
|
IS_STANDARD_ATTR_EXTENSION = False
|
||||||
|
NAME = 'BGP Associations'
|
||||||
|
UPDATED_TIMESTAMP = "2021-07-01T11:00:00-00:00"
|
||||||
|
|
||||||
|
BGP_ASSOC_EXT_ALIAS = 'bgp-associations'
|
||||||
|
ROUTER_ASSOCIATIONS = 'router_associations'
|
||||||
|
ROUTER_ASSOCIATION = 'router_association'
|
||||||
|
PEER_ASSOCIATIONS = 'peer_associations'
|
||||||
|
PEER_ASSOCIATION = 'peer_association'
|
||||||
|
|
||||||
|
RESOURCE_ATTRIBUTE_MAP = {
|
||||||
|
bgp.BGP_SPEAKERS: {}
|
||||||
|
}
|
||||||
|
|
||||||
|
SUB_RESOURCE_ATTRIBUTE_MAP = {
|
||||||
|
ROUTER_ASSOCIATIONS: {
|
||||||
|
'parent': {'collection_name': bgp.BGP_SPEAKERS,
|
||||||
|
'member_name': bgp.BGP_SPEAKER_BODY_KEY_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},
|
||||||
|
'router_id': {'allow_post': True, 'allow_put': False,
|
||||||
|
'validate': {'type:uuid': None},
|
||||||
|
'is_visible': True},
|
||||||
|
'advertise_extra_routes': {
|
||||||
|
'allow_post': True,
|
||||||
|
'allow_put': True,
|
||||||
|
'convert_to': n_conv.convert_to_boolean,
|
||||||
|
'validate': {'type:boolean': None},
|
||||||
|
'is_visible': True, 'default': True,
|
||||||
|
'required_by_policy': False},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
PEER_ASSOCIATIONS: {
|
||||||
|
'parent': {'collection_name': bgp.BGP_SPEAKERS,
|
||||||
|
'member_name': bgp.BGP_SPEAKER_BODY_KEY_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},
|
||||||
|
'peer_id': {'allow_post': True, 'allow_put': False,
|
||||||
|
'validate': {'type:uuid': None},
|
||||||
|
'is_visible': True}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
REQUIRED_EXTENSIONS = [bgp.ALIAS]
|
||||||
|
OPTIONAL_EXTENSIONS = []
|
||||||
|
ACTION_MAP = bgp.ACTION_MAP
|
||||||
|
ACTION_MAP[bgp.BGP_SPEAKER_RESOURCE_NAME].update({
|
||||||
|
'get_routes': 'GET',
|
||||||
|
})
|
||||||
|
ACTION_STATUS = {}
|
@ -0,0 +1,24 @@
|
|||||||
|
# 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 bgp
|
||||||
|
from neutron_lib.api.definitions import bgp_associations
|
||||||
|
from neutron_lib.tests.unit.api.definitions import base
|
||||||
|
|
||||||
|
|
||||||
|
class BgpAssociationsTestCase(base.DefinitionBaseTestCase):
|
||||||
|
extension_module = bgp_associations
|
||||||
|
extension_resources = (bgp.BGP_SPEAKERS,)
|
||||||
|
extension_subresources = (bgp_associations.ROUTER_ASSOCIATIONS,
|
||||||
|
bgp_associations.PEER_ASSOCIATIONS)
|
||||||
|
extension_attributes = ('router_id', 'advertise_extra_routes', 'peer_id')
|
@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- New extension ``bgp_associations`` is included to allow addition of
|
||||||
|
router, peer association resources as sub-resources to the existing
|
||||||
|
``bgp-speakers`` resource.
|
||||||
|
- Added action ``get_routes`` to the existing bgp extension to list both
|
||||||
|
learnt as well as advertised routes by the bgp speaker.
|
||||||
|
(``Note`` that this API extension was merged as experimental to enable
|
||||||
|
parallel development of multiple backends. At the moment this API does
|
||||||
|
not have a reference implementation and should not be considered final.
|
||||||
|
A later release note will mark when the reference implementation gets
|
||||||
|
merged and the feauture is ready to be consumed.
|
Loading…
x
Reference in New Issue
Block a user