Merge "Move bgp api-def to neutron-lib"

This commit is contained in:
Zuul 2021-05-18 12:36:57 +00:00 committed by Gerrit Code Review
commit 8cfd261349
30 changed files with 1137 additions and 1 deletions

View File

@ -0,0 +1,169 @@
.. -*- rst -*-
========
BGP Peer
========
BGP peer defined in Neutron represents real BGP infrastructure such as
routers, route reflectors and route servers.
When a BGP peer is defined and associated with a BGP Speaker, Neutron will
attempt to open a BGP peering session with the mentioned remote peer. It is
this session, using which Neutron announces it's routes.
List BGP Peers
=================
.. rest_method:: GET /v2.0/bgp-peers
Issue a ``GET`` request to ``/v2.0/bgp-peers`` to retrieve the list of available
BGP peers.
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: 400, 401, 403
Request
-------
.. rest_parameters:: parameters.yaml
- fields: fields
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- bgp_peers: bgp_peers
- remote_as: bgp_peer_remote_as_body
- name: bgp_peer_name_body
- peer_ip: bgp_peer_ip_body
- id: bgp_peer_id_body
- tenant_id: project_id
- project_id: project_id
Response Example
----------------
.. literalinclude:: samples/bgp/bgp_peer-list-response.json
:language: javascript
Show BGP Peer details
=====================
.. rest_method:: GET /v2.0/bgp-peers/{bgp-peer-id}
Normal response codes: 200
Error response codes: 401, 404
Request
-------
.. rest_parameters:: parameters.yaml
- bgp-speaker-id: bgp_speaker_id-path
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- bgp_peers: bgp_peers
- remote_as: bgp_peer_remote_as_body
- name: bgp_peer_name_body
- peer_ip: bgp_peer_ip_body
- id: bgp_peer_id_body
- tenant_id: project_id
- project_id: project_id
Response Example
----------------
.. literalinclude:: samples/bgp/bgp_peer-show-response.json
:language: javascript
Create a BGP Peer
=================
.. rest_method:: POST /v2.0/bgp-peers
Create a BGP Peer.
Normal response codes: 201
Error response codes: 401, 403, 404, 409
Request
-------
.. rest_parameters:: parameters.yaml
- auth_type: bgp_peer_auth_type_body
- remote_as: bgp_peer_remote_as_body
- name: bgp_peer_name_body
- peer_ip: bgp_peer_ip_body
Request Example
---------------
.. literalinclude:: samples/bgp/bgp_peer-create-request.json
:language: javascript
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- bgp_peer: bgp_peer_body
- auth_type: bgp_peer_auth_type_body
- password: bgp_peer_password_body
- remote_as: bgp_peer_remote_as_body
- name: bgp_peer_name_body
- peer_ip: bgp_peer_ip_body
- id: bgp_peer_id_body
- tenant_id: project_id
- project_id: project_id
Response Example
----------------
.. literalinclude:: samples/bgp/bgp_peer-create-response.json
:language: javascript
Update a BGP Peer
=================
.. rest_method:: PUT /v2.0/bgp-peers/{bgp-peer-id}
Update a specific BGP Peer.
Normal response codes: 202
Error response codes: 400, 401, 404, 41
Request
-------
.. rest_parameters:: parameters.yaml
- name: bgp_peer_name_body
- password: bgp_peer_password_body
Delete a BGP Peer
=================
.. rest_method:: DELETE /v2.0/bgp-peers/{bgp-peer-id}
Delete a specific BGP Peer.
Normal response codes: 204
Error response codes: 400, 401, 404, 412

View File

@ -0,0 +1,375 @@
.. -*- rst -*-
===========
BGP Speaker
===========
BGP Speaker acts as a route server using BGP routing protocol. It advertises
routes to the BGP peers which are added to the BGP Speaker.
Currently, BGP Speaker only advertises routes for a network to which it is associated.
A BGP Speaker requires association with a "gateway" network to determine eligible routes.
In Neutron, a "gateway" network connects Neutron routers to the upstream routers. An
external network is best for being used as a gateway network.
The association builds a list of all virtual routers with gateways on provider
and self-service networks within the same address scope.
List BGP Speakers
=================
.. rest_method:: GET /v2.0/bgp-speakers
Issue a ``GET`` request to ``/v2.0/bgp-speakers`` to retrieve this list of available
BGP Speakers.
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: 400, 401, 403
Request
-------
.. rest_parameters:: parameters.yaml
- fields: fields
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- bgp_speakers: bgp_speakers
- id: bgp_speaker-id-body
- name: bgp_speaker-name-body
- ip_version: bgp_speaker_ip_version-body
- advertise_floating_ip_host_routes: bgp_speaker_advertise_fip_host_routes-body
- advertise_tenant_networks: bgp_speaker_advertise_tenant_net-body
- local_as: bgp_speaker_local_as_body
- networks: bgp_speaker-networks-body
- tenant_id: project_id
- project_id: project_id
Response Example
----------------
.. literalinclude:: samples/bgp/bgp_speaker-list-response.json
:language: javascript
Show BGP Speaker details
========================
.. rest_method:: GET /v2.0/bgp-speakers/{bgp-speaker-id}
Issue a ``GET`` request to ``/v2.0/bgp-speakers/<bgp-speaker-id>`` to retrieve the
detail about a specific BGP Speaker.
Normal response codes: 200
Error response codes: 401, 404
Request
-------
.. rest_parameters:: parameters.yaml
- bgp-speaker-id: bgp_speaker_id-path
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- id: bgp_speaker-id-body
- name: bgp_speaker-name-body
- ip_version: bgp_speaker_ip_version-body
- advertise_floating_ip_host_routes: bgp_speaker_advertise_fip_host_routes-body
- advertise_tenant_networks: bgp_speaker_advertise_tenant_net-body
- local_as: bgp_speaker_local_as_body
- networks: bgp_speaker-networks-body
- tenant_id: project_id
- project_id: project_id
Response Example
----------------
.. literalinclude:: samples/bgp/bgp_speaker-show-response.json
:language: javascript
Create BGP Speaker
==================
.. rest_method:: POST /v2.0/bgp-speakers
Issue a ``POST`` request to ``/v2.0/bgp-speakers`` with following JSON-encoded
data to create a BGP Speaker.
Normal response codes: 201
Error response codes: 401, 403, 404, 409
Request
-------
.. rest_parameters:: parameters.yaml
- name: bgp_speaker-name-body
- ip_version: bgp_speaker_ip_version-body
- advertise_floating_ip_host_routes: bgp_speaker_advertise_fip_host_routes-body
- advertise_tenant_networks: bgp_speaker_advertise_tenant_net-body
- local_as: bgp_speaker_local_as_body
- networks: bgp_speaker-networks-body
Request Example
---------------
.. literalinclude:: samples/bgp/bgp_speaker-create-request.json
:language: javascript
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- id: bgp_speaker-id-body
- name: bgp_speaker-name-body
- ip_version: bgp_speaker_ip_version-body
- advertise_floating_ip_host_routes: bgp_speaker_advertise_fip_host_routes-body
- advertise_tenant_networks: bgp_speaker_advertise_tenant_net-body
- local_as: bgp_speaker_local_as_body
- networks: bgp_speaker-networks-body
- tenant_id: project_id
- project_id: project_id
Response Example
----------------
.. literalinclude:: samples/bgp/bgp_speaker-create-response.json
:language: javascript
Update a BGP Speaker
====================
.. rest_method:: PUT /v2.0/bgp-speakers/{bgp-speaker-id}
Issue ``PUT`` request to ``/v2.0/bgp-speakers/<bgp-speaker-id>`` to update a
specific BGP Speaker. Following attributes can be updated.
Normal response codes: 202
Error response codes: 400, 401, 404, 41
Request
-------
.. rest_parameters:: parameters.yaml
- bgp-speakeriid: bgp_speaker_id-path
- name: bgp_speaker-name-body
- advertise_floating_ip_host_routes: bgp_speaker_advertise_fip_host_routes-body
- advertise_tenant_networks: bgp_speaker_advertise_tenant_net-body
Request Example
---------------
.. literalinclude:: samples/bgp/bgp_speaker-update-request.json
:language: javascript
Delete a BGP Speaker
====================
.. rest_method:: DELETE /v2.0/bgp-speakers/{bgp-speaker-id}
Delete a specific BGP Speaker.
Normal response codes: 204
Error response codes: 400, 401, 404, 412
Request
-------
.. rest_parameters:: parameters.yaml
- bgp-speakeri-id: bgp_speaker_id-path
Response
--------
There is no body content for the response of a successful DELETE request.
Add BGP Peer to a BGP Speaker
=============================
.. rest_method:: PUT /v2.0/bgp-speakers/<bgp-speaker-id>/add-bgp-peer
Bind the BGP peer to the specified BGP Speaker.
Normal response codes: 200
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_add_peer-request.json
:language: javascript
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- bgp_peer_id: bgp_speaker_peer_id-body
Response Example
----------------
.. literalinclude:: samples/bgp/bgp_speaker_add_peer-response.json
:language: javascript
Remove BGP Peer from a BGP Speaker
==================================
.. rest_method:: PUT /v2.0/bgp-speakers/<bgp-speaker-id>/remove-bgp-peer
Unbind the BGP peer from a BGP Speaker.
Normal response codes: 200
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_remove_peer-request.json
:language: javascript
Response
--------
There is no body content for the response of a successful DELETE request.
Add Network to a BGP Speaker
============================
.. rest_method:: PUT /v2.0/bgp-speakers/<bgp-speaker-id>/add_gateway_network
Add a network to the specified BGP speaker.
Normal response codes: 200
Request
-------
.. rest_parameters:: parameters.yaml
- bgp-speaker-id: bgp_speaker_id-path
- network_id: network_id
Request Example
---------------
.. literalinclude:: samples/bgp/bgp_speaker_add_network-request.json
:language: javascript
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- bgp_peer_id: bgp_speaker_peer_id-body
- network_id: network_id
Response Example
----------------
.. literalinclude:: samples/bgp/bgp_speaker_add_network-response.json
:language: javascript
Delete Network from a BGP Speaker
=================================
.. rest_method:: PUT /v2.0/bgp-speakers/<bgp-speaker-id>/remove_gateway_network
Remove a network from the specified BGP speaker.
Normal response codes: 200
List routes advertised by a BGP Speaker
=======================================
.. rest_method:: GET /v2.0/bgp-speakers/<bgp-speaker-id>/get_advertised_routes
List all routes advertised by the specified BGP Speaker.
Normal response codes: 200
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- advertised_routes: bgp_speaker_advertised_routes-body
- cidr: bgp_speaker_cidr-body
- nexthop: bgp_speaker_nexthop-body
Response Example
----------------
.. literalinclude:: samples/bgp/bgp_speaker_list_routes-response.json
:language: javascript
List Dynamic Routing Agents hosting a specific BGP Speaker
==========================================================
.. rest_method:: GET /v2.0/bgp-speakers/<bgp-speaker-id>/bgp-dragents
List all BGP dynamic agents which are hosting the specified BGP Speaker.
Normal response codes: 200
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- admin_state_up: admin_state_up
- agents: agents
- agent_type: agent_type
- alive: alive
- availability_zone: availability_zone
- binary: binary
- configurations: configurations
- created_at: created_at_resource
- description: description
- heartbeat_timestamp: heartbeat_timestamp
- host: host
- id: id
- resources_synced: agent_resources_synced
- started_at: started_at
- topic: topic
Response Example
----------------
.. literalinclude:: samples/bgp/bgp_speaker_list_dragent_host-response.json
:language: javascript

View File

@ -90,6 +90,11 @@ BGP/MPLS VPN Interconnection
.. include:: bgpvpn-network_associations.inc
.. include:: bgpvpn-router_associations.inc
.. include:: bgpvpn-port_associations.inc
###################
BGP Dynamic Routing
###################
.. include:: bgp_speaker.inc
.. include:: bgp_peer.inc
#######
Logging
#######

View File

@ -13,6 +13,12 @@ agent_id-path:
in: path
required: true
type: string
bgp_speaker_id-path:
description: |
The ID of the BGP Speaker.
in: path
required: true
type: string
bgpvpn-id-path:
description: |
The ID of the BGP VPN.
@ -1679,6 +1685,132 @@ bandwidth_limit_rules:
in: body
required: true
type: array
bgp_peer_auth_type_body:
description: |
The authentication type for the BGP Peer, can be ``none`` or ``md5``.
``none`` by default.
in: body
required: true
type: object
bgp_peer_body:
description: |
A BGP Peer object.
in: body
required: true
type: object
bgp_peer_id_body:
description: |
The ID of the BGP Peer.
in: body
required: true
type: string
bgp_peer_ip_body:
description: |
The ip address of the Peer.
in: body
required: true
type: string
bgp_peer_name_body:
description: |
The user meaningful name of the BGP Peer.
in: body
required: true
type: string
bgp_peer_password_body:
description: |
The authentication password for the specified authentication type.
in: body
required: true
type: string
bgp_peer_remote_as_body:
description: |
The remote Autonomous System number of the BGP Peer.
in: body
required: true
type: string
bgp_peers:
description: |
A list of ``bgp_peer`` objects. Each ``bgp_peer`` object represents
real BGP infrastructure such as routers, route reflectors and route
servers.
in: body
required: true
type: array
bgp_speaker-id-body:
description: |
The ID of the BGP Speaker.
in: body
required: true
type: string
bgp_speaker-name-body:
description: |
The user meaningful name of the BGP Speaker.
in: body
required: true
type: string
bgp_speaker-networks-body:
description: |
The ID of the network to which the BGP Speaker is associated.
in: body
required: true
type: string
bgp_speaker_advertise_fip_host_routes-body:
description: |
Whether to enable or disable the advertisement of floating ip host
routes by the BGP Speaker. True by default.
in: body
required: true
type: string
bgp_speaker_advertise_tenant_net-body:
description: |
Whether to enable or disable the advertisement of tenant network
routes by the BGP Speaker. True by default.
in: body
required: true
type: string
bgp_speaker_advertised_routes-body:
description: |
A list of routes (cidr-nexthop pairs) advertised by the BGP Speaker.
in: body
required: true
type: array
bgp_speaker_cidr-body:
description: |
The cidr of the route advertised by the BGP Speaker.
in: body
required: true
type: string
bgp_speaker_ip_version-body:
description: |
The IP version (4 or 6) of the BGP Speaker.
in: body
required: true
type: string
bgp_speaker_local_as_body:
description: |
The local Autonomous System number of the BGP Speaker.
in: body
required: true
type: string
bgp_speaker_nexthop-body:
description: |
The nexthop of the route advertised by the BGP Speaker.
in: body
required: true
type: string
bgp_speaker_peer_id-body:
description: |
The id of the peer.
in: body
required: true
type: string
bgp_speakers:
description: |
A list of ``bgp_speaker`` objects. Each ``bgp_speaker`` object acts as a
route server using BGP routing protocol.
in: body
required: true
type: array
bgpvpn:
description: |
A ``bgpvpn`` object represents an MPLS network with which Neutron routers

View File

@ -0,0 +1,8 @@
{
"bgp_peer":{
"auth_type":"none",
"remote_as":"1001",
"name":"bgp-peer",
"peer_ip":"10.0.0.3"
}
}

View File

@ -0,0 +1,10 @@
{
"bgp_peer":{
"auth_type":"none",
"remote_as":"1001",
"name":"bgp-peer",
"tenant_id":"34a6e17a48cf414ebc890367bf42266b",
"peer_ip":"10.0.0.3",
"id":"a7193581-a31c-4ea5-8218-b3052758461f"
}
}

View File

@ -0,0 +1,12 @@
{
"bgp_peers":[
{
"auth_type":"none",
"remote_as":1001,
"name":"bgp-peer",
"tenant_id":"34a6e17a48cf414ebc890367bf42266b",
"peer_ip":"10.0.0.3",
"id":"a7193581-a31c-4ea5-8218-b3052758461f"
}
]
}

View File

@ -0,0 +1,10 @@
{
"bgp_peer":{
"auth_type":"none",
"remote_as":1001,
"name":"bgp-peer",
"tenant_id":"34a6e17a48cf414ebc890367bf42266b",
"peer_ip":"10.0.0.3",
"id":"a7193581-a31c-4ea5-8218-b3052758461f"
}
}

View File

@ -0,0 +1,7 @@
{
"bgp_speaker":{
"ip_version":4,
"local_as":"1000",
"name":"bgp-speaker"
}
}

View File

@ -0,0 +1,15 @@
{
"bgp_speaker":{
"peers":[
],
"name":"bgp-speaker",
"tenant_id":"34a6e17a48cf414ebc890367bf42266b",
"local_as":1000,
"advertise_tenant_networks":true,
"networks":[
],
"ip_version":4,
"advertise_floating_ip_host_routes":true,
"id":"5e08db80-db77-4b5c-a56d-dbca0b284f2c"
}
}

View File

@ -0,0 +1,30 @@
{
"bgp_speakers":[
{
"peers":[
],
"name":"bgp-speaker-1",
"tenant_id":"34a6e17a48cf414ebc890367bf42266b",
"local_as":1001,
"advertise_tenant_networks":true,
"networks":[
],
"ip_version":4,
"advertise_floating_ip_host_routes":true,
"id":"5e08db80-db77-4b5c-a56d-dbca0b284f2c"
},
{
"peers":[
],
"name":"bgp-speaker",
"tenant_id":"34a6e17a48cf414ebc890367bf42266b",
"local_as":1000,
"advertise_tenant_networks":true,
"networks":[
],
"ip_version":4,
"advertise_floating_ip_host_routes":true,
"id":"b759b2a1-27f4-4a6b-bb61-f2c9a22c9902"
}
]
}

View File

@ -0,0 +1,15 @@
{
"bgp_speaker": {
"peers": [
],
"name": "bgp-speaker-1",
"tenant_id": "34a6e17a48cf414ebc890367bf42266b",
"local_as": 1001,
"advertise_tenant_networks": true,
"networks": [
],
"ip_version": 4,
"advertise_floating_ip_host_routes": true,
"id": "5e08db80-db77-4b5c-a56d-dbca0b284f2c"
}
}

View File

@ -0,0 +1,7 @@
{
"bgp_speaker":{
"advertise_floating_ip_host_routes": "true",
"advertise_tenant_networks": "false",
"name":"bgp-speaker_2"
}
}

View File

@ -0,0 +1,3 @@
{
"network_id":"f2269b61-6755-4174-8f64-5e318617b204"
}

View File

@ -0,0 +1,3 @@
{
"network_id":"f2269b61-6755-4174-8f64-5e318617b204"
}

View File

@ -0,0 +1,3 @@
{
"bgp_peer_id":"a7193581-a31c-4ea5-8218-b3052758461f"
}

View File

@ -0,0 +1,3 @@
{
"bgp_peer_id":"a7193581-a31c-4ea5-8218-b3052758461f"
}

View File

@ -0,0 +1,25 @@
{
"agents":[
{
"binary":"neutron-bgp-dragent",
"description":null,
"admin_state_up":true,
"heartbeat_timestamp":"2016-05-17 03:05:12",
"availability_zone":null,
"alive":true,
"topic":"bgp_dragent",
"host":"yangyubj-virtual-machine",
"agent_type":"BGP dynamic routing agent",
"resource_versions":{
},
"created_at":"2016-05-09 07:38:00",
"started_at":"2016-05-11 09:06:13",
"id":"af216618-29d3-4ee7-acab-725bdc90e614",
"configurations":{
"advertise_routes":0,
"bgp_peers":0,
"bgp_speakers":1
}
}
]
}

View File

@ -0,0 +1,8 @@
{
"advertised_routes":[
{
"cidr":"192.168.10.0/24",
"nexthop":"10.0.0.1"
}
]
}

View File

@ -0,0 +1,3 @@
{
"bgp_peer_id":"a7193581-a31c-4ea5-8218-b3052758461f"
}

View File

@ -19,6 +19,9 @@ from neutron_lib.api.definitions import allowedaddresspairs
from neutron_lib.api.definitions import auto_allocated_topology
from neutron_lib.api.definitions import availability_zone
from neutron_lib.api.definitions import availability_zone_filter
from neutron_lib.api.definitions import bgp
from neutron_lib.api.definitions import bgp_4byte_asn
from neutron_lib.api.definitions import bgp_dragentscheduler
from neutron_lib.api.definitions import bgpvpn
from neutron_lib.api.definitions import bgpvpn_routes_control
from neutron_lib.api.definitions import bgpvpn_stdattrs
@ -140,6 +143,9 @@ _ALL_API_DEFINITIONS = {
auto_allocated_topology,
availability_zone,
availability_zone_filter,
bgp,
bgp_4byte_asn,
bgp_dragentscheduler,
bgpvpn,
bgpvpn_routes_control,
bgpvpn_stdattrs,

View File

@ -157,7 +157,7 @@ KNOWN_EXTENSIONS = (
'trunk',
'trunk-details',
# Add here list of extensions with pointers to the project repo, e.g.
# 'bgp', # https://opendev.org/openstack/neutron-dynamic-routing
'bgp', # https://opendev.org/openstack/neutron-dynamic-routing
# https://opendev.org/openstack/neutron-fwaas
'fwaas',

View File

@ -0,0 +1,132 @@
# Copyright 2016 Hewlett Packard Development Coompany LP
#
# 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 import constants
from neutron_lib.db import constants as db_const
ALIAS = 'bgp'
IS_SHIM_EXTENSION = False
IS_STANDARD_ATTR_EXTENSION = False
NAME = "Neutron BGP Dynamic Routing Extension"
DESCRIPTION = ("Discover and advertise routes for Neutron prefixes "
"dynamically via BGP")
UPDATED_TIMESTAMP = '2016-05-10T15:37:00-00:00'
BGP_SPEAKER_RESOURCE_NAME = 'bgp-speaker'
BGP_SPEAKER_BODY_KEY_NAME = 'bgp_speaker'
BGP_SPEAKERS = '%ss' % BGP_SPEAKER_BODY_KEY_NAME
BGP_PEER_BODY_KEY_NAME = 'bgp_peer'
RESOURCE_ATTRIBUTE_MAP = {
BGP_SPEAKER_RESOURCE_NAME + 's': {
'id': {'allow_post': False, 'allow_put': False,
'validate': {'type:uuid': None},
'is_visible': True, 'primary_key': True},
'name': {'allow_post': True, 'allow_put': True,
'validate': {'type:string': db_const.NAME_FIELD_SIZE},
'is_visible': True, 'default': ''},
'local_as': {'allow_post': True, 'allow_put': False,
'validate': {'type:range': (constants.MIN_ASNUM,
constants.MAX_ASNUM)},
'is_visible': True, 'default': None,
'required_by_policy': False,
'enforce_policy': False},
'ip_version': {'allow_post': True, 'allow_put': False,
'validate': {'type:values': [4, 6]},
'is_visible': True, 'default': None,
'required_by_policy': False,
'enforce_policy': False},
'tenant_id': {'allow_post': True, 'allow_put': False,
'required_by_policy': False,
'validate': {
'type:string': db_const.PROJECT_ID_FIELD_SIZE},
'is_visible': True},
'peers': {'allow_post': False, 'allow_put': False,
'validate': {'type:uuid_list': None},
'is_visible': True, 'default': [],
'required_by_policy': False,
'enforce_policy': True},
'networks': {'allow_post': False, 'allow_put': False,
'validate': {'type:uuid_list': None},
'is_visible': True, 'default': [],
'required_by_policy': False,
'enforce_policy': True},
'advertise_floating_ip_host_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,
'enforce_policy': True},
'advertise_tenant_networks': {
'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,
'enforce_policy': True},
},
'bgp-peers': {
'id': {'allow_post': False, 'allow_put': False,
'validate': {'type:uuid': None},
'is_visible': True, 'primary_key': True},
'name': {'allow_post': True, 'allow_put': True,
'validate': {'type:string': db_const.NAME_FIELD_SIZE},
'is_visible': True, 'default': ''},
'peer_ip': {'allow_post': True, 'allow_put': False,
'required_by_policy': True,
'validate': {'type:ip_address': None},
'is_visible': True},
'remote_as': {'allow_post': True, 'allow_put': False,
'validate': {'type:range': (constants.MIN_ASNUM,
constants.MAX_ASNUM)},
'is_visible': True, 'default': None,
'required_by_policy': False,
'enforce_policy': False},
'auth_type': {'allow_post': True, 'allow_put': False,
'required_by_policy': True,
'validate': {'type:values':
constants.SUPPORTED_AUTH_TYPES},
'is_visible': True},
'password': {'allow_post': True, 'allow_put': True,
'required_by_policy': True,
'validate': {'type:string_or_none': None},
'is_visible': False,
'default': None},
'tenant_id': {'allow_post': True, 'allow_put': False,
'required_by_policy': False,
'validate': {
'type:string': db_const.PROJECT_ID_FIELD_SIZE},
'is_visible': True}
}
}
SUB_RESOURCE_ATTRIBUTE_MAP = None
ACTION_MAP = {
BGP_SPEAKER_RESOURCE_NAME: {
'add_bgp_peer': 'PUT',
'remove_bgp_peer': 'PUT',
'add_gateway_network': 'PUT',
'remove_gateway_network': 'PUT',
'get_advertised_routes': 'GET'
}
}
ACTION_STATUS = {}
REQUIRED_EXTENSIONS = []
OPTIONAL_EXTENSIONS = []

View File

@ -0,0 +1,47 @@
# 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 import constants
ALIAS = 'bgp_4byte_asn'
IS_SHIM_EXTENSION = False
IS_STANDARD_ATTR_EXTENSION = False
NAME = "BGP 4-byte AS numbers"
DESCRIPTION = "Support bgp 4-byte AS number"
UPDATED_TIMESTAMP = '2017-09-07T00:00:00-00:00'
RESOURCE_ATTRIBUTE_MAP = {
'bgp-speakers': {
'local_as': {'allow_post': True, 'allow_put': False,
'validate': {'type:range': (constants.MIN_ASNUM,
constants.MAX_4BYTE_ASNUM)},
'is_visible': True, 'default': None,
'required_by_policy': False,
'enforce_policy': False}
},
'bgp-peers': {
'remote_as': {'allow_post': True, 'allow_put': False,
'validate': {'type:range': (constants.MIN_ASNUM,
constants.MAX_4BYTE_ASNUM)},
'is_visible': True, 'default': None,
'required_by_policy': False,
'enforce_policy': False}
}
}
SUB_RESOURCE_ATTRIBUTE_MAP = None
ACTION_MAP = {}
ACTION_STATUS = {}
REQUIRED_EXTENSIONS = [bgp.ALIAS]
OPTIONAL_EXTENSIONS = []

View File

@ -0,0 +1,32 @@
# Copyright 2016 Huawei Technologies India Pvt. Ltd.
# 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.
ALIAS = 'bgp_dragent_scheduler'
IS_SHIM_EXTENSION = True
IS_STANDARD_ATTR_EXTENSION = False
NAME = "BGP Dynamic Routing Agent Scheduler"
DESCRIPTION = "Schedules BgpSpeakers on BgpDrAgent"
UPDATED_TIMESTAMP = '2015-07-30T10:00:00-00:00'
BGP_DRINSTANCE = 'bgp-drinstance'
BGP_DRINSTANCES = BGP_DRINSTANCE + 's'
BGP_DRAGENT = 'bgp-dragent'
BGP_DRAGENTS = BGP_DRAGENT + 's'
RESOURCE_ATTRIBUTE_MAP = {}
SUB_RESOURCE_ATTRIBUTE_MAP = None
ACTION_MAP = {}
ACTION_STATUS = {}
REQUIRED_EXTENSIONS = []
OPTIONAL_EXTENSIONS = []

View File

@ -874,3 +874,10 @@ OVSDB_RESOURCE = 'ovsdb'
# Used in ovs port 'external_ids' in order mark it for no cleanup when
# ovs_cleanup script is used.
SKIP_CLEANUP = 'skip_cleanup'
# neutron-dynamic-routing constants
MIN_ASNUM = 1
MAX_ASNUM = 65535
MAX_4BYTE_ASNUM = 4294967295
SUPPORTED_AUTH_TYPES = ['none', 'md5']

View File

@ -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.tests.unit.api.definitions import base
class BgpDefinitionTestCase(base.DefinitionBaseTestCase):
extension_module = bgp
extension_resources = ('bgp-speakers', 'bgp-peers')
extension_attributes = ('local_as', 'peers', 'networks',
'advertise_floating_ip_host_routes',
'advertise_tenant_networks', 'peer_ip',
'remote_as', 'auth_type', 'password',)

View File

@ -0,0 +1,21 @@
# 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_4byte_asn
from neutron_lib.tests.unit.api.definitions import base
class Bgp4ByteAsnDefinitionTestCase(base.DefinitionBaseTestCase):
extension_module = bgp_4byte_asn
extension_resources = ('bgp-speakers', 'bgp-peers')
extension_attributes = ('local_as', 'remote_as', )

View File

@ -0,0 +1,19 @@
# 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_dragentscheduler
from neutron_lib.tests.unit.api.definitions import base
class BgpDragentSchedulerDefinitionTestCase(base.DefinitionBaseTestCase):
extension_module = bgp_dragentscheduler

View File

@ -0,0 +1,5 @@
---
features:
- The API definitions of ``neutron-dynamic-routing``, ``bgp``,
``bgp_4byte_asn`` and ``bgp_dragent_scheduler``, are now available
in ``neutron_lib.api.definitions``.