diff --git a/neutron_lib/api/definitions/__init__.py b/neutron_lib/api/definitions/__init__.py index f919d4f29..fc14383c6 100644 --- a/neutron_lib/api/definitions/__init__.py +++ b/neutron_lib/api/definitions/__init__.py @@ -60,6 +60,7 @@ from neutron_lib.api.definitions import qos_rule_type_details from neutron_lib.api.definitions import router_availability_zone from neutron_lib.api.definitions import router_interface_fip from neutron_lib.api.definitions import routerservicetype +from neutron_lib.api.definitions import segment from neutron_lib.api.definitions import servicetype from neutron_lib.api.definitions import sorting from neutron_lib.api.definitions import subnet @@ -121,6 +122,7 @@ _ALL_API_DEFINITIONS = { router_availability_zone, router_interface_fip, routerservicetype, + segment, servicetype, sorting, subnet, diff --git a/neutron_lib/api/definitions/segment.py b/neutron_lib/api/definitions/segment.py new file mode 100644 index 000000000..71d6cd703 --- /dev/null +++ b/neutron_lib/api/definitions/segment.py @@ -0,0 +1,123 @@ +# Copyright (c) 2016 Hewlett Packard Enterprise Development Company, L.P. +# +# 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 provider_net +from neutron_lib.api.definitions import subnet +from neutron_lib import constants +from neutron_lib.db import constants as db_constants + + +SEGMENT_ID = 'segment_id' +NETWORK_TYPE = 'network_type' +PHYSICAL_NETWORK = 'physical_network' +SEGMENTATION_ID = 'segmentation_id' +NAME_LEN = db_constants.NAME_FIELD_SIZE +DESC_LEN = db_constants.DESCRIPTION_FIELD_SIZE + +ALIAS = 'segment' +IS_SHIM_EXTENSION = False +IS_STANDARD_ATTR_EXTENSION = False +NAME = 'Segment' +API_PREFIX = '' +DESCRIPTION = 'Segments extension.' +UPDATED_TIMESTAMP = '2016-02-24T17:00:00-00:00' +RESOURCE_NAME = 'segment' +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 + }, + 'tenant_id': { + 'allow_post': True, + 'allow_put': False, + 'validate': { + 'type:string': db_constants.PROJECT_ID_FIELD_SIZE + }, + 'is_visible': False}, + 'network_id': { + 'allow_post': True, + 'allow_put': False, + 'validate': { + 'type:uuid': None + }, + 'is_visible': True + }, + PHYSICAL_NETWORK: { + 'allow_post': True, + 'allow_put': False, + 'default': constants.ATTR_NOT_SPECIFIED, + 'validate': { + 'type:string': provider_net.PHYSICAL_NETWORK_MAX_LEN + }, + 'is_visible': True + }, + NETWORK_TYPE: { + 'allow_post': True, + 'allow_put': False, + 'validate': { + 'type:string': provider_net.NETWORK_TYPE_MAX_LEN + }, + 'is_visible': True + }, + SEGMENTATION_ID: { + 'allow_post': True, + 'allow_put': False, + 'default': constants.ATTR_NOT_SPECIFIED, + 'convert_to': converters.convert_to_int, + 'is_visible': True + }, + 'name': { + 'allow_post': True, + 'allow_put': True, + 'default': constants.ATTR_NOT_SPECIFIED, + 'validate': { + 'type:string_or_none': NAME_LEN + }, + 'is_visible': True + }, + 'description': { + 'allow_post': True, + 'allow_put': True, + 'default': constants.ATTR_NOT_SPECIFIED, + 'validate': { + 'type:string_or_none': DESC_LEN + }, + 'is_visible': True + } + }, + subnet.COLLECTION_NAME: { + SEGMENT_ID: { + 'allow_post': True, + 'allow_put': False, + 'default': None, + 'validate': { + 'type:uuid_or_none': None + }, + 'is_visible': True + } + } +} +SUB_RESOURCE_ATTRIBUTE_MAP = {} +ACTION_MAP = {} +REQUIRED_EXTENSIONS = [] +OPTIONAL_EXTENSIONS = [] +ACTION_STATUS = {} diff --git a/neutron_lib/tests/unit/api/definitions/test_segment.py b/neutron_lib/tests/unit/api/definitions/test_segment.py new file mode 100644 index 000000000..eb374a0ca --- /dev/null +++ b/neutron_lib/tests/unit/api/definitions/test_segment.py @@ -0,0 +1,22 @@ +# 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 segment +from neutron_lib.tests.unit.api.definitions import base + + +class SegmentDefinitionTestCase(base.DefinitionBaseTestCase): + extension_module = segment + extension_resources = (segment.COLLECTION_NAME,) + extension_attributes = ('network_id', segment.PHYSICAL_NETWORK, + segment.NETWORK_TYPE, segment.SEGMENTATION_ID, + segment.SEGMENT_ID,) diff --git a/releasenotes/notes/rehome-segment-apidef-a5f81adb834328f8.yaml b/releasenotes/notes/rehome-segment-apidef-a5f81adb834328f8.yaml new file mode 100644 index 000000000..592a9f145 --- /dev/null +++ b/releasenotes/notes/rehome-segment-apidef-a5f81adb834328f8.yaml @@ -0,0 +1,4 @@ +--- +features: + - The ``segment`` extension's API definition is now available in + ``neutron_lib.api.definitions.segment``.