From 5d2b97fa5be91bf893561d8dea1ba395a223ee44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89douard=20Thuleau?= Date: Thu, 15 Dec 2016 18:06:10 +0100 Subject: [PATCH] Support the neutron lib decomposition From recent neutron release (since newton), a reusable library code for neutron names 'neutron-lib' was introduced to stabalize some of the common interfaces. That patch permits to support that new library. Change-Id: I6fbaf11589ea5362ed8b9aecceefcd88c9d9f414 Closes-Bug: #1650339 --- .../extensions/contrail.py | 5 +++- neutron_plugin_contrail/extensions/ipam.py | 19 +++++++++++---- .../loadbalancercustomattributes.py | 24 +++++++++++++++---- neutron_plugin_contrail/extensions/policy.py | 19 +++++++++++---- .../extensions/serviceinterface.py | 13 +++++++--- .../extensions/vfbinding.py | 18 ++++++++++---- .../extensions/vpcroutetable.py | 12 +++++++--- .../plugins/opencontrail/contrail_plugin.py | 5 +++- .../opencontrail/contrail_plugin_base.py | 11 ++++----- 9 files changed, 92 insertions(+), 34 deletions(-) diff --git a/neutron_plugin_contrail/extensions/contrail.py b/neutron_plugin_contrail/extensions/contrail.py index 38be233..fb74936 100644 --- a/neutron_plugin_contrail/extensions/contrail.py +++ b/neutron_plugin_contrail/extensions/contrail.py @@ -1,4 +1,7 @@ -from neutron.api import extensions +try: + from neutron_lib.api import extensions +except ImportError: + from neutron.api import extensions EXTENDED_ATTRIBUTES_2_0 = { diff --git a/neutron_plugin_contrail/extensions/ipam.py b/neutron_plugin_contrail/extensions/ipam.py index 2805d1a..d324ba7 100644 --- a/neutron_plugin_contrail/extensions/ipam.py +++ b/neutron_plugin_contrail/extensions/ipam.py @@ -1,9 +1,18 @@ from abc import abstractmethod -from neutron.api.v2 import attributes as attr +try: + from neutron_lib import constants +except ImportError: + from neutron.api.v2 import attributes as constants from neutron.api.v2 import base -from neutron.common import exceptions as qexception -from neutron.api import extensions +try: + from neutron_lib import exceptions as exc +except ImportError: + from neutron.common import exceptions as exc +try: + from neutron_lib.api import extensions +except ImportError: + from neutron.api import extensions from neutron import manager try: @@ -13,14 +22,14 @@ # Ipam Exceptions -class IpamNotFound(qexception.NotFound): +class IpamNotFound(exc.NotFound): message = _("IPAM %(id)s could not be found") # Attribute Map RESOURCE_ATTRIBUTE_MAP = { 'ipams': { 'id': {'allow_post': False, 'allow_put': False, - 'validate': {'type:regex': attr.UUID_PATTERN}, + 'validate': {'type:regex': constants.UUID_PATTERN}, 'is_visible': True}, 'name': {'allow_post': True, 'allow_put': False, 'is_visible': True, 'default': ''}, diff --git a/neutron_plugin_contrail/extensions/loadbalancercustomattributes.py b/neutron_plugin_contrail/extensions/loadbalancercustomattributes.py index f664095..aca36fe 100644 --- a/neutron_plugin_contrail/extensions/loadbalancercustomattributes.py +++ b/neutron_plugin_contrail/extensions/loadbalancercustomattributes.py @@ -1,5 +1,7 @@ -from neutron.api.v2 import attributes as attr -from neutron.api import extensions +try: + from neutron_lib.api import extensions +except ImportError: + from neutron.api import extensions def _validate_custom_attributes(data, valid_values=None): if not isinstance(data, list): @@ -9,14 +11,28 @@ def _validate_custom_attributes(data, valid_values=None): def convert_none_to_empty_list(value): return [] if value is None else value -attr.validators['type:customattributes'] = _validate_custom_attributes +try: + from neutron_lib import constants + ATTR_NOT_SPECIFIED = constants.ATTR_NOT_SPECIFIED +except ImportError: + from neutron.api.v2 import attributes + ATTR_NOT_SPECIFIED = attributes.ATTR_NOT_SPECIFIED + +try: + from neutron_lib.api import validators + from neutron.api.v2 import attributes as attr + validators.add_validator('type:customattributes', + _validate_custom_attributes) +except ImportError: + from neutron.api.v2 import attributes as attr + attr.validators['type:customattributes'] = _validate_custom_attributes # Extended_Attribute MAP EXTENDED_ATTRIBUTES_2_0 = { 'pools': { 'custom_attributes': {'allow_post': True, 'allow_put': True, 'convert_to': convert_none_to_empty_list, - 'default': attr.ATTR_NOT_SPECIFIED, + 'default': ATTR_NOT_SPECIFIED, 'validate': {'type:customattributes': None}, 'is_visible': True}, } diff --git a/neutron_plugin_contrail/extensions/policy.py b/neutron_plugin_contrail/extensions/policy.py index effc9d5..f4b489f 100644 --- a/neutron_plugin_contrail/extensions/policy.py +++ b/neutron_plugin_contrail/extensions/policy.py @@ -1,9 +1,18 @@ from abc import abstractmethod -from neutron.api.v2 import attributes as attr +try: + from neutron_lib import constants +except ImportError: + from neutron.api.v2 import attributes as constants from neutron.api.v2 import base -from neutron.common import exceptions as qexception -from neutron.api import extensions +try: + from neutron_lib import exceptions as exc +except ImportError: + from neutron.common import exceptions as exc +try: + from neutron_lib.api import extensions +except ImportError: + from neutron.api import extensions from neutron import manager try: @@ -13,14 +22,14 @@ # Policy Exceptions -class PolicyNotFound(qexception.NotFound): +class PolicyNotFound(exc.NotFound): message = _("Policy %(id)s could not be found") # Attribute Map RESOURCE_ATTRIBUTE_MAP = { 'policys': { 'id': {'allow_post': False, 'allow_put': False, - 'validate': {'type:regex': attr.UUID_PATTERN}, + 'validate': {'type:regex': constants.UUID_PATTERN}, 'is_visible': True}, 'name': {'allow_post': True, 'allow_put': False, 'is_visible': True, 'default': ''}, diff --git a/neutron_plugin_contrail/extensions/serviceinterface.py b/neutron_plugin_contrail/extensions/serviceinterface.py index 56c3f29..b5474aa 100644 --- a/neutron_plugin_contrail/extensions/serviceinterface.py +++ b/neutron_plugin_contrail/extensions/serviceinterface.py @@ -1,11 +1,18 @@ -from neutron.api.v2 import attributes as attr -from neutron.api import extensions +#from neutron.api.v2 import attributes as attr +try: + from neutron_lib import constants +except ImportError: + from neutron.api.v2 import attributes as constants +try: + from neutron_lib.api import extensions +except ImportError: + from neutron.api import extensions EXTENDED_ATTRIBUTES_2_0 = { 'ports': { 'binding:service_interface_type': {'allow_post': True, 'allow_put': False, - 'default': attr.ATTR_NOT_SPECIFIED, + 'default': constants.ATTR_NOT_SPECIFIED, 'is_visible': True}, }, } diff --git a/neutron_plugin_contrail/extensions/vfbinding.py b/neutron_plugin_contrail/extensions/vfbinding.py index 67f4dfe..2cb2a15 100644 --- a/neutron_plugin_contrail/extensions/vfbinding.py +++ b/neutron_plugin_contrail/extensions/vfbinding.py @@ -13,16 +13,24 @@ # under the License. # -from neutron.api.v2 import attributes as attr -from neutron.api import extensions +try: + from neutron_lib.api import converters + from neutron_lib import constants + ATTR_NOT_SPECIFIED = constants.ATTR_NOT_SPECIFIED +except ImportError: + from neutron.api.v2 import attributes as converters + ATTR_NOT_SPECIFIED = converters.ATTR_NOT_SPECIFIED +try: + from neutron_lib.api import extensions +except ImportError: + from neutron.api import extensions EXTENDED_ATTRIBUTES_2_0 = { 'ports': { 'binding:vf': {'allow_post': True, 'allow_put': True, - 'convert_list_to': - attr.convert_kvp_list_to_dict, - 'default': attr.ATTR_NOT_SPECIFIED, + 'convert_list_to': converters.convert_kvp_list_to_dict, + 'default': ATTR_NOT_SPECIFIED, 'is_visible': True}, }, } diff --git a/neutron_plugin_contrail/extensions/vpcroutetable.py b/neutron_plugin_contrail/extensions/vpcroutetable.py index 65ac3f3..c54c959 100644 --- a/neutron_plugin_contrail/extensions/vpcroutetable.py +++ b/neutron_plugin_contrail/extensions/vpcroutetable.py @@ -23,10 +23,16 @@ except ImportError: from oslo_config import cfg -from neutron.api import extensions +try: + from neutron_lib.api import extensions +except ImportError: + from neutron.api import extensions from neutron.api.v2 import attributes as attr from neutron.api.v2 import base -from neutron.common import exceptions as qexception +try: + from neutron_lib import exceptions as exc +except ImportError: + from neutron.common import exceptions as exc from neutron import manager try: from neutron.quota import resource_registry as quota @@ -39,7 +45,7 @@ from oslo_utils import uuidutils # Route table Exceptions -class RouteTableNotFound(qexception.NotFound): +class RouteTableNotFound(exc.NotFound): message = _("Route table %(id)s does not exist") # Attribute Map diff --git a/neutron_plugin_contrail/plugins/opencontrail/contrail_plugin.py b/neutron_plugin_contrail/plugins/opencontrail/contrail_plugin.py index f64de0d..3a2ea27 100644 --- a/neutron_plugin_contrail/plugins/opencontrail/contrail_plugin.py +++ b/neutron_plugin_contrail/plugins/opencontrail/contrail_plugin.py @@ -16,7 +16,10 @@ import requests from neutron.api.v2 import attributes as attr -from neutron.common import exceptions as exc +try: + from neutron_lib import exceptions as exc +except ImportError: + from neutron.common import exceptions as exc from neutron.common.config import cfg from neutron.db import portbindings_base from neutron.db import quota_db # noqa diff --git a/neutron_plugin_contrail/plugins/opencontrail/contrail_plugin_base.py b/neutron_plugin_contrail/plugins/opencontrail/contrail_plugin_base.py index 9540cfe..7dfe625 100644 --- a/neutron_plugin_contrail/plugins/opencontrail/contrail_plugin_base.py +++ b/neutron_plugin_contrail/plugins/opencontrail/contrail_plugin_base.py @@ -18,7 +18,10 @@ import os.path as path from neutron.api.v2 import attributes as attr -from neutron.common import exceptions as exc +try: + from neutron_lib import exceptions as exc +except ImportError: + from neutron.common import exceptions as exc from neutron.common.config import cfg from neutron.db import portbindings_base from neutron.db import quota_db # noqa @@ -40,10 +43,6 @@ except ImportError: from oslo_log import log as logging -try: - from neutron_lib import exceptions as libexc -except ImportError: - libexc = None # Constant for max length of network interface names # eg 'bridge' in the Network class or 'devname' in @@ -106,8 +105,6 @@ def _raise_contrail_error(info, obj_name): raise getattr(securitygroup, exc_name)(**info) if hasattr(allowedaddresspairs, exc_name): raise getattr(allowedaddresspairs, exc_name)(**info) - if libexc and hasattr(libexc, exc_name): - raise getattr(libexc, exc_name)(**info) raise exc.NeutronException(**info)