From 111c8e49343bb44065d3ded7d59b266a28d6b463 Mon Sep 17 00:00:00 2001 From: ythomas1 Date: Thu, 28 Nov 2019 17:53:51 +0100 Subject: [PATCH] 'interconnection' API extension definition Adds definition for 'interconnection' API extension. This patch partially implements the following spec: https://specs.openstack.org/openstack/neutron-specs/specs/rocky/neutron-inter.html Signed-off-by: Thomas Morin Submitted on behalf of a third-party: Orange Change-Id: Idc0b8cd1b18ff4d92450c975d62126131b77cd18 --- neutron_interconnection/api/__init__.py | 0 .../api/definitions/__init__.py | 0 .../api/definitions/interconnection.py | 126 ++++++++++++++++++ .../tests/unit/__init__.py | 0 .../tests/unit/api/__init__.py | 0 .../tests/unit/api/definitions/__init__.py | 0 .../api/definitions/test_interconnection.py | 31 +++++ 7 files changed, 157 insertions(+) create mode 100644 neutron_interconnection/api/__init__.py create mode 100644 neutron_interconnection/api/definitions/__init__.py create mode 100644 neutron_interconnection/api/definitions/interconnection.py create mode 100644 neutron_interconnection/tests/unit/__init__.py create mode 100644 neutron_interconnection/tests/unit/api/__init__.py create mode 100644 neutron_interconnection/tests/unit/api/definitions/__init__.py create mode 100644 neutron_interconnection/tests/unit/api/definitions/test_interconnection.py diff --git a/neutron_interconnection/api/__init__.py b/neutron_interconnection/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/neutron_interconnection/api/definitions/__init__.py b/neutron_interconnection/api/definitions/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/neutron_interconnection/api/definitions/interconnection.py b/neutron_interconnection/api/definitions/interconnection.py new file mode 100644 index 0000000..d6b9799 --- /dev/null +++ b/neutron_interconnection/api/definitions/interconnection.py @@ -0,0 +1,126 @@ +# Copyright (c) 2019 Orange. +# 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 l3 +from neutron_lib.db import constants as db_const + +# The alias of the extension. +ALIAS = 'interconnection' + +# Whether or not this extension is simply signaling behavior to the user +# or it actively modifies the attribute map. +IS_SHIM_EXTENSION = False + +# Whether the extension is marking the adoption of standardattr model for +# legacy resources, or introducing new standardattr attributes. False or +# None if the standardattr model is adopted since the introduction of +# resource extension. +# If this is True, the alias for the extension should be prefixed with +# 'standard-attr-'. +IS_STANDARD_ATTR_EXTENSION = False + +# The name of the extension. +NAME = 'Neutron-Neutron Interconnection' + +# The description of the extension. +DESCRIPTION = "Provides support for Neutron-Neutron Interconnections" + +# A timestamp of when the extension was introduced. +UPDATED_TIMESTAMP = "2019-01-14T16:30:00-00:00" + +API_PREFIX = 'interconnection' + +# The specific resources and/or attributes for the extension (optional). +RESOURCE_NAME = 'interconnection' +COLLECTION_NAME = 'interconnections' + +NETWORK_L2 = 'network_l2' +NETWORK_L3 = 'network_l3' +VALID_TYPES = [l3.ROUTER, NETWORK_L2, NETWORK_L3] + +# The resource attribute map for the extension. +RESOURCE_ATTRIBUTE_MAP = { + COLLECTION_NAME: { + 'id': {'allow_post': False, 'allow_put': False, + 'validate': {'type:uuid': None}, + 'is_filter': True, 'is_sort_key': True, + '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_filter': True, 'is_sort_key': True, + 'is_visible': True}, + 'name': {'allow_post': True, 'allow_put': True, + 'default': '', + 'validate': {'type:string': db_const.NAME_FIELD_SIZE}, + 'is_filter': True, 'is_sort_key': True, + 'is_visible': True}, + 'type': {'allow_post': True, 'allow_put': False, + 'validate': {'type:values': VALID_TYPES}, + 'is_filter': True, 'is_sort_key': True, + 'is_visible': True}, + 'state': {'allow_post': False, 'allow_put': False, + 'is_filter': True, 'is_sort_key': True, + 'is_visible': True}, + 'local_resource_id': {'allow_post': True, 'allow_put': False, + 'validate': {'type:uuid': None}, + 'is_visible': True}, + 'remote_resource_id': {'allow_post': True, 'allow_put': False, + 'validate': {'type:uuid': None}, + 'is_visible': True}, + 'remote_keystone': {'allow_post': True, 'allow_put': False, + 'validate': {'type:string_or_none': None}, + 'is_visible': True}, + 'remote_region': {'allow_post': True, 'allow_put': False, + 'validate': {'type:string_or_none': None}, + 'is_visible': True}, + 'remote_interconnection_id': {'allow_post': False, 'allow_put': False, + 'validate': {'type:uuid_or_none': None}, + 'is_visible': True}, + 'local_parameters': {'allow_post': False, 'allow_put': False, + 'is_visible': True}, + 'remote_parameters': {'allow_post': False, 'allow_put': False, + 'is_visible': True} + }, +} + +# The subresource attribute map for the extension. It adds child resources +# to main extension's resource. The subresource map must have a parent and +# a parameters entry. If an extension does not need such a map, None can +# be specified (mandatory). +SUB_RESOURCE_ATTRIBUTE_MAP = None + +# The action map: it associates verbs with methods to be performed on +# the API resource. +ACTION_MAP = { + RESOURCE_NAME: { + 'refresh': 'PUT' + } +} + +# The action status. +ACTION_STATUS = { +} + +# The list of required extensions. +REQUIRED_EXTENSIONS = [ + l3.ALIAS +] + +# The list of optional extensions. +OPTIONAL_EXTENSIONS = [ +] diff --git a/neutron_interconnection/tests/unit/__init__.py b/neutron_interconnection/tests/unit/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/neutron_interconnection/tests/unit/api/__init__.py b/neutron_interconnection/tests/unit/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/neutron_interconnection/tests/unit/api/definitions/__init__.py b/neutron_interconnection/tests/unit/api/definitions/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/neutron_interconnection/tests/unit/api/definitions/test_interconnection.py b/neutron_interconnection/tests/unit/api/definitions/test_interconnection.py new file mode 100644 index 0000000..d8a58dc --- /dev/null +++ b/neutron_interconnection/tests/unit/api/definitions/test_interconnection.py @@ -0,0 +1,31 @@ +# Copyright (c) 2019 Orange. +# 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.tests.unit.api.definitions import base + +from neutron_interconnection.api.definitions import interconnection + + +class InterconnectionDefinitionTestCase(base.DefinitionBaseTestCase): + extension_module = interconnection + extension_resources = (interconnection.COLLECTION_NAME,) + extension_attributes = ('type', 'state', + 'local_resource_id', 'remote_resource_id', + 'remote_keystone', 'remote_region', + 'remote_interconnection_id', 'local_parameters', + 'remote_parameters') + + def test_all_api_definitions_list(self): + self.skipTest('Not relevant outside neutron-lib API definitions.')