New api-def: allowedaddresspairs-atomic

Partial-Bug: #2012332
Change-Id: Ibc713217ffb67ce35e03ae7f341a302a9edef4d1
This commit is contained in:
liushy 2023-04-17 16:55:07 +08:00
parent a7b950cf8b
commit 8728076402
10 changed files with 346 additions and 0 deletions

View File

@ -25,6 +25,14 @@ is optional and will be taken from the port if not specified.
with source IP address restrictions for all ports which use the same security
group.
Allowed address pairs (atomic) extension
========================================
The Allowed address pairs (atomic) extension (``allowedaddresspairs-atomic``)
extends the ``port`` resource by adding two member actions
(``add_allowed_address_pairs``/ ``remove_allowed_address_pairs``) to edit the set
of Allowed address pairs atomically on the server side.
Data plane status extension
===========================
@ -772,3 +780,157 @@ Response Example
.. literalinclude:: samples/ports/ports-bulk-create-response.json
:language: javascript
Add allowed_address_pairs to port
=================================
.. rest_method:: PUT /v2.0/ports/{port_id}/add_allowed_address_pairs
Atomically adds a set of allowed_address_pairs to the port's already
existing allowed_address_pairs.
Normal response codes: 200
Error response codes: 400, 401, 404, 412
Request
-------
.. rest_parameters:: parameters.yaml
- port_id: port_id-path
- port: port
- allowed_address_pairs: allowed_address_pairs-request
Request Example
---------------
.. literalinclude:: samples/ports/port-add-allowed-address-pairs-request.json
:language: javascript
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- port: port
- admin_state_up: admin_state_up
- allowed_address_pairs: allowed_address_pairs
- binding:host_id: binding:host_id
- binding:profile: binding:profile
- binding:vif_details: binding:vif_details
- binding:vif_type: binding:vif_type
- binding:vnic_type: binding:vnic_type
- created_at: created_at_resource
- data_plane_status: data_plane_status
- description: description
- device_id: device_id
- device_owner: device_owner
- dns_assignment: dns_assignment
- dns_domain: dns_domain
- dns_name: dns_name
- extra_dhcp_opts: extra_dhcp_opts
- fixed_ips: fixed_ips
- hints: hints
- id: id
- ip_allocation: ip_allocation
- mac_address: mac_address
- name: name
- network_id: network_id
- numa_affinity_policy: numa_affinity_policy
- port_security_enabled: port_security_enabled
- project_id: project_id
- qos_network_policy_id: qos_network_policy_id-port-response
- qos_policy_id: qos_policy_id-port-response
- revision_number: revision_number
- resource_request: port-resource
- security_groups: port-security_groups
- status: port-status
- tags: tags
- tenant_id: project_id
- updated_at: updated_at_resource
- propagate_uplink_status: propagate_uplink_status
- mac_learning_enabled: mac_learning_enabled
Response Example
----------------
.. literalinclude:: samples/ports/port-add-allowed-address-pairs-response.json
:language: javascript
Remove allowed_address_pairs from port
======================================
.. rest_method:: PUT /v2.0/ports/{port_id}/remove_allowed_address_pairs
Atomically removes a set of allowed_address_pairs from the port's already
existing allowed_address_pairs.
Normal response codes: 200
Error response codes: 400, 401, 404, 412
Request
-------
.. rest_parameters:: parameters.yaml
- port_id: port_id-path
- port: port
- allowed_address_pairs: allowed_address_pairs-request
Request Example
---------------
.. literalinclude:: samples/ports/port-remove-allowed-address-pairs-request.json
:language: javascript
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- port: port
- admin_state_up: admin_state_up
- allowed_address_pairs: allowed_address_pairs
- binding:host_id: binding:host_id
- binding:profile: binding:profile
- binding:vif_details: binding:vif_details
- binding:vif_type: binding:vif_type
- binding:vnic_type: binding:vnic_type
- created_at: created_at_resource
- data_plane_status: data_plane_status
- description: description
- device_id: device_id
- device_owner: device_owner
- dns_assignment: dns_assignment
- dns_domain: dns_domain
- dns_name: dns_name
- extra_dhcp_opts: extra_dhcp_opts
- fixed_ips: fixed_ips
- hints: hints
- id: id
- ip_allocation: ip_allocation
- mac_address: mac_address
- name: name
- network_id: network_id
- numa_affinity_policy: numa_affinity_policy
- port_security_enabled: port_security_enabled
- project_id: project_id
- qos_network_policy_id: qos_network_policy_id-port-response
- qos_policy_id: qos_policy_id-port-response
- revision_number: revision_number
- resource_request: port-resource
- security_groups: port-security_groups
- status: port-status
- tags: tags
- tenant_id: project_id
- updated_at: updated_at_resource
- propagate_uplink_status: propagate_uplink_status
- mac_learning_enabled: mac_learning_enabled
Response Example
----------------
.. literalinclude:: samples/ports/port-remove-allowed-address-pairs-response.json
:language: javascript

View File

@ -0,0 +1,10 @@
{
"port" : {
"allowed_address_pairs": [
{
"ip_address": "192.168.13.7",
"mac_address": "fa:16:3e:09:1f:b2"
}
]
}
}

View File

@ -0,0 +1,51 @@
{
"port": {
"admin_state_up": true,
"allowed_address_pairs": [
{
"ip_address": "192.168.13.7",
"mac_address": "fa:16:3e:09:1f:b2"
}
],
"binding:host_id": "",
"binding:profile": {},
"binding:vif_details": {},
"binding:vif_type": "unbound",
"binding:vnic_type": "normal",
"created_at": "2023-04-20T02:32:41",
"data_plane_status": null,
"description": "",
"device_id": "",
"device_owner": "",
"dns_assignment": [],
"dns_domain": "",
"dns_name": "",
"extra_dhcp_opts": [],
"fixed_ips": [
{
"ip_address": "192.168.13.6",
"subnet_id": "a4c3b506-2110-4929-a70a-bda534bc0b07"
}
],
"id": "dc67ee67-7acd-464d-98fd-4abef6d8759d",
"ip_allocation": "immediate",
"mac_address": "fa:16:3e:09:1f:b2",
"mac_learning_enabled": false,
"name": "test-port",
"network_id": "99b8e526-e943-4463-aa28-a22395bed154",
"port_security_enabled": true,
"project_id": "294b394e8f454cc8b26bbe342bc210d3",
"revision_number": 1,
"security_groups": [
"751d740a-b52b-46d9-bca8-a21e75c8a727"
],
"status": "DOWN",
"tags": [],
"tenant_id": "294b394e8f454cc8b26bbe342bc210d3",
"updated_at": "2023-04-20T02:32:41",
"qos_network_policy_id": null,
"qos_policy_id": null,
"resource_request": null,
"propagate_uplink_status": false
}
}

View File

@ -0,0 +1,10 @@
{
"port" : {
"allowed_address_pairs": [
{
"ip_address": "192.168.13.7",
"mac_address": "fa:16:3e:09:1f:b2"
}
]
}
}

View File

@ -0,0 +1,46 @@
{
"port": {
"admin_state_up": true,
"allowed_address_pairs": [],
"binding:host_id": "",
"binding:profile": {},
"binding:vif_details": {},
"binding:vif_type": "unbound",
"binding:vnic_type": "normal",
"created_at": "2023-04-20T02:32:41",
"data_plane_status": null,
"description": "",
"device_id": "",
"device_owner": "",
"dns_assignment": [],
"dns_domain": "",
"dns_name": "",
"extra_dhcp_opts": [],
"fixed_ips": [
{
"ip_address": "192.168.13.6",
"subnet_id": "a4c3b506-2110-4929-a70a-bda534bc0b07"
}
],
"id": "dc67ee67-7acd-464d-98fd-4abef6d8759d",
"ip_allocation": "immediate",
"mac_address": "fa:16:3e:09:1f:b2",
"mac_learning_enabled": false,
"name": "test-port",
"network_id": "99b8e526-e943-4463-aa28-a22395bed154",
"port_security_enabled": true,
"project_id": "294b394e8f454cc8b26bbe342bc210d3",
"revision_number": 1,
"security_groups": [
"751d740a-b52b-46d9-bca8-a21e75c8a727"
],
"status": "DOWN",
"tags": [],
"tenant_id": "294b394e8f454cc8b26bbe342bc210d3",
"updated_at": "2023-04-20T02:32:41",
"qos_network_policy_id": null,
"qos_policy_id": null,
"resource_request": null,
"propagate_uplink_status": false
}
}

View File

@ -16,6 +16,7 @@ from neutron_lib.api.definitions import agent
from neutron_lib.api.definitions import agent_resources_synced
from neutron_lib.api.definitions import agent_sort_key
from neutron_lib.api.definitions import allowedaddresspairs
from neutron_lib.api.definitions import allowedaddresspairs_atomic
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
@ -161,6 +162,7 @@ _ALL_API_DEFINITIONS = {
agent_resources_synced,
agent_sort_key,
allowedaddresspairs,
allowedaddresspairs_atomic,
auto_allocated_topology,
availability_zone,
availability_zone_filter,

View File

@ -0,0 +1,38 @@
# Copyright 2023 EasyStack Limited. 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.definitions import allowedaddresspairs
from neutron_lib.api.definitions import port
ALIAS = 'allowed-address-pairs-atomic'
IS_SHIM_EXTENSION = False
IS_STANDARD_ATTR_EXTENSION = False
NAME = 'Atomically add/remove allowed address pairs'
DESCRIPTION = ('Edit allowed address pairs of a port on server side by '
'atomically adding/removing allowed address pairs')
UPDATED_TIMESTAMP = '2023-04-17T00:00:00+00:00'
RESOURCE_ATTRIBUTE_MAP = {
port.COLLECTION_NAME: {}
}
SUB_RESOURCE_ATTRIBUTE_MAP = None
ACTION_MAP = {
port.RESOURCE_NAME: {
'add_allowed_address_pairs': 'PUT',
'remove_allowed_address_pairs': 'PUT',
}
}
REQUIRED_EXTENSIONS = [allowedaddresspairs.ALIAS]
OPTIONAL_EXTENSIONS = []
ACTION_STATUS = {}

View File

@ -82,6 +82,7 @@ KNOWN_EXTENSIONS = (
'agent',
'agent-resources-synced',
'allowed-address-pairs',
'allowed-address-pairs-atomic',
'auto-allocated-topology',
'availability_zone',
'binding',

View File

@ -0,0 +1,20 @@
# Copyright 2023 EasyStack Limited. 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.definitions import allowedaddresspairs_atomic
from neutron_lib.tests.unit.api.definitions import base
class AllowedAddressPairsDefinitionTestCase(base.DefinitionBaseTestCase):
extension_module = allowedaddresspairs_atomic

View File

@ -0,0 +1,6 @@
---
features:
- |
New API definition: ``allowedaddresspairs-atomic``. It adds
``add_allowed_address_pairs`` and ``remove_allowed_address_pairs``
API endpoints.