diff --git a/neutron_lib/api/definitions/__init__.py b/neutron_lib/api/definitions/__init__.py index 144dab4aa..7d4f8f6de 100644 --- a/neutron_lib/api/definitions/__init__.py +++ b/neutron_lib/api/definitions/__init__.py @@ -66,6 +66,7 @@ from neutron_lib.api.definitions import port_mac_address_regenerate from neutron_lib.api.definitions import port_security from neutron_lib.api.definitions import portbindings from neutron_lib.api.definitions import portbindings_extended +from neutron_lib.api.definitions import project_default_networks from neutron_lib.api.definitions import project_id from neutron_lib.api.definitions import provider_net from neutron_lib.api.definitions import qos @@ -155,6 +156,7 @@ _ALL_API_DEFINITIONS = { port_security, portbindings, portbindings_extended, + project_default_networks, project_id, provider_net, qos, diff --git a/neutron_lib/api/definitions/base.py b/neutron_lib/api/definitions/base.py index edddd7c46..fa7a04907 100644 --- a/neutron_lib/api/definitions/base.py +++ b/neutron_lib/api/definitions/base.py @@ -81,6 +81,7 @@ KNOWN_EXTENSIONS = ( 'availability_zone', 'binding', 'data-plane-status', + 'project-default-networks', 'default-subnetpools', 'dhcp_agent_scheduler', 'dns-domain-ports', diff --git a/neutron_lib/api/definitions/project_default_networks.py b/neutron_lib/api/definitions/project_default_networks.py new file mode 100644 index 000000000..75888bd97 --- /dev/null +++ b/neutron_lib/api/definitions/project_default_networks.py @@ -0,0 +1,79 @@ +# 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 network + + +PROJECT_DEFAULT = 'project_default' + +# The alias of the extension. +ALIAS = 'project-default-networks' + +# 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 = 'Default network for project' + +# The description of the extension. +DESCRIPTION = "Support specifying networks as default networks for projects" + +# A timestamp of when the extension was introduced. +UPDATED_TIMESTAMP = "2018-07-03T10:00:00-00:00" + +# The name of the resource introduced or being extended. +RESOURCE_NAME = network.RESOURCE_NAME + +# The plural for the resource introduced or being extended. +COLLECTION_NAME = network.COLLECTION_NAME + +# The resource attribute map for the extension. +RESOURCE_ATTRIBUTE_MAP = { + COLLECTION_NAME: { + PROJECT_DEFAULT: { + 'allow_post': True, 'allow_put': True, + 'default': False, + 'convert_to': converters.convert_to_boolean, + 'is_visible': True + } + } +} + +# The subresource attribute map for the extension. +SUB_RESOURCE_ATTRIBUTE_MAP = { +} + +# The action map. +ACTION_MAP = { +} + +# The action status. +ACTION_STATUS = { +} + +# The list of required extensions. +REQUIRED_EXTENSIONS = [ +] + +# The list of optional extensions. +OPTIONAL_EXTENSIONS = [ +] diff --git a/neutron_lib/tests/unit/api/definitions/test_project_default_networks.py b/neutron_lib/tests/unit/api/definitions/test_project_default_networks.py new file mode 100644 index 000000000..de3ac62a7 --- /dev/null +++ b/neutron_lib/tests/unit/api/definitions/test_project_default_networks.py @@ -0,0 +1,21 @@ +# Copyright (c) 2017 NEC Corporation. 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 project_default_networks as dn +from neutron_lib.tests.unit.api.definitions import base + + +class DefaultNetworksDefinitionTestCase(base.DefinitionBaseTestCase): + extension_module = dn + extension_attributes = (dn.PROJECT_DEFAULT,) diff --git a/releasenotes/notes/add-is-default-to-network-d16a2e6bcfae943a.yaml b/releasenotes/notes/add-is-default-to-network-d16a2e6bcfae943a.yaml new file mode 100644 index 000000000..2456a118f --- /dev/null +++ b/releasenotes/notes/add-is-default-to-network-d16a2e6bcfae943a.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + The ``project-default-networks`` extension is now available and adds a new + attribute ``project_default`` into the ``network`` resource. + This attribute will be used to indicate if a network is a project + default network.