From 62576cabf7f1c282e6fe504f7d1362434c8217b6 Mon Sep 17 00:00:00 2001 From: Boden R Date: Tue, 23 May 2017 12:16:25 -0600 Subject: [PATCH] use core resource attribute constants from neutron-lib neutron-lib now contains the API definitions for neutron's core resources. This patch removes the constant core resource and collection variables and uses them from lib. Subsequent patches will consume the actual core resource attribute definitions. NeutronLibImpact Change-Id: Ia9afdf620cd538b2aa420593277d6403a45c996b --- neutron/api/v2/attributes.py | 30 ++++++------- neutron/db/address_scope_db.py | 4 +- neutron/db/allowedaddresspairs_db.py | 4 +- neutron/db/availability_zone/network.py | 4 +- neutron/db/db_base_plugin_common.py | 14 ++++--- neutron/db/db_base_plugin_v2.py | 7 ++-- neutron/db/external_net_db.py | 4 +- neutron/db/extradhcpopt_db.py | 5 +-- neutron/db/l3_hamode_db.py | 4 +- neutron/db/models_v2.py | 13 +++--- neutron/db/portbindings_base.py | 4 +- neutron/db/portbindings_db.py | 4 +- neutron/db/portsecurity_db.py | 6 ++- neutron/db/securitygroups_db.py | 4 +- neutron/db/subnet_service_type_db_models.py | 5 ++- neutron/db/vlantransparent_db.py | 5 ++- neutron/extensions/address_scope.py | 6 ++- neutron/extensions/default_subnetpools.py | 5 +-- neutron/extensions/dns.py | 4 +- neutron/extensions/ip_allocation.py | 4 +- neutron/extensions/segment.py | 4 +- neutron/extensions/subnet_service_types.py | 4 +- neutron/extensions/tag.py | 4 +- neutron/extensions/tag_ext.py | 10 +++-- neutron/plugins/common/utils.py | 9 ++-- neutron/plugins/ml2/plugin.py | 42 ++++++++++--------- neutron/services/auto_allocate/db.py | 4 +- neutron/services/segments/plugin.py | 10 +++-- neutron/services/tag/tag_plugin.py | 13 +++--- neutron/services/trunk/plugin.py | 4 +- .../unit/extensions/test_data_plane_status.py | 17 ++++---- .../ml2/drivers/l2pop/test_mech_driver.py | 4 +- .../ml2/extensions/test_data_plane_status.py | 8 ++-- 33 files changed, 147 insertions(+), 122 deletions(-) diff --git a/neutron/api/v2/attributes.py b/neutron/api/v2/attributes.py index 25ce8285c80..45ac2f12a44 100644 --- a/neutron/api/v2/attributes.py +++ b/neutron/api/v2/attributes.py @@ -14,6 +14,10 @@ # under the License. from neutron_lib.api import converters as lib_converters +from neutron_lib.api.definitions import network as net_def +from neutron_lib.api.definitions import port as port_def +from neutron_lib.api.definitions import subnet as subnet_def +from neutron_lib.api.definitions import subnetpool as subnetpool_def from neutron_lib import constants from neutron_lib.db import constants as db_const @@ -22,18 +26,10 @@ from neutron_lib.db import constants as db_const SHARED = 'shared' # Define constants for base resource name -NETWORK = 'network' -NETWORKS = '%ss' % NETWORK -PORT = 'port' -PORTS = '%ss' % PORT -SUBNET = 'subnet' -SUBNETS = '%ss' % SUBNET -SUBNETPOOL = 'subnetpool' -SUBNETPOOLS = '%ss' % SUBNETPOOL -CORE_RESOURCES = {'network': 'networks', - 'subnet': 'subnets', - 'subnetpool': 'subnetpools', - 'port': 'ports'} +CORE_RESOURCES = {net_def.RESOURCE_NAME: net_def.COLLECTION_NAME, + subnet_def.RESOURCE_NAME: subnet_def.COLLECTION_NAME, + subnetpool_def.RESOURCE_NAME: subnetpool_def.COLLECTION_NAME, + port_def.RESOURCE_NAME: port_def.COLLECTION_NAME} # Note: a default of ATTR_NOT_SPECIFIED indicates that an # attribute is not required, but will be generated by the plugin # if it is not specified. Particularly, a value of ATTR_NOT_SPECIFIED @@ -58,7 +54,7 @@ CORE_RESOURCES = {'network': 'networks', # mechanism, ie: there might be rules which refer to this attribute. RESOURCE_ATTRIBUTE_MAP = { - NETWORKS: { + net_def.COLLECTION_NAME: { 'id': {'allow_post': False, 'allow_put': False, 'validate': {'type:uuid': None}, 'is_visible': True, @@ -88,7 +84,7 @@ RESOURCE_ATTRIBUTE_MAP = { 'required_by_policy': True, 'enforce_policy': True}, }, - PORTS: { + port_def.COLLECTION_NAME: { 'id': {'allow_post': False, 'allow_put': False, 'validate': {'type:uuid': None}, 'is_visible': True, @@ -134,7 +130,7 @@ RESOURCE_ATTRIBUTE_MAP = { 'status': {'allow_post': False, 'allow_put': False, 'is_visible': True}, }, - SUBNETS: { + subnet_def.COLLECTION_NAME: { 'id': {'allow_post': False, 'allow_put': False, 'validate': {'type:uuid': None}, 'is_visible': True, @@ -215,7 +211,7 @@ RESOURCE_ATTRIBUTE_MAP = { 'required_by_policy': True, 'enforce_policy': True}, }, - SUBNETPOOLS: { + subnetpool_def.COLLECTION_NAME: { 'id': {'allow_post': False, 'allow_put': False, 'validate': {'type:uuid': None}, @@ -282,7 +278,7 @@ RESOURCE_ATTRIBUTE_MAP = { # Identify the attribute used by a resource to reference another resource RESOURCE_FOREIGN_KEYS = { - NETWORKS: 'network_id' + net_def.COLLECTION_NAME: 'network_id' } diff --git a/neutron/db/address_scope_db.py b/neutron/db/address_scope_db.py index 5becc826595..f276d97a2af 100644 --- a/neutron/db/address_scope_db.py +++ b/neutron/db/address_scope_db.py @@ -12,11 +12,11 @@ # License for the specific language governing permissions and limitations # under the License. +from neutron_lib.api.definitions import network as net_def from neutron_lib import constants from oslo_utils import uuidutils from neutron._i18n import _ -from neutron.api.v2 import attributes as attr from neutron.db import _resource_extend as resource_extend from neutron.db import _utils as db_utils from neutron.db import api as db_api @@ -119,7 +119,7 @@ class AddressScopeDbMixin(ext_address_scope.AddressScopePluginBase): address_scope.delete() @staticmethod - @resource_extend.extends([attr.NETWORKS]) + @resource_extend.extends([net_def.COLLECTION_NAME]) def _extend_network_dict_address_scope(network_res, network_db): network_res[ext_address_scope.IPV4_ADDRESS_SCOPE] = None network_res[ext_address_scope.IPV6_ADDRESS_SCOPE] = None diff --git a/neutron/db/allowedaddresspairs_db.py b/neutron/db/allowedaddresspairs_db.py index 114b01142dd..af127880c5c 100644 --- a/neutron/db/allowedaddresspairs_db.py +++ b/neutron/db/allowedaddresspairs_db.py @@ -13,9 +13,9 @@ # under the License. # +from neutron_lib.api.definitions import port as port_def from neutron_lib.api import validators -from neutron.api.v2 import attributes as attr from neutron.common import utils from neutron.db import _resource_extend as resource_extend from neutron.db import _utils as db_utils @@ -65,7 +65,7 @@ class AllowedAddressPairsMixin(object): for pair in pairs] @staticmethod - @resource_extend.extends([attr.PORTS]) + @resource_extend.extends([port_def.COLLECTION_NAME]) def _extend_port_dict_allowed_address_pairs(port_res, port_db): # If port_db is provided, allowed address pairs will be accessed via # sqlalchemy models. As they're loaded together with ports this diff --git a/neutron/db/availability_zone/network.py b/neutron/db/availability_zone/network.py index 6e9fccf0dcd..2e0c3ecf234 100644 --- a/neutron/db/availability_zone/network.py +++ b/neutron/db/availability_zone/network.py @@ -11,9 +11,9 @@ # License for the specific language governing permissions and limitations # under the License. +from neutron_lib.api.definitions import network as net_def from neutron_lib.plugins import directory -from neutron.api.v2 import attributes from neutron.db import _resource_extend as resource_extend from neutron.extensions import availability_zone as az_ext from neutron.extensions import network_availability_zone as net_az @@ -24,7 +24,7 @@ class NetworkAvailabilityZoneMixin(net_az.NetworkAvailabilityZonePluginBase): """Mixin class to enable network's availability zone attributes.""" @staticmethod - @resource_extend.extends([attributes.NETWORKS]) + @resource_extend.extends([net_def.COLLECTION_NAME]) def _extend_availability_zone(net_res, net_db): net_res[az_ext.AZ_HINTS] = az_ext.convert_az_string_to_list( net_db[az_ext.AZ_HINTS]) diff --git a/neutron/db/db_base_plugin_common.py b/neutron/db/db_base_plugin_common.py index 4d9c4df3ebc..55a9b442a3f 100644 --- a/neutron/db/db_base_plugin_common.py +++ b/neutron/db/db_base_plugin_common.py @@ -15,6 +15,10 @@ import functools +from neutron_lib.api.definitions import network as net_def +from neutron_lib.api.definitions import port as port_def +from neutron_lib.api.definitions import subnet as subnet_def +from neutron_lib.api.definitions import subnetpool as subnetpool_def from neutron_lib.api import validators from neutron_lib import constants from neutron_lib import exceptions as n_exc @@ -23,7 +27,6 @@ from oslo_config import cfg from oslo_log import log as logging from sqlalchemy.orm import exc -from neutron.api.v2 import attributes from neutron.common import constants as n_const from neutron.common import exceptions from neutron.db import _model_query as model_query @@ -154,7 +157,7 @@ class DbBasePluginCommon(common_db_mixin.CommonDbMixin): # The shared attribute for a subnet is the same as its parent network res['shared'] = self._is_network_shared(context, subnet.rbac_entries) # Call auxiliary extend functions, if any - resource_extend.apply_funcs(attributes.SUBNETS, res, subnet) + resource_extend.apply_funcs(subnet_def.COLLECTION_NAME, res, subnet) return db_utils.resource_fields(res, fields) def _make_subnetpool_dict(self, subnetpool, fields=None): @@ -173,7 +176,8 @@ class DbBasePluginCommon(common_db_mixin.CommonDbMixin): 'ip_version': subnetpool['ip_version'], 'default_quota': subnetpool['default_quota'], 'address_scope_id': subnetpool['address_scope_id']} - resource_extend.apply_funcs(attributes.SUBNETPOOLS, res, subnetpool) + resource_extend.apply_funcs( + subnetpool_def.COLLECTION_NAME, res, subnetpool) return db_utils.resource_fields(res, fields) def _make_port_dict(self, port, fields=None, @@ -192,7 +196,7 @@ class DbBasePluginCommon(common_db_mixin.CommonDbMixin): "device_owner": port["device_owner"]} # Call auxiliary extend functions, if any if process_extensions: - resource_extend.apply_funcs(attributes.PORTS, res, port) + resource_extend.apply_funcs(port_def.COLLECTION_NAME, res, port) return db_utils.resource_fields(res, fields) def _get_network(self, context, id): @@ -276,7 +280,7 @@ class DbBasePluginCommon(common_db_mixin.CommonDbMixin): res['shared'] = self._is_network_shared(context, network.rbac_entries) # Call auxiliary extend functions, if any if process_extensions: - resource_extend.apply_funcs(attributes.NETWORKS, res, network) + resource_extend.apply_funcs(net_def.COLLECTION_NAME, res, network) return db_utils.resource_fields(res, fields) def _is_network_shared(self, context, rbac_entries): diff --git a/neutron/db/db_base_plugin_v2.py b/neutron/db/db_base_plugin_v2.py index 8d0267376b1..bdaf8d4fdd8 100644 --- a/neutron/db/db_base_plugin_v2.py +++ b/neutron/db/db_base_plugin_v2.py @@ -16,6 +16,8 @@ import functools import netaddr +from neutron_lib.api.definitions import port as port_def +from neutron_lib.api.definitions import subnetpool as subnetpool_def from neutron_lib.api import validators from neutron_lib.callbacks import events from neutron_lib.callbacks import exceptions @@ -37,7 +39,6 @@ from sqlalchemy import not_ from neutron._i18n import _, _LE, _LI from neutron.api.rpc.agentnotifiers import l3_rpc_agent_api -from neutron.api.v2 import attributes from neutron.common import constants as n_const from neutron.common import exceptions as n_exc from neutron.common import ipv6_utils @@ -947,7 +948,7 @@ class NeutronDbPluginV2(db_base_plugin_common.DbBasePluginCommon, if auto_subnet: # special flag to avoid re-allocation on auto subnets fixed.append({'subnet_id': sub_id, 'delete_subnet': True}) - data = {attributes.PORT: {'fixed_ips': fixed}} + data = {port_def.RESOURCE_NAME: {'fixed_ips': fixed}} self.update_port(context, port_id, data) except exc.PortNotFound: # port is gone @@ -1159,7 +1160,7 @@ class NeutronDbPluginV2(db_base_plugin_common.DbBasePluginCommon, for key in ['min_prefixlen', 'max_prefixlen', 'default_prefixlen']: updated['key'] = str(updated[key]) - resource_extend.apply_funcs(attributes.SUBNETPOOLS, + resource_extend.apply_funcs(subnetpool_def.COLLECTION_NAME, updated, orig_sp.db_obj) return updated diff --git a/neutron/db/external_net_db.py b/neutron/db/external_net_db.py index b6a1aec1010..4e76a7629db 100644 --- a/neutron/db/external_net_db.py +++ b/neutron/db/external_net_db.py @@ -13,6 +13,7 @@ # License for the specific language governing permissions and limitations # under the License. +from neutron_lib.api.definitions import network as net_def from neutron_lib.api import validators from neutron_lib.callbacks import events from neutron_lib.callbacks import registry @@ -24,7 +25,6 @@ from neutron_lib.plugins import directory from sqlalchemy.sql import expression as expr from neutron._i18n import _ -from neutron.api.v2 import attributes from neutron.db import _model_query as model_query from neutron.db import _resource_extend as resource_extend from neutron.db import _utils as db_utils @@ -84,7 +84,7 @@ class External_net_db_mixin(object): context, network_id=net_id) @staticmethod - @resource_extend.extends([attributes.NETWORKS]) + @resource_extend.extends([net_def.COLLECTION_NAME]) def _extend_network_dict_l3(network_res, network_db): # Comparing with None for converting uuid into bool network_res[external_net.EXTERNAL] = network_db.external is not None diff --git a/neutron/db/extradhcpopt_db.py b/neutron/db/extradhcpopt_db.py index 1982db5fa53..5829b0c83d1 100644 --- a/neutron/db/extradhcpopt_db.py +++ b/neutron/db/extradhcpopt_db.py @@ -14,9 +14,8 @@ # under the License. from neutron_lib.api.definitions import extra_dhcp_opt as edo_ext +from neutron_lib.api.definitions import port as port_def - -from neutron.api.v2 import attributes from neutron.db import _resource_extend as resource_extend from neutron.db import api as db_api from neutron.objects.port.extensions import extra_dhcp_opt as obj_extra_dhcp @@ -118,7 +117,7 @@ class ExtraDhcpOptMixin(object): return bool(dopts) @staticmethod - @resource_extend.extends([attributes.PORTS]) + @resource_extend.extends([port_def.COLLECTION_NAME]) def _extend_port_dict_extra_dhcp_opt(res, port): res[edo_ext.EXTRADHCPOPTS] = [{'opt_name': dho.opt_name, 'opt_value': dho.opt_value, diff --git a/neutron/db/l3_hamode_db.py b/neutron/db/l3_hamode_db.py index c5a13aeeacb..1efa11d5dd6 100644 --- a/neutron/db/l3_hamode_db.py +++ b/neutron/db/l3_hamode_db.py @@ -16,6 +16,7 @@ import functools import netaddr +from neutron_lib.api.definitions import port as port_def from neutron_lib.api.definitions import portbindings from neutron_lib.api.definitions import provider_net as providernet from neutron_lib.api import validators @@ -35,7 +36,6 @@ from sqlalchemy import exc as sql_exc from sqlalchemy import orm from neutron._i18n import _, _LE, _LI, _LW -from neutron.api.v2 import attributes from neutron.common import constants as n_const from neutron.common import utils as n_utils from neutron.db import _utils as db_utils @@ -698,7 +698,7 @@ class L3_HA_NAT_db_mixin(l3_dvr_db.L3_NAT_with_dvr_db_mixin, port[portbindings.HOST_ID] = host try: self._core_plugin.update_port(admin_ctx, port['id'], - {attributes.PORT: port}) + {port_def.RESOURCE_NAME: port}) except (orm.exc.StaleDataError, orm.exc.ObjectDeletedError, n_exc.PortNotFound): # Take concurrently deleted interfaces in to account diff --git a/neutron/db/models_v2.py b/neutron/db/models_v2.py index fb680827101..579ee840ddd 100644 --- a/neutron/db/models_v2.py +++ b/neutron/db/models_v2.py @@ -13,6 +13,10 @@ # License for the specific language governing permissions and limitations # under the License. +from neutron_lib.api.definitions import network as net_def +from neutron_lib.api.definitions import port as port_def +from neutron_lib.api.definitions import subnet as subnet_def +from neutron_lib.api.definitions import subnetpool as subnetpool_def from neutron_lib import constants from neutron_lib.db import constants as db_const from neutron_lib.db import model_base @@ -20,7 +24,6 @@ import sqlalchemy as sa from sqlalchemy import orm from sqlalchemy import sql -from neutron.api.v2 import attributes as attr from neutron.db.network_dhcp_agent_binding import models as ndab_model from neutron.db import rbac_db_models from neutron.db import standard_attr @@ -106,7 +109,7 @@ class Port(standard_attr.HasStandardAttributes, model_base.BASEV2, name='uniq_ports0network_id0mac_address'), model_base.BASEV2.__table_args__ ) - api_collections = [attr.PORTS] + api_collections = [port_def.COLLECTION_NAME] def __init__(self, id=None, tenant_id=None, project_id=None, name=None, network_id=None, mac_address=None, admin_state_up=None, @@ -198,7 +201,7 @@ class Subnet(standard_attr.HasStandardAttributes, model_base.BASEV2, rbac_db_models.NetworkRBAC, lazy='subquery', uselist=True, foreign_keys='Subnet.network_id', primaryjoin='Subnet.network_id==NetworkRBAC.object_id') - api_collections = [attr.SUBNETS] + api_collections = [subnet_def.COLLECTION_NAME] class SubnetPoolPrefix(model_base.BASEV2): @@ -235,7 +238,7 @@ class SubnetPool(standard_attr.HasStandardAttributes, model_base.BASEV2, backref='subnetpools', cascade='all, delete, delete-orphan', lazy='subquery') - api_collections = [attr.SUBNETPOOLS] + api_collections = [subnetpool_def.COLLECTION_NAME] class Network(standard_attr.HasStandardAttributes, model_base.BASEV2, @@ -256,4 +259,4 @@ class Network(standard_attr.HasStandardAttributes, model_base.BASEV2, dhcp_agents = orm.relationship( 'Agent', lazy='subquery', viewonly=True, secondary=ndab_model.NetworkDhcpAgentBinding.__table__) - api_collections = [attr.NETWORKS] + api_collections = [net_def.COLLECTION_NAME] diff --git a/neutron/db/portbindings_base.py b/neutron/db/portbindings_base.py index d580029ea04..58c6243645d 100644 --- a/neutron/db/portbindings_base.py +++ b/neutron/db/portbindings_base.py @@ -13,9 +13,9 @@ # License for the specific language governing permissions and limitations # under the License. +from neutron_lib.api.definitions import port as port_def from neutron_lib.plugins import directory -from neutron.api.v2 import attributes from neutron.db import _resource_extend as resource_extend @@ -34,7 +34,7 @@ class PortBindingBaseMixin(object): port_res.update(self.base_binding_dict) @staticmethod - @resource_extend.extends([attributes.PORTS]) + @resource_extend.extends([port_def.COLLECTION_NAME]) def _extend_port_dict_binding(port_res, port_db): plugin = directory.get_plugin() if not isinstance(plugin, PortBindingBaseMixin): diff --git a/neutron/db/portbindings_db.py b/neutron/db/portbindings_db.py index 4de5b2ad7ba..6bb2922b4f1 100644 --- a/neutron/db/portbindings_db.py +++ b/neutron/db/portbindings_db.py @@ -13,11 +13,11 @@ # License for the specific language governing permissions and limitations # under the License. +from neutron_lib.api.definitions import port as port_def from neutron_lib.api.definitions import portbindings from neutron_lib.api import validators from neutron_lib.plugins import directory -from neutron.api.v2 import attributes from neutron.db import _model_query as model_query from neutron.db import _resource_extend as resource_extend from neutron.db import api as db_api @@ -103,7 +103,7 @@ class PortBindingMixin(portbindings_base.PortBindingBaseMixin): self._extend_port_dict_binding_host(port_res, host) @staticmethod - @resource_extend.extends([attributes.PORTS]) + @resource_extend.extends([port_def.COLLECTION_NAME]) def _extend_port_dict_binding(port_res, port_db): plugin = directory.get_plugin() if not isinstance(plugin, PortBindingMixin): diff --git a/neutron/db/portsecurity_db.py b/neutron/db/portsecurity_db.py index d1116d3bc85..aa95acf4b66 100644 --- a/neutron/db/portsecurity_db.py +++ b/neutron/db/portsecurity_db.py @@ -12,12 +12,13 @@ # License for the specific language governing permissions and limitations # under the License. +from neutron_lib.api.definitions import network as net_def +from neutron_lib.api.definitions import port as port_def from neutron_lib.api.definitions import port_security as psec from neutron_lib.api import validators from neutron_lib.plugins import directory from neutron_lib.utils import net -from neutron.api.v2 import attributes as attrs from neutron.db import _resource_extend as resource_extend from neutron.db import portsecurity_db_common @@ -26,7 +27,8 @@ from neutron.db import portsecurity_db_common class PortSecurityDbMixin(portsecurity_db_common.PortSecurityDbCommon): @staticmethod - @resource_extend.extends([attrs.NETWORKS, attrs.PORTS]) + @resource_extend.extends([net_def.COLLECTION_NAME, + port_def.COLLECTION_NAME]) def _extend_port_security_dict(response_data, db_data): plugin = directory.get_plugin() if ('port-security' in diff --git a/neutron/db/securitygroups_db.py b/neutron/db/securitygroups_db.py index 3bdf6b98ce4..a48d152e0e8 100644 --- a/neutron/db/securitygroups_db.py +++ b/neutron/db/securitygroups_db.py @@ -13,6 +13,7 @@ # under the License. import netaddr +from neutron_lib.api.definitions import port as port_def from neutron_lib.api import validators from neutron_lib.callbacks import events from neutron_lib.callbacks import exceptions @@ -27,7 +28,6 @@ import six from sqlalchemy.orm import scoped_session from neutron._i18n import _ -from neutron.api.v2 import attributes from neutron.common import constants as n_const from neutron.common import utils from neutron.db import _model_query as model_query @@ -701,7 +701,7 @@ class SecurityGroupDbMixin(ext_sg.SecurityGroupPluginBase): **kwargs) @staticmethod - @resource_extend.extends([attributes.PORTS]) + @resource_extend.extends([port_def.COLLECTION_NAME]) def _extend_port_dict_security_group(port_res, port_db): # Security group bindings will be retrieved from the SQLAlchemy # model. As they're loaded eagerly with ports because of the diff --git a/neutron/db/subnet_service_type_db_models.py b/neutron/db/subnet_service_type_db_models.py index 22e77d89998..a95a3e969f7 100644 --- a/neutron/db/subnet_service_type_db_models.py +++ b/neutron/db/subnet_service_type_db_models.py @@ -16,7 +16,8 @@ # TODO(ihrachys): consider renaming the module since now it does not contain # any models at all -from neutron.api.v2 import attributes +from neutron_lib.api.definitions import subnet as subnet_def + from neutron.db import _resource_extend as resource_extend @@ -25,7 +26,7 @@ class SubnetServiceTypeMixin(object): """Mixin class to extend subnet with service type attribute""" @staticmethod - @resource_extend.extends([attributes.SUBNETS]) + @resource_extend.extends([subnet_def.COLLECTION_NAME]) def _extend_subnet_service_types(subnet_res, subnet_db): subnet_res['service_types'] = [service_type['service_type'] for service_type in diff --git a/neutron/db/vlantransparent_db.py b/neutron/db/vlantransparent_db.py index 33f76748077..588ae4fcc3c 100644 --- a/neutron/db/vlantransparent_db.py +++ b/neutron/db/vlantransparent_db.py @@ -12,7 +12,8 @@ # License for the specific language governing permissions and limitations # under the License. -from neutron.api.v2 import attributes +from neutron_lib.api.definitions import network as net_def + from neutron.db import _resource_extend as resource_extend from neutron.extensions import vlantransparent @@ -22,7 +23,7 @@ class Vlantransparent_db_mixin(object): """Mixin class to add vlan transparent methods to db_base_plugin_v2.""" @staticmethod - @resource_extend.extends([attributes.NETWORKS]) + @resource_extend.extends([net_def.COLLECTION_NAME]) def _extend_network_dict_vlan_transparent(network_res, network_db): network_res[vlantransparent.VLANTRANSPARENT] = ( network_db.vlan_transparent) diff --git a/neutron/extensions/address_scope.py b/neutron/extensions/address_scope.py index d601376f3b0..b463df20b55 100644 --- a/neutron/extensions/address_scope.py +++ b/neutron/extensions/address_scope.py @@ -15,6 +15,8 @@ import abc from neutron_lib.api import converters +from neutron_lib.api.definitions import network as net_def +from neutron_lib.api.definitions import subnetpool as subnetpool_def from neutron_lib.api import extensions as api_extensions from neutron_lib import constants from neutron_lib.db import constants as db_const @@ -64,14 +66,14 @@ RESOURCE_ATTRIBUTE_MAP = { 'validate': {'type:values': [4, 6]}, 'is_visible': True}, }, - attr.SUBNETPOOLS: { + subnetpool_def.COLLECTION_NAME: { ADDRESS_SCOPE_ID: {'allow_post': True, 'allow_put': True, 'default': constants.ATTR_NOT_SPECIFIED, 'validate': {'type:uuid_or_none': None}, 'is_visible': True} }, - attr.NETWORKS: { + net_def.COLLECTION_NAME: { IPV4_ADDRESS_SCOPE: {'allow_post': False, 'allow_put': False, 'is_visible': True}, diff --git a/neutron/extensions/default_subnetpools.py b/neutron/extensions/default_subnetpools.py index 24ae6b6beb1..6e9f3dd528d 100644 --- a/neutron/extensions/default_subnetpools.py +++ b/neutron/extensions/default_subnetpools.py @@ -12,14 +12,13 @@ # under the License. from neutron_lib.api import converters +from neutron_lib.api.definitions import subnet as subnet_def from neutron_lib.api import extensions from neutron_lib import constants -from neutron.api.v2 import attributes - EXTENDED_ATTRIBUTES_2_0 = { - attributes.SUBNETS: { + subnet_def.COLLECTION_NAME: { 'use_default_subnetpool': {'allow_post': True, 'allow_put': False, 'default': False, diff --git a/neutron/extensions/dns.py b/neutron/extensions/dns.py index 0e8e2a77c29..546aad1e71a 100644 --- a/neutron/extensions/dns.py +++ b/neutron/extensions/dns.py @@ -15,6 +15,7 @@ import re +from neutron_lib.api.definitions import network as net_def from neutron_lib.api import extensions from neutron_lib.api import validators from neutron_lib import exceptions as n_exc @@ -22,7 +23,6 @@ from oslo_config import cfg import six from neutron._i18n import _ -from neutron.api.v2 import attributes as attr from neutron.extensions import l3 DNS_LABEL_MAX_LEN = 63 @@ -226,7 +226,7 @@ EXTENDED_ATTRIBUTES_2_0 = { 'validate': {'type:dns_domain': FQDN_MAX_LEN}, 'is_visible': True}, }, - attr.NETWORKS: { + net_def.COLLECTION_NAME: { DNSDOMAIN: {'allow_post': True, 'allow_put': True, 'default': '', 'convert_to': convert_to_lowercase, diff --git a/neutron/extensions/ip_allocation.py b/neutron/extensions/ip_allocation.py index 8e43a4d86f2..4aac7bdf5d8 100644 --- a/neutron/extensions/ip_allocation.py +++ b/neutron/extensions/ip_allocation.py @@ -12,9 +12,9 @@ # License for the specific language governing permissions and limitations # under the License. +from neutron_lib.api.definitions import port as port_def from neutron_lib.api import extensions -from neutron.api.v2 import attributes IP_ALLOCATION = 'ip_allocation' IP_ALLOCATION_IMMEDIATE = 'immediate' @@ -23,7 +23,7 @@ IP_ALLOCATION_NONE = 'none' # Attribute Map RESOURCE_ATTRIBUTE_MAP = { - attributes.PORTS: { + port_def.COLLECTION_NAME: { IP_ALLOCATION: {'allow_post': False, 'allow_put': False, 'is_visible': True, }, diff --git a/neutron/extensions/segment.py b/neutron/extensions/segment.py index 3f2627ea704..422efd8ac61 100644 --- a/neutron/extensions/segment.py +++ b/neutron/extensions/segment.py @@ -17,13 +17,13 @@ import six from neutron_lib.api import converters from neutron_lib.api.definitions import provider_net as providernet +from neutron_lib.api.definitions import subnet as subnet_def from neutron_lib.api import extensions as api_extensions from neutron_lib import constants from neutron_lib.db import constants as db_const from neutron_lib.plugins import directory from neutron.api import extensions -from neutron.api.v2 import attributes from neutron.api.v2 import base SEGMENT = 'segment' @@ -80,7 +80,7 @@ RESOURCE_ATTRIBUTE_MAP = { 'validate': {'type:string_or_none': DESC_LEN}, 'is_visible': True}, }, - attributes.SUBNETS: { + subnet_def.COLLECTION_NAME: { SEGMENT_ID: {'allow_post': True, 'allow_put': False, 'default': None, diff --git a/neutron/extensions/subnet_service_types.py b/neutron/extensions/subnet_service_types.py index 94000767c45..055d18d68e0 100644 --- a/neutron/extensions/subnet_service_types.py +++ b/neutron/extensions/subnet_service_types.py @@ -10,6 +10,7 @@ # License for the specific language governing permissions and limitations # under the License. +from neutron_lib.api.definitions import subnet as subnet_def from neutron_lib.api import extensions from neutron_lib.api import validators from neutron_lib import constants @@ -18,7 +19,6 @@ import six import webob.exc from neutron._i18n import _ -from neutron.api.v2 import attributes # List for service plugins to register their own prefixes @@ -57,7 +57,7 @@ validators.add_validator('type:validate_subnet_service_types', EXTENDED_ATTRIBUTES_2_0 = { - attributes.SUBNETS: { + subnet_def.COLLECTION_NAME: { 'service_types': {'allow_post': True, 'allow_put': True, 'default': constants.ATTR_NOT_SPECIFIED, diff --git a/neutron/extensions/tag.py b/neutron/extensions/tag.py index ab5a3c7a4aa..d8f3a9b3d4a 100644 --- a/neutron/extensions/tag.py +++ b/neutron/extensions/tag.py @@ -13,6 +13,7 @@ import abc +from neutron_lib.api.definitions import network from neutron_lib.api import extensions as api_extensions from neutron_lib.api import validators from neutron_lib import exceptions @@ -23,7 +24,6 @@ import webob.exc from neutron._i18n import _ from neutron.api import extensions -from neutron.api.v2 import attributes from neutron.api.v2 import base from neutron.api.v2 import resource as api_resource from neutron.common import rpc as n_rpc @@ -37,7 +37,7 @@ TAG_PLUGIN_TYPE = 'TAG' TAG_SUPPORTED_RESOURCES = { # We shouldn't add new resources here. If more resources need to be tagged, # we must add them in new extension. - attributes.NETWORKS: attributes.NETWORK, + network.COLLECTION_NAME: network.RESOURCE_NAME, } TAG_ATTRIBUTE_MAP = { diff --git a/neutron/extensions/tag_ext.py b/neutron/extensions/tag_ext.py index e2517e24088..88d2c0aa48a 100644 --- a/neutron/extensions/tag_ext.py +++ b/neutron/extensions/tag_ext.py @@ -11,11 +11,13 @@ # License for the specific language governing permissions and limitations # under the License. +from neutron_lib.api.definitions import port as port_def +from neutron_lib.api.definitions import subnet as subnet_def +from neutron_lib.api.definitions import subnetpool as subnetpool_def from neutron_lib.api import extensions as api_extensions from neutron_lib.plugins import directory from neutron.api import extensions -from neutron.api.v2 import attributes from neutron.api.v2 import base from neutron.api.v2 import resource as api_resource from neutron.extensions import l3 @@ -24,9 +26,9 @@ from neutron.extensions import tag as tag_base TAG_SUPPORTED_RESOURCES = { # We shouldn't add new resources here. If more resources need to be tagged, # we must add them in new extension. - attributes.SUBNETS: attributes.SUBNET, - attributes.PORTS: attributes.PORT, - attributes.SUBNETPOOLS: attributes.SUBNETPOOL, + subnet_def.COLLECTION_NAME: subnet_def.RESOURCE_NAME, + port_def.COLLECTION_NAME: port_def.RESOURCE_NAME, + subnetpool_def.COLLECTION_NAME: subnetpool_def.RESOURCE_NAME, l3.ROUTERS: l3.ROUTER, } diff --git a/neutron/plugins/common/utils.py b/neutron/plugins/common/utils.py index 2af88f47398..638dcb3fe45 100644 --- a/neutron/plugins/common/utils.py +++ b/neutron/plugins/common/utils.py @@ -21,6 +21,9 @@ import contextlib import hashlib from neutron_lib.api import attributes as lib_attrs +from neutron_lib.api.definitions import network as net_def +from neutron_lib.api.definitions import port as port_def +from neutron_lib.api.definitions import subnet as subnet_def from neutron_lib import constants as n_const from neutron_lib import exceptions from oslo_config import cfg @@ -166,21 +169,21 @@ def _fixup_res_dict(context, attr_name, res_dict, check_allow_post=True): def create_network(core_plugin, context, net, check_allow_post=True): - net_data = _fixup_res_dict(context, attributes.NETWORKS, + net_data = _fixup_res_dict(context, net_def.COLLECTION_NAME, net.get('network', {}), check_allow_post=check_allow_post) return core_plugin.create_network(context, {'network': net_data}) def create_subnet(core_plugin, context, subnet, check_allow_post=True): - subnet_data = _fixup_res_dict(context, attributes.SUBNETS, + subnet_data = _fixup_res_dict(context, subnet_def.COLLECTION_NAME, subnet.get('subnet', {}), check_allow_post=check_allow_post) return core_plugin.create_subnet(context, {'subnet': subnet_data}) def create_port(core_plugin, context, port, check_allow_post=True): - port_data = _fixup_res_dict(context, attributes.PORTS, + port_data = _fixup_res_dict(context, port_def.COLLECTION_NAME, port.get('port', {}), check_allow_post=check_allow_post) return core_plugin.create_port(context, {'port': port_data}) diff --git a/neutron/plugins/ml2/plugin.py b/neutron/plugins/ml2/plugin.py index 778080e5269..1305d3847f9 100644 --- a/neutron/plugins/ml2/plugin.py +++ b/neutron/plugins/ml2/plugin.py @@ -15,9 +15,12 @@ from eventlet import greenthread from neutron_lib.api.definitions import extra_dhcp_opt as edo_ext +from neutron_lib.api.definitions import network as net_def +from neutron_lib.api.definitions import port as port_def from neutron_lib.api.definitions import port_security as psec from neutron_lib.api.definitions import portbindings from neutron_lib.api.definitions import provider_net +from neutron_lib.api.definitions import subnet as subnet_def from neutron_lib.api import validators from neutron_lib.callbacks import events from neutron_lib.callbacks import exceptions @@ -48,7 +51,6 @@ from neutron.api.rpc.handlers import dvr_rpc from neutron.api.rpc.handlers import metadata_rpc from neutron.api.rpc.handlers import resources_rpc from neutron.api.rpc.handlers import securitygroups_rpc -from neutron.api.v2 import attributes from neutron.common import constants as n_const from neutron.common import rpc as n_rpc from neutron.common import topics @@ -349,7 +351,7 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, port['status'] = const.PORT_STATUS_DOWN super(Ml2Plugin, self).update_port( mech_context._plugin_context, port_id, - {attributes.PORT: {'status': const.PORT_STATUS_DOWN}}) + {port_def.RESOURCE_NAME: {'status': const.PORT_STATUS_DOWN}}) if port['device_owner'] == const.DEVICE_OWNER_DVR_INTERFACE: binding.vif_type = portbindings.VIF_TYPE_UNBOUND @@ -606,7 +608,7 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, return {} @staticmethod - @resource_extend.extends([attributes.PORTS]) + @resource_extend.extends([port_def.COLLECTION_NAME]) def _ml2_extend_port_dict_binding(port_res, port_db): plugin = directory.get_plugin() # None when called during unit tests for other plugins. @@ -617,21 +619,21 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, # attributes for the resources to add those attributes to the result. @staticmethod - @resource_extend.extends([attributes.NETWORKS]) + @resource_extend.extends([net_def.COLLECTION_NAME]) def _ml2_md_extend_network_dict(result, netdb): plugin = directory.get_plugin() session = plugin._object_session_or_new_session(netdb) plugin.extension_manager.extend_network_dict(session, netdb, result) @staticmethod - @resource_extend.extends([attributes.PORTS]) + @resource_extend.extends([port_def.COLLECTION_NAME]) def _ml2_md_extend_port_dict(result, portdb): plugin = directory.get_plugin() session = plugin._object_session_or_new_session(portdb) plugin.extension_manager.extend_port_dict(session, portdb, result) @staticmethod - @resource_extend.extends([attributes.SUBNETS]) + @resource_extend.extends([subnet_def.COLLECTION_NAME]) def _ml2_md_extend_subnet_dict(result, subnetdb): plugin = directory.get_plugin() session = plugin._object_session_or_new_session(subnetdb) @@ -755,12 +757,12 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, return min(mtus) if mtus else 0 def _before_create_network(self, context, network): - net_data = network[attributes.NETWORK] + net_data = network[net_def.RESOURCE_NAME] registry.notify(resources.NETWORK, events.BEFORE_CREATE, self, context=context, network=net_data) def _create_network_db(self, context, network): - net_data = network[attributes.NETWORK] + net_data = network[net_def.RESOURCE_NAME] tenant_id = net_data['tenant_id'] with db_api.context_manager.writer.using(context): net_db = self.create_network_db(context, network) @@ -820,13 +822,14 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, @utils.transaction_guard @db_api.retry_if_session_inactive() def create_network_bulk(self, context, networks): - objects = self._create_bulk_ml2(attributes.NETWORK, context, networks) + objects = self._create_bulk_ml2( + net_def.RESOURCE_NAME, context, networks) return [obj['result'] for obj in objects] @utils.transaction_guard @db_api.retry_if_session_inactive() def update_network(self, context, id, network): - net_data = network[attributes.NETWORK] + net_data = network[net_def.RESOURCE_NAME] provider._raise_if_updates_provider_attributes(net_data) with db_api.context_manager.writer.using(context): @@ -961,7 +964,7 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, result, net_db, ipam_sub = self._create_subnet_precommit( context, subnet) self.extension_manager.process_create_subnet( - context, subnet[attributes.SUBNET], result) + context, subnet[subnet_def.RESOURCE_NAME], result) network = self._make_network_dict(net_db, context=context) self.type_manager.extend_network_dict_provider(context, network) network[api.MTU] = self._get_network_mtu(network) @@ -997,7 +1000,8 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, @utils.transaction_guard @db_api.retry_if_session_inactive() def create_subnet_bulk(self, context, subnets): - objects = self._create_bulk_ml2(attributes.SUBNET, context, subnets) + objects = self._create_bulk_ml2( + subnet_def.RESOURCE_NAME, context, subnets) return [obj['result'] for obj in objects] @utils.transaction_guard @@ -1007,7 +1011,7 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, updated_subnet, original_subnet = self._update_subnet_precommit( context, id, subnet) self.extension_manager.process_update_subnet( - context, subnet[attributes.SUBNET], updated_subnet) + context, subnet[subnet_def.RESOURCE_NAME], updated_subnet) updated_subnet = self.get_subnet(context, id) mech_context = driver_context.SubnetContext( self, context, updated_subnet, network=None, @@ -1057,7 +1061,7 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, # TODO(yalei) - will be simplified after security group and address pair be # converted to ext driver too. def _portsec_ext_port_create_processing(self, context, port_data, port): - attrs = port[attributes.PORT] + attrs = port[port_def.RESOURCE_NAME] port_security = ((port_data.get(psec.PORTSECURITY) is None) or port_data[psec.PORTSECURITY]) @@ -1091,7 +1095,7 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, provisioning_blocks.DHCP_ENTITY) def _before_create_port(self, context, port): - attrs = port[attributes.PORT] + attrs = port[port_def.RESOURCE_NAME] if not attrs.get('status'): attrs['status'] = const.PORT_STATUS_DOWN @@ -1102,7 +1106,7 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, self._ensure_default_security_group(context, attrs['tenant_id']) def _create_port_db(self, context, port): - attrs = port[attributes.PORT] + attrs = port[port_def.RESOURCE_NAME] with db_api.context_manager.writer.using(context): dhcp_opts = attrs.get(edo_ext.EXTRADHCPOPTS, []) port_db = self.create_port_db(context, port) @@ -1166,7 +1170,7 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, @utils.transaction_guard @db_api.retry_if_session_inactive() def create_port_bulk(self, context, ports): - objects = self._create_bulk_ml2(attributes.PORT, context, ports) + objects = self._create_bulk_ml2(port_def.RESOURCE_NAME, context, ports) return [obj['result'] for obj in objects] # TODO(yalei) - will be simplified after security group and address pair be @@ -1215,7 +1219,7 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, @utils.transaction_guard @db_api.retry_if_session_inactive() def update_port(self, context, id, port): - attrs = port[attributes.PORT] + attrs = port[port_def.RESOURCE_NAME] need_port_update_notify = False bound_mech_contexts = [] with db_api.context_manager.writer.using(context): @@ -1371,7 +1375,7 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, @utils.transaction_guard @db_api.retry_if_session_inactive() def update_distributed_port_binding(self, context, id, port): - attrs = port[attributes.PORT] + attrs = port[port_def.RESOURCE_NAME] host = attrs and attrs.get(portbindings.HOST_ID) host_set = validators.is_attr_set(host) diff --git a/neutron/services/auto_allocate/db.py b/neutron/services/auto_allocate/db.py index 48910ce573b..d8f6fdf97b8 100644 --- a/neutron/services/auto_allocate/db.py +++ b/neutron/services/auto_allocate/db.py @@ -14,6 +14,7 @@ # License for the specific language governing permissions and limitations # under the License. +from neutron_lib.api.definitions import network as net_def from neutron_lib.callbacks import events from neutron_lib.callbacks import registry from neutron_lib.callbacks import resources @@ -23,7 +24,6 @@ from neutron_lib.plugins import directory from oslo_log import log as logging from neutron._i18n import _, _LE -from neutron.api.v2 import attributes from neutron.common import exceptions as c_exc from neutron.db import _resource_extend as resource_extend from neutron.db import _utils as db_utils @@ -108,7 +108,7 @@ class AutoAllocatedTopologyMixin(common_db_mixin.CommonDbMixin): return self._l3_plugin @staticmethod - @resource_extend.extends([attributes.NETWORKS]) + @resource_extend.extends([net_def.COLLECTION_NAME]) def _extend_external_network_default(net_res, net_db): """Add is_default field to 'show' response.""" if net_db.external is not None: diff --git a/neutron/services/segments/plugin.py b/neutron/services/segments/plugin.py index 67242c03c22..e6465c4ab01 100644 --- a/neutron/services/segments/plugin.py +++ b/neutron/services/segments/plugin.py @@ -16,6 +16,9 @@ from keystoneauth1 import loading as ks_loading import netaddr +from neutron_lib.api.definitions import network as net_def +from neutron_lib.api.definitions import port as port_def +from neutron_lib.api.definitions import subnet as subnet_def from neutron_lib.callbacks import events from neutron_lib.callbacks import registry from neutron_lib.callbacks import resources @@ -27,7 +30,6 @@ from oslo_config import cfg from oslo_log import log from neutron._i18n import _, _LE, _LI -from neutron.api.v2 import attributes from neutron.common import exceptions as n_exc from neutron.db import _resource_extend as resource_extend from neutron.db import api as db_api @@ -61,7 +63,7 @@ class Plugin(db.SegmentDbMixin, segment.SegmentPluginBase): self.nova_updater = NovaSegmentNotifier() @staticmethod - @resource_extend.extends([attributes.NETWORKS]) + @resource_extend.extends([net_def.COLLECTION_NAME]) def _extend_network_dict_binding(network_res, network_db): if not directory.get_plugin('segments'): return @@ -73,12 +75,12 @@ class Plugin(db.SegmentDbMixin, segment.SegmentPluginBase): network_res[l2_adjacency.L2_ADJACENCY] = is_adjacent @staticmethod - @resource_extend.extends([attributes.SUBNETS]) + @resource_extend.extends([subnet_def.COLLECTION_NAME]) def _extend_subnet_dict_binding(subnet_res, subnet_db): subnet_res['segment_id'] = subnet_db.get('segment_id') @staticmethod - @resource_extend.extends([attributes.PORTS]) + @resource_extend.extends([port_def.COLLECTION_NAME]) def _extend_port_dict_binding(port_res, port_db): if not directory.get_plugin('segments'): return diff --git a/neutron/services/tag/tag_plugin.py b/neutron/services/tag/tag_plugin.py index 5e423f7bf2a..afeae84b789 100644 --- a/neutron/services/tag/tag_plugin.py +++ b/neutron/services/tag/tag_plugin.py @@ -14,11 +14,14 @@ import functools +from neutron_lib.api.definitions import network as net_def +from neutron_lib.api.definitions import port as port_def +from neutron_lib.api.definitions import subnet as subnet_def +from neutron_lib.api.definitions import subnetpool as subnetpool_def from neutron_lib.plugins import directory from oslo_log import helpers as log_helpers from sqlalchemy.orm import exc -from neutron.api.v2 import attributes from neutron.db import _model_query as model_query from neutron.db import _resource_extend as resource_extend from neutron.db import api as db_api @@ -36,10 +39,10 @@ from neutron.objects import tag as tag_obj resource_model_map = { # When we'll add other resources, we must add new extension for them # if we don't have better discovery mechanism instead of it. - attributes.NETWORKS: models_v2.Network, - attributes.SUBNETS: models_v2.Subnet, - attributes.PORTS: models_v2.Port, - attributes.SUBNETPOOLS: models_v2.SubnetPool, + net_def.COLLECTION_NAME: models_v2.Network, + subnet_def.COLLECTION_NAME: models_v2.Subnet, + port_def.COLLECTION_NAME: models_v2.Port, + subnetpool_def.COLLECTION_NAME: models_v2.SubnetPool, l3_ext.ROUTERS: l3_model.Router, } diff --git a/neutron/services/trunk/plugin.py b/neutron/services/trunk/plugin.py index a469fbbc10e..f5043de61fd 100644 --- a/neutron/services/trunk/plugin.py +++ b/neutron/services/trunk/plugin.py @@ -14,6 +14,7 @@ import copy +from neutron_lib.api.definitions import port as port_def from neutron_lib.api.definitions import portbindings from neutron_lib.callbacks import events from neutron_lib.callbacks import registry @@ -24,7 +25,6 @@ from neutron_lib.services import base as service_base from oslo_log import log as logging from oslo_utils import uuidutils -from neutron.api.v2 import attributes from neutron.db import _resource_extend as resource_extend from neutron.db import api as db_api from neutron.db import common_db_mixin @@ -66,7 +66,7 @@ class TrunkPlugin(service_base.ServicePluginBase, self.check_compatibility() @staticmethod - @resource_extend.extends([attributes.PORTS]) + @resource_extend.extends([port_def.COLLECTION_NAME]) def _extend_port_trunk_details(port_res, port_db): """Add trunk details to a port.""" if port_db.trunk_port: diff --git a/neutron/tests/unit/extensions/test_data_plane_status.py b/neutron/tests/unit/extensions/test_data_plane_status.py index edbc0a0fa3c..767a2813346 100644 --- a/neutron/tests/unit/extensions/test_data_plane_status.py +++ b/neutron/tests/unit/extensions/test_data_plane_status.py @@ -15,9 +15,9 @@ from webob import exc as web_exc from neutron_lib.api.definitions import data_plane_status as dps_lib +from neutron_lib.api.definitions import port as port_def from neutron_lib import constants -from neutron.api.v2 import attributes as attrs from neutron.db import _resource_extend as resource_extend from neutron.db import data_plane_status_db as dps_db from neutron.db import db_base_plugin_v2 @@ -48,7 +48,7 @@ class DataPlaneStatusExtensionTestPlugin(db_base_plugin_v2.NeutronDbPluginV2, supported_extension_aliases = ["data-plane-status"] @staticmethod - @resource_extend.extends([attrs.PORTS]) + @resource_extend.extends([port_def.COLLECTION_NAME]) def _extend_port_data_plane_status(port_res, port_db): return dps_db.DataPlaneStatusMixin._extend_port_data_plane_status( port_res, port_db) @@ -77,7 +77,7 @@ class DataPlaneStatusExtensionTestCase( def test_update_port_data_plane_status(self): with self.port() as port: data = {'port': {'data_plane_status': constants.ACTIVE}} - req = self.new_update_request(attrs.PORTS, + req = self.new_update_request(port_def.COLLECTION_NAME, data, port['port']['id']) res = req.get_response(self.api) @@ -87,7 +87,8 @@ class DataPlaneStatusExtensionTestCase( def test_port_create_data_plane_status_default_none(self): with self.port(name='port1') as port: - req = self.new_show_request(attrs.PORTS, port['port']['id']) + req = self.new_show_request( + port_def.COLLECTION_NAME, port['port']['id']) res = self.deserialize(self.fmt, req.get_response(self.api)) self.assertIsNone(res['port'][dps_lib.DATA_PLANE_STATUS]) @@ -102,10 +103,10 @@ class DataPlaneStatusExtensionTestCase( def test_port_update_preserves_data_plane_status(self): with self.port(name='port1') as port: - res = self._update(attrs.PORTS, port['port']['id'], + res = self._update(port_def.COLLECTION_NAME, port['port']['id'], {'port': {dps_lib.DATA_PLANE_STATUS: constants.ACTIVE}}) - res = self._update(attrs.PORTS, port['port']['id'], + res = self._update(port_def.COLLECTION_NAME, port['port']['id'], {'port': {'name': 'port2'}}) self.assertEqual(res['port']['name'], 'port2') self.assertEqual(res['port'][dps_lib.DATA_PLANE_STATUS], @@ -113,7 +114,7 @@ class DataPlaneStatusExtensionTestCase( def test_port_update_with_invalid_data_plane_status(self): with self.port(name='port1') as port: - self._update(attrs.PORTS, port['port']['id'], + self._update(port_def.COLLECTION_NAME, port['port']['id'], {'port': {dps_lib.DATA_PLANE_STATUS: "abc"}}, web_exc.HTTPBadRequest.code) @@ -121,7 +122,7 @@ class DataPlaneStatusExtensionTestCase( expect_notify = set(['port.update.start', 'port.update.end']) with self.port(name='port1') as port: - self._update(attrs.PORTS, port['port']['id'], + self._update(port_def.COLLECTION_NAME, port['port']['id'], {'port': {dps_lib.DATA_PLANE_STATUS: constants.ACTIVE}}) notify = set(n['event_type'] for n in fake_notifier.NOTIFICATIONS) diff --git a/neutron/tests/unit/plugins/ml2/drivers/l2pop/test_mech_driver.py b/neutron/tests/unit/plugins/ml2/drivers/l2pop/test_mech_driver.py index def682a6341..5b93a3aa582 100644 --- a/neutron/tests/unit/plugins/ml2/drivers/l2pop/test_mech_driver.py +++ b/neutron/tests/unit/plugins/ml2/drivers/l2pop/test_mech_driver.py @@ -15,6 +15,7 @@ import mock +from neutron_lib.api.definitions import port as port_def from neutron_lib.api.definitions import portbindings from neutron_lib.api.definitions import provider_net as pnet from neutron_lib import constants @@ -25,7 +26,6 @@ from neutron_lib.plugins import directory from oslo_serialization import jsonutils import testtools -from neutron.api.v2 import attributes from neutron.common import constants as n_const from neutron.common import topics from neutron.db import agents_db @@ -237,7 +237,7 @@ class TestL2PopulationRpcTestCase(test_plugin.Ml2PluginV2TestCase): else: port[portbindings.HOST_ID] = self.agent2['host'] plugin.update_port(self.adminContext, port['id'], - {attributes.PORT: port}) + {port_def.RESOURCE_NAME: port}) def _get_first_interface(self, net_id, router_id): plugin = directory.get_plugin() diff --git a/neutron/tests/unit/plugins/ml2/extensions/test_data_plane_status.py b/neutron/tests/unit/plugins/ml2/extensions/test_data_plane_status.py index e098167e704..25abbd867eb 100644 --- a/neutron/tests/unit/plugins/ml2/extensions/test_data_plane_status.py +++ b/neutron/tests/unit/plugins/ml2/extensions/test_data_plane_status.py @@ -15,11 +15,11 @@ import mock from neutron_lib.api.definitions import data_plane_status as dps_lib +from neutron_lib.api.definitions import port as port_def from neutron_lib import constants from neutron_lib import context from neutron_lib.plugins import directory -from neutron.api.v2 import attributes as attrs from neutron.plugins.ml2 import config from neutron.plugins.ml2.extensions import data_plane_status from neutron.tests.unit.plugins.ml2 import test_plugin @@ -47,7 +47,8 @@ class DataPlaneStatusSML2ExtDriverTestCase(test_plugin.Ml2PluginV2TestCase): def test_show_port_has_data_plane_status(self): with self.port() as port: - req = self.new_show_request(attrs.PORTS, port['port']['id'], + req = self.new_show_request(port_def.COLLECTION_NAME, + port['port']['id'], self.fmt) p = self.deserialize(self.fmt, req.get_response(self.api)) self.assertIsNone(p['port'][dps_lib.DATA_PLANE_STATUS]) @@ -57,7 +58,8 @@ class DataPlaneStatusSML2ExtDriverTestCase(test_plugin.Ml2PluginV2TestCase): admin_ctx = context.get_admin_context() p = {'port': {dps_lib.DATA_PLANE_STATUS: constants.ACTIVE}} self.plugin.update_port(admin_ctx, port['port']['id'], p) - req = self.new_show_request(attrs.PORTS, port['port']['id']) + req = self.new_show_request( + port_def.COLLECTION_NAME, port['port']['id']) res = self.deserialize(self.fmt, req.get_response(self.api)) self.assertEqual(res['port'][dps_lib.DATA_PLANE_STATUS], constants.ACTIVE)