From 6c7b3d2a5fa70af631f26bd683bf677737f6be8e Mon Sep 17 00:00:00 2001 From: Boden R Date: Thu, 13 Jul 2017 12:28:32 -0600 Subject: [PATCH] rehome neutron's address-scope extension API definition This patch rehomes neutron's address_scope extension's API definition into neutron-lib. Change-Id: I647f32a0755c2aa61aa74c648396218f9d705396 --- neutron_lib/api/definitions/__init__.py | 2 + neutron_lib/api/definitions/address_scope.py | 85 +++++++++++++++++++ neutron_lib/exceptions/address_scope.py | 31 +++++++ .../api/definitions/test_address_scope.py | 24 ++++++ ...address-scope-apidef-f4e8bb74be61729a.yaml | 4 + 5 files changed, 146 insertions(+) create mode 100644 neutron_lib/api/definitions/address_scope.py create mode 100644 neutron_lib/exceptions/address_scope.py create mode 100644 neutron_lib/tests/unit/api/definitions/test_address_scope.py create mode 100644 releasenotes/notes/rehome-address-scope-apidef-f4e8bb74be61729a.yaml diff --git a/neutron_lib/api/definitions/__init__.py b/neutron_lib/api/definitions/__init__.py index 25802cf8c..ac708fb57 100644 --- a/neutron_lib/api/definitions/__init__.py +++ b/neutron_lib/api/definitions/__init__.py @@ -10,6 +10,7 @@ # License for the specific language governing permissions and limitations # under the License. +from neutron_lib.api.definitions import address_scope from neutron_lib.api.definitions import agent from neutron_lib.api.definitions import bgpvpn from neutron_lib.api.definitions import bgpvpn_routes_control @@ -38,6 +39,7 @@ from neutron_lib.api.definitions import trunk_details _ALL_API_DEFINITIONS = { + address_scope, agent, bgpvpn, bgpvpn_routes_control, diff --git a/neutron_lib/api/definitions/address_scope.py b/neutron_lib/api/definitions/address_scope.py new file mode 100644 index 000000000..6246a4ff8 --- /dev/null +++ b/neutron_lib/api/definitions/address_scope.py @@ -0,0 +1,85 @@ +# Copyright (c) 2015 Huawei Technologies Co.,LTD. +# +# 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 import constants +from neutron_lib.db import constants as db_constants + + +ADDRESS_SCOPE = 'address_scope' +ADDRESS_SCOPE_ID = 'address_scope_id' +IPV4_ADDRESS_SCOPE = 'ipv4_%s' % ADDRESS_SCOPE +IPV6_ADDRESS_SCOPE = 'ipv6_%s' % ADDRESS_SCOPE + +ALIAS = 'address-scope' +LABEL = ALIAS +IS_SHIM_EXTENSION = False +IS_STANDARD_ATTR_EXTENSION = False +NAME = 'Address scope' +API_PREFIX = '' +DESCRIPTION = 'Address scopes extension.' +UPDATED_TIMESTAMP = '2015-07-26T10:00:00-00:00' +RESOURCE_NAME = ADDRESS_SCOPE +COLLECTION_NAME = RESOURCE_NAME + 's' +RESOURCE_ATTRIBUTE_MAP = { + COLLECTION_NAME: { + 'id': {'allow_post': False, + 'allow_put': False, + 'validate': {'type:uuid': None}, + 'is_visible': True, + 'primary_key': True}, + 'name': {'allow_post': True, + 'allow_put': True, + 'default': '', + 'validate': {'type:string': db_constants.NAME_FIELD_SIZE}, + 'is_visible': True}, + 'tenant_id': {'allow_post': True, + 'allow_put': False, + 'validate': { + 'type:string': db_constants.PROJECT_ID_FIELD_SIZE}, + 'required_by_policy': True, + 'is_visible': True}, + 'shared': {'allow_post': True, + 'allow_put': True, + 'default': False, + 'convert_to': converters.convert_to_boolean, + 'is_visible': True, + 'required_by_policy': True, + 'enforce_policy': True}, + 'ip_version': {'allow_post': True, 'allow_put': False, + 'convert_to': converters.convert_to_int, + 'validate': {'type:values': [4, 6]}, + 'is_visible': True}, + }, + 'subnetpools': { + ADDRESS_SCOPE_ID: {'allow_post': True, + 'allow_put': True, + 'default': constants.ATTR_NOT_SPECIFIED, + 'validate': {'type:uuid_or_none': None}, + 'is_visible': True} + }, + 'networks': { + IPV4_ADDRESS_SCOPE: {'allow_post': False, + 'allow_put': False, + 'is_visible': True}, + IPV6_ADDRESS_SCOPE: {'allow_post': False, + 'allow_put': False, + 'is_visible': True}, + } +} +SUB_RESOURCE_ATTRIBUTE_MAP = {} +ACTION_MAP = {} +REQUIRED_EXTENSIONS = [] +OPTIONAL_EXTENSIONS = [] +ACTION_STATUS = {} diff --git a/neutron_lib/exceptions/address_scope.py b/neutron_lib/exceptions/address_scope.py new file mode 100644 index 000000000..ecc2a621e --- /dev/null +++ b/neutron_lib/exceptions/address_scope.py @@ -0,0 +1,31 @@ +# 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._i18n import _ +from neutron_lib import exceptions + + +class AddressScopeNotFound(exceptions.NotFound): + message = _("Address scope %(address_scope_id)s could not be found.") + + +class AddressScopeInUse(exceptions.InUse): + message = _("Unable to complete operation on " + "address scope %(address_scope_id)s. There are one or more " + "subnet pools in use on the address scope.") + + +class AddressScopeUpdateError(exceptions.BadRequest): + message = _("Unable to update address scope %(address_scope_id)s : " + "%(reason)s.") diff --git a/neutron_lib/tests/unit/api/definitions/test_address_scope.py b/neutron_lib/tests/unit/api/definitions/test_address_scope.py new file mode 100644 index 000000000..c3ac15713 --- /dev/null +++ b/neutron_lib/tests/unit/api/definitions/test_address_scope.py @@ -0,0 +1,24 @@ +# 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 address_scope +from neutron_lib.tests.unit.api.definitions import base + + +class AddressScopeDefinitionTestCase(base.DefinitionBaseTestCase): + extension_module = address_scope + extension_resources = (address_scope.COLLECTION_NAME,) + extension_attributes = ('ipv6_address_scope', + 'ipv4_address_scope', + 'address_scope_id',) diff --git a/releasenotes/notes/rehome-address-scope-apidef-f4e8bb74be61729a.yaml b/releasenotes/notes/rehome-address-scope-apidef-f4e8bb74be61729a.yaml new file mode 100644 index 000000000..2c13052b7 --- /dev/null +++ b/releasenotes/notes/rehome-address-scope-apidef-f4e8bb74be61729a.yaml @@ -0,0 +1,4 @@ +--- +features: + - The neutron ``address-scope`` extension's API definition is now available as + ``neutron_lib.api.definitions.address_scope``.