From 7124d76e77e9a07c4e838c7dfd7ec9242ca19d0c Mon Sep 17 00:00:00 2001 From: LIU Yulong Date: Wed, 9 May 2018 18:31:23 +0800 Subject: [PATCH] Adds qos-gateway-ip extension api definition This patch adds the qos-gateway-ip extension's API definition into neutron-lib. Related-Bug: #1757044 Change-Id: I815bc60f0d0fc25c2acd9900d838806f8b81adff --- neutron_lib/api/definitions/__init__.py | 2 + neutron_lib/api/definitions/base.py | 2 + neutron_lib/api/definitions/qos_gateway_ip.py | 61 +++++++++++++++++++ .../api/definitions/test_qos_gateway_ip.py | 21 +++++++ .../gateway-ip-qos-ext-d3ffb5f517c9f713.yaml | 5 ++ 5 files changed, 91 insertions(+) create mode 100644 neutron_lib/api/definitions/qos_gateway_ip.py create mode 100644 neutron_lib/tests/unit/api/definitions/test_qos_gateway_ip.py create mode 100644 releasenotes/notes/gateway-ip-qos-ext-d3ffb5f517c9f713.yaml diff --git a/neutron_lib/api/definitions/__init__.py b/neutron_lib/api/definitions/__init__.py index 144dab4aa..9c5ad3dab 100644 --- a/neutron_lib/api/definitions/__init__.py +++ b/neutron_lib/api/definitions/__init__.py @@ -72,6 +72,7 @@ from neutron_lib.api.definitions import qos from neutron_lib.api.definitions import qos_bw_limit_direction from neutron_lib.api.definitions import qos_bw_minimum_ingress from neutron_lib.api.definitions import qos_default +from neutron_lib.api.definitions import qos_gateway_ip from neutron_lib.api.definitions import qos_rule_type_details from neutron_lib.api.definitions import revisionifmatch from neutron_lib.api.definitions import router_availability_zone @@ -161,6 +162,7 @@ _ALL_API_DEFINITIONS = { qos_bw_limit_direction, qos_bw_minimum_ingress, qos_default, + qos_gateway_ip, qos_rule_type_details, revisionifmatch, router_availability_zone, diff --git a/neutron_lib/api/definitions/base.py b/neutron_lib/api/definitions/base.py index edddd7c46..54c5ddf25 100644 --- a/neutron_lib/api/definitions/base.py +++ b/neutron_lib/api/definitions/base.py @@ -41,6 +41,7 @@ KNOWN_ATTRIBUTES = ( 'prefixes', 'prefixlen', 'project_id', + 'qos_policy_id', constants.SHARED, 'status', 'subnets', @@ -111,6 +112,7 @@ KNOWN_EXTENSIONS = ( 'project-id', 'provider', 'qos', + 'qos-gateway-ip', 'quotas', 'rbac-policies', 'router', diff --git a/neutron_lib/api/definitions/qos_gateway_ip.py b/neutron_lib/api/definitions/qos_gateway_ip.py new file mode 100644 index 000000000..684f40217 --- /dev/null +++ b/neutron_lib/api/definitions/qos_gateway_ip.py @@ -0,0 +1,61 @@ +# +# 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 l3 +from neutron_lib.api.definitions import l3_ext_gw_mode +from neutron_lib.api.definitions import qos +from neutron_lib.services.qos import constants as qos_consts + + +ALIAS = 'qos-gateway-ip' +IS_SHIM_EXTENSION = False +IS_STANDARD_ATTR_EXTENSION = False +NAME = 'Router gateway IP QoS' +API_PREFIX = '' +DESCRIPTION = 'The Router gateway IP Quality of Service extension' +UPDATED_TIMESTAMP = '2018-02-24T00:00:00-00:00' +RESOURCE_NAME = l3.ROUTER +COLLECTION_NAME = l3.ROUTERS +RESOURCE_ATTRIBUTE_MAP = { + COLLECTION_NAME: { + l3.EXTERNAL_GW_INFO: { + 'allow_post': True, + 'allow_put': True, + 'is_visible': True, + 'default': None, + 'enforce_policy': True, + 'validate': { + 'type:dict_or_nodata': { + 'network_id': {'type:uuid': None, 'required': True}, + 'enable_snat': {'type:boolean': None, 'required': False, + 'convert_to': + converters.convert_to_boolean}, + 'external_fixed_ips': { + 'type:fixed_ips': None, + 'required': False + }, + qos_consts.QOS_POLICY_ID: { + 'type:uuid_or_none': None, + 'required': False + } + } + } + } + } +} +SUB_RESOURCE_ATTRIBUTE_MAP = {} +ACTION_MAP = {} +REQUIRED_EXTENSIONS = [l3.ALIAS, qos.ALIAS, l3_ext_gw_mode.ALIAS] +OPTIONAL_EXTENSIONS = [] +ACTION_STATUS = {} diff --git a/neutron_lib/tests/unit/api/definitions/test_qos_gateway_ip.py b/neutron_lib/tests/unit/api/definitions/test_qos_gateway_ip.py new file mode 100644 index 000000000..f0494d74b --- /dev/null +++ b/neutron_lib/tests/unit/api/definitions/test_qos_gateway_ip.py @@ -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 l3 +from neutron_lib.api.definitions import qos_gateway_ip +from neutron_lib.tests.unit.api.definitions import base + + +class QosGatewayIPDefinitionTestCase(base.DefinitionBaseTestCase): + extension_module = qos_gateway_ip + extension_attributes = (l3.EXTERNAL_GW_INFO,) diff --git a/releasenotes/notes/gateway-ip-qos-ext-d3ffb5f517c9f713.yaml b/releasenotes/notes/gateway-ip-qos-ext-d3ffb5f517c9f713.yaml new file mode 100644 index 000000000..25b4e5214 --- /dev/null +++ b/releasenotes/notes/gateway-ip-qos-ext-d3ffb5f517c9f713.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Add new extension `qos-gateway-ip` which extends the `router_gw_info` + with new attribute `qos_policy_id`.