From 730262822972e6e71b744c2e42aa1fd041be033f Mon Sep 17 00:00:00 2001 From: Boden R Date: Fri, 11 Aug 2017 13:06:03 -0600 Subject: [PATCH] rehome dvr extension api def This patch rehomes the neutron dvr extension API definition into neutron-lib. In addition the MacAddressGenerationFailure is defined twice in neutron; once for net failures and once for host failures. As both exceptions are used today [1], this patch proposes we name them slightly different to reflect their usage, but keep them in the generic exceptions module as it's foreseeable that MAC address failures can happen outside the context of the dvr extension. UTs and release note are also included. [1] http://codesearch.openstack.org/?q=MacAddressGenerationFailure Change-Id: I6d98e83287833882515240d7db1faa4a1deb7da1 --- neutron_lib/api/definitions/__init__.py | 2 + neutron_lib/api/definitions/dvr.py | 45 +++++++++++++++++++ neutron_lib/exceptions/__init__.py | 16 +++++++ .../tests/unit/api/definitions/test_dvr.py | 20 +++++++++ .../rehome-dvr-apidef-a6aa415152457c9a.yaml | 8 ++++ 5 files changed, 91 insertions(+) create mode 100644 neutron_lib/api/definitions/dvr.py create mode 100644 neutron_lib/tests/unit/api/definitions/test_dvr.py create mode 100644 releasenotes/notes/rehome-dvr-apidef-a6aa415152457c9a.yaml diff --git a/neutron_lib/api/definitions/__init__.py b/neutron_lib/api/definitions/__init__.py index d94de1c4c..0a466a88b 100644 --- a/neutron_lib/api/definitions/__init__.py +++ b/neutron_lib/api/definitions/__init__.py @@ -21,6 +21,7 @@ from neutron_lib.api.definitions import data_plane_status from neutron_lib.api.definitions import default_subnetpools from neutron_lib.api.definitions import dns from neutron_lib.api.definitions import dns_domain_ports +from neutron_lib.api.definitions import dvr from neutron_lib.api.definitions import external_net from neutron_lib.api.definitions import extra_dhcp_opt from neutron_lib.api.definitions import extraroute @@ -71,6 +72,7 @@ _ALL_API_DEFINITIONS = { default_subnetpools, dns, dns_domain_ports, + dvr, external_net, extra_dhcp_opt, extraroute, diff --git a/neutron_lib/api/definitions/dvr.py b/neutron_lib/api/definitions/dvr.py new file mode 100644 index 000000000..cbc59e513 --- /dev/null +++ b/neutron_lib/api/definitions/dvr.py @@ -0,0 +1,45 @@ +# Copyright (c) 2014 OpenStack Foundation. 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 import converters +from neutron_lib.api.definitions import l3 +from neutron_lib import constants + +DISTRIBUTED = 'distributed' + +ALIAS = constants.L3_DISTRIBUTED_EXT_ALIAS +LABEL = ALIAS +IS_SHIM_EXTENSION = False +IS_STANDARD_ATTR_EXTENSION = False +NAME = 'Distributed Virtual Router' +API_PREFIX = '' +DESCRIPTION = 'Enables configuration of Distributed Virtual Routers.' +UPDATED_TIMESTAMP = '2014-06-1T10:00:00-00:00' +RESOURCE_NAME = l3.ROUTER +COLLECTION_NAME = l3.ROUTERS +RESOURCE_ATTRIBUTE_MAP = { + COLLECTION_NAME: { + DISTRIBUTED: {'allow_post': True, + 'allow_put': True, + 'is_visible': True, + 'default': constants.ATTR_NOT_SPECIFIED, + 'convert_to': converters.convert_to_boolean_if_not_none, + 'enforce_policy': True}, + } +} +SUB_RESOURCE_ATTRIBUTE_MAP = {} +ACTION_MAP = {} +REQUIRED_EXTENSIONS = [l3.ALIAS] +OPTIONAL_EXTENSIONS = [] +ACTION_STATUS = {} diff --git a/neutron_lib/exceptions/__init__.py b/neutron_lib/exceptions/__init__.py index 7be82405a..a29a08164 100644 --- a/neutron_lib/exceptions/__init__.py +++ b/neutron_lib/exceptions/__init__.py @@ -515,3 +515,19 @@ class MultipleExceptions(Exception): """ super(MultipleExceptions, self).__init__(*args, **kwargs) self.inner_exceptions = exceptions + + +class HostMacAddressGenerationFailure(ServiceUnavailable): + """MAC address generation failure for a host. + + :param host: The host MAC address generation failed for. + """ + message = _("Unable to generate unique DVR mac for host %(host)s.") + + +class NetworkMacAddressGenerationFailure(ServiceUnavailable): + """An error related to MAC address generation on a network. + + :param net_id: The ID of the network MAC address generation failed on. + """ + message = _("Unable to generate unique mac on network %(net_id)s.") diff --git a/neutron_lib/tests/unit/api/definitions/test_dvr.py b/neutron_lib/tests/unit/api/definitions/test_dvr.py new file mode 100644 index 000000000..e9fe0fe97 --- /dev/null +++ b/neutron_lib/tests/unit/api/definitions/test_dvr.py @@ -0,0 +1,20 @@ +# 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 dvr +from neutron_lib.tests.unit.api.definitions import base + + +class DvrDefinitionTestCase(base.DefinitionBaseTestCase): + extension_module = dvr + extension_resources = () + extension_attributes = (dvr.DISTRIBUTED,) diff --git a/releasenotes/notes/rehome-dvr-apidef-a6aa415152457c9a.yaml b/releasenotes/notes/rehome-dvr-apidef-a6aa415152457c9a.yaml new file mode 100644 index 000000000..3ec05be68 --- /dev/null +++ b/releasenotes/notes/rehome-dvr-apidef-a6aa415152457c9a.yaml @@ -0,0 +1,8 @@ +--- +features: + - The API defintion for the ``dvr`` extension is now available in + ``neutron_lib.api.defintions.dvr``. + - The two ``MacAddressGenerationFailure`` exceptions are now available + as ``HostMacAddressGenerationFailure`` and + ``NetworkMacAddressGenerationFailure`` for host and network MAC address + generation errors respectively.