From 062ef79381c744f7bb9a8874bf33ac35877161f0 Mon Sep 17 00:00:00 2001 From: Boden R Date: Wed, 7 Feb 2018 14:43:34 -0700 Subject: [PATCH] use is_extension_supported from neutron-lib The is_extension_supported function now lives in neutron-lib. This patch removes the function from neutron and uses lib's version instead. NeutronLibImpact Change-Id: Iccb72e00f85043b3dff0299df7eb1279655e313e --- .../api/rpc/agentnotifiers/dhcp_rpc_agent_api.py | 4 ++-- neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py | 4 ++-- .../rpc/agentnotifiers/metering_rpc_agent_api.py | 4 ++-- neutron/api/rpc/handlers/dhcp_rpc.py | 3 ++- neutron/api/rpc/handlers/l3_rpc.py | 10 +++++----- neutron/common/utils.py | 5 ----- neutron/db/availability_zone/router.py | 6 +++--- neutron/db/dns_db.py | 14 +++++++------- neutron/db/l3_agentschedulers_db.py | 6 +++--- neutron/db/l3_db.py | 13 +++++++------ neutron/db/l3_dvrscheduler_db.py | 4 +++- neutron/db/l3_hamode_db.py | 3 ++- neutron/db/metering/metering_rpc.py | 4 ++-- neutron/plugins/ml2/plugin.py | 5 +++-- neutron/services/trunk/rules.py | 10 +++++----- neutron/services/trunk/utils.py | 5 ++--- .../rpc/agentnotifiers/test_dhcp_rpc_agent_api.py | 4 ++-- 17 files changed, 52 insertions(+), 52 deletions(-) diff --git a/neutron/api/rpc/agentnotifiers/dhcp_rpc_agent_api.py b/neutron/api/rpc/agentnotifiers/dhcp_rpc_agent_api.py index 8575b5276c0..5903d98c233 100644 --- a/neutron/api/rpc/agentnotifiers/dhcp_rpc_agent_api.py +++ b/neutron/api/rpc/agentnotifiers/dhcp_rpc_agent_api.py @@ -13,6 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +from neutron_lib.api import extensions from neutron_lib.callbacks import events from neutron_lib.callbacks import registry from neutron_lib.callbacks import resources @@ -24,7 +25,6 @@ import oslo_messaging from neutron.common import rpc as n_rpc from neutron.common import topics -from neutron.common import utils LOG = logging.getLogger(__name__) @@ -148,7 +148,7 @@ class DhcpAgentNotifyAPI(object): def _notify_agents(self, context, method, payload, network_id): """Notify all the agents that are hosting the network.""" # fanout is required as we do not know who is "listening" - no_agents = not utils.is_extension_supported( + no_agents = not extensions.is_extension_supported( self.plugin, constants.DHCP_AGENT_SCHEDULER_EXT_ALIAS) fanout_required = method == 'network_delete_end' or no_agents diff --git a/neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py b/neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py index cde4c77c008..1a2a91cdd81 100644 --- a/neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py +++ b/neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py @@ -15,6 +15,7 @@ import random +from neutron_lib.api import extensions from neutron_lib import constants from neutron_lib.plugins import constants as plugin_constants from neutron_lib.plugins import directory @@ -24,7 +25,6 @@ import oslo_messaging from neutron.api.rpc.agentnotifiers import utils as ag_utils from neutron.common import rpc as n_rpc from neutron.common import topics -from neutron.common import utils LOG = logging.getLogger(__name__) @@ -90,7 +90,7 @@ class L3AgentNotifyAPI(object): LOG.error('No plugin for L3 routing registered. Cannot notify ' 'agents with the message %s', method) return - if utils.is_extension_supported( + if extensions.is_extension_supported( plugin, constants.L3_AGENT_SCHEDULER_EXT_ALIAS): adminContext = (context.is_admin and context or context.elevated()) diff --git a/neutron/api/rpc/agentnotifiers/metering_rpc_agent_api.py b/neutron/api/rpc/agentnotifiers/metering_rpc_agent_api.py index 65c1977630d..0eab45b3685 100644 --- a/neutron/api/rpc/agentnotifiers/metering_rpc_agent_api.py +++ b/neutron/api/rpc/agentnotifiers/metering_rpc_agent_api.py @@ -12,6 +12,7 @@ # License for the specific language governing permissions and limitations # under the License. +from neutron_lib.api import extensions from neutron_lib import constants from neutron_lib.plugins import constants as plugin_constants from neutron_lib.plugins import directory @@ -20,7 +21,6 @@ import oslo_messaging from neutron.common import rpc as n_rpc from neutron.common import topics -from neutron.common import utils from neutron.db import agentschedulers_db LOG = logging.getLogger(__name__) @@ -81,7 +81,7 @@ class MeteringAgentNotifyAPI(object): def _notification(self, context, method, routers): """Notify all the agents that are hosting the routers.""" plugin = directory.get_plugin(plugin_constants.L3) - if utils.is_extension_supported( + if extensions.is_extension_supported( plugin, constants.L3_AGENT_SCHEDULER_EXT_ALIAS): self._agent_notification(context, method, routers) else: diff --git a/neutron/api/rpc/handlers/dhcp_rpc.py b/neutron/api/rpc/handlers/dhcp_rpc.py index 93db1228c65..20f918622b9 100644 --- a/neutron/api/rpc/handlers/dhcp_rpc.py +++ b/neutron/api/rpc/handlers/dhcp_rpc.py @@ -18,6 +18,7 @@ import itertools import operator from neutron_lib.api.definitions import portbindings +from neutron_lib.api import extensions from neutron_lib.callbacks import resources from neutron_lib import constants from neutron_lib import exceptions @@ -80,7 +81,7 @@ class DhcpRpcCallback(object): """Retrieve and return a list of the active networks.""" host = kwargs.get('host') plugin = directory.get_plugin() - if utils.is_extension_supported( + if extensions.is_extension_supported( plugin, constants.DHCP_AGENT_SCHEDULER_EXT_ALIAS): if cfg.CONF.network_auto_schedule: plugin.auto_schedule_networks(context, host) diff --git a/neutron/api/rpc/handlers/l3_rpc.py b/neutron/api/rpc/handlers/l3_rpc.py index c6ddb69d8ea..3297cec0e99 100644 --- a/neutron/api/rpc/handlers/l3_rpc.py +++ b/neutron/api/rpc/handlers/l3_rpc.py @@ -14,6 +14,7 @@ # limitations under the License. from neutron_lib.api.definitions import portbindings +from neutron_lib.api import extensions from neutron_lib import constants from neutron_lib import context as neutron_context from neutron_lib import exceptions @@ -25,7 +26,6 @@ from oslo_log import log as logging import oslo_messaging from neutron.common import constants as n_const -from neutron.common import utils from neutron.db import api as db_api @@ -74,7 +74,7 @@ class L3RpcCallback(object): that the port is indeed ACTIVE by reacting to the port update and calling update_device_up. """ - if not utils.is_extension_supported( + if not extensions.is_extension_supported( self.plugin, constants.PORT_BINDING_EXT_ALIAS): return device_filter = { @@ -98,7 +98,7 @@ class L3RpcCallback(object): This will autoschedule unhosted routers to l3 agent on and then return all ids of routers scheduled to it. """ - if utils.is_extension_supported( + if extensions.is_extension_supported( self.l3plugin, constants.L3_AGENT_SCHEDULER_EXT_ALIAS): if cfg.CONF.router_auto_schedule: self.l3plugin.auto_schedule_routers(context, host) @@ -116,14 +116,14 @@ class L3RpcCallback(object): router_ids = kwargs.get('router_ids') host = kwargs.get('host') context = neutron_context.get_admin_context() - if utils.is_extension_supported( + if extensions.is_extension_supported( self.l3plugin, constants.L3_AGENT_SCHEDULER_EXT_ALIAS): routers = ( self.l3plugin.list_active_sync_routers_on_active_l3_agent( context, host, router_ids)) else: routers = self.l3plugin.get_sync_data(context, router_ids) - if utils.is_extension_supported( + if extensions.is_extension_supported( self.plugin, constants.PORT_BINDING_EXT_ALIAS): self._ensure_host_set_on_ports(context, host, routers) return routers diff --git a/neutron/common/utils.py b/neutron/common/utils.py index 04b9e77aa56..1ad6d5c7cf5 100644 --- a/neutron/common/utils.py +++ b/neutron/common/utils.py @@ -121,11 +121,6 @@ def get_first_host_ip(net, ip_version): return str(netaddr.IPAddress(net.first + 1, ip_version)) -def is_extension_supported(plugin, ext_alias): - return ext_alias in getattr( - plugin, "supported_extension_aliases", []) - - def log_opt_values(log): cfg.CONF.log_opt_values(log, logging.DEBUG) diff --git a/neutron/db/availability_zone/router.py b/neutron/db/availability_zone/router.py index 9870c144402..9a5f157f9da 100644 --- a/neutron/db/availability_zone/router.py +++ b/neutron/db/availability_zone/router.py @@ -13,13 +13,13 @@ from neutron_lib.api.definitions import availability_zone as az_def from neutron_lib.api.definitions import l3 as l3_apidef +from neutron_lib.api import extensions from neutron_lib.callbacks import events from neutron_lib.callbacks import registry from neutron_lib.callbacks import resources from neutron_lib.plugins import constants from neutron_lib.plugins import directory -from neutron.common import utils from neutron.db import _resource_extend as resource_extend from neutron.db import l3_attrs_db @@ -33,8 +33,8 @@ class RouterAvailabilityZoneMixin(l3_attrs_db.ExtraAttributesMixin): @resource_extend.extends([l3_apidef.ROUTERS]) def _add_az_to_response(router_res, router_db): l3_plugin = directory.get_plugin(constants.L3) - if not utils.is_extension_supported(l3_plugin, - 'router_availability_zone'): + if not extensions.is_extension_supported( + l3_plugin, 'router_availability_zone'): return router_res['availability_zones'] = ( l3_plugin.get_router_availability_zones(router_db)) diff --git a/neutron/db/dns_db.py b/neutron/db/dns_db.py index 93091d8c0b9..d1e887815bf 100644 --- a/neutron/db/dns_db.py +++ b/neutron/db/dns_db.py @@ -15,6 +15,7 @@ from neutron_lib.api.definitions import dns as dns_apidef from neutron_lib.api.definitions import l3 as l3_apidef +from neutron_lib.api import extensions from neutron_lib.api import validators from neutron_lib import exceptions as n_exc from neutron_lib.exceptions import dns as dns_exc @@ -22,7 +23,6 @@ from oslo_config import cfg from oslo_log import log as logging from neutron._i18n import _ -from neutron.common import utils from neutron.db import _resource_extend as resource_extend from neutron.objects import floatingip as fip_obj from neutron.objects import network @@ -118,8 +118,8 @@ class DNSDbMixin(object): def _process_dns_floatingip_update_precommit(self, context, floatingip_data): # expects to be called within a plugin's session - if not utils.is_extension_supported(self._core_plugin, - dns_apidef.ALIAS): + if not extensions.is_extension_supported( + self._core_plugin, dns_apidef.ALIAS): return if not self.dns_driver: return @@ -175,11 +175,11 @@ class DNSDbMixin(object): [floatingip_data['floating_ip_address']]) def _process_dns_floatingip_delete(self, context, floatingip_data): - if not utils.is_extension_supported(self._core_plugin, - dns_apidef.ALIAS): + if not extensions.is_extension_supported( + self._core_plugin, dns_apidef.ALIAS): return - dns_data_db = fip_obj.FloatingIPDNS.get_object(context, - floatingip_id=floatingip_data['id']) + dns_data_db = fip_obj.FloatingIPDNS.get_object( + context, floatingip_id=floatingip_data['id']) if dns_data_db: self._delete_floatingip_from_external_dns_service( context, dns_data_db['published_dns_domain'], diff --git a/neutron/db/l3_agentschedulers_db.py b/neutron/db/l3_agentschedulers_db.py index 077eba662bd..5bcbe3cce80 100644 --- a/neutron/db/l3_agentschedulers_db.py +++ b/neutron/db/l3_agentschedulers_db.py @@ -13,6 +13,7 @@ # License for the specific language governing permissions and limitations # under the License. +from neutron_lib.api import extensions from neutron_lib import constants from neutron_lib.plugins import constants as plugin_constants from neutron_lib.plugins import directory @@ -22,7 +23,6 @@ from oslo_log import log as logging import oslo_messaging from neutron.agent.common import utils as agent_utils -from neutron.common import utils as n_utils from neutron.conf.db import l3_agentschedulers_db from neutron.db import agentschedulers_db from neutron.db.models import l3agent as rb_model @@ -274,8 +274,8 @@ class L3AgentSchedulerDbMixin(l3agentscheduler.L3AgentSchedulerPluginBase, def _get_active_l3_agent_routers_sync_data(self, context, host, agent, router_ids): - if n_utils.is_extension_supported(self, - constants.L3_HA_MODE_EXT_ALIAS): + if extensions.is_extension_supported( + self, constants.L3_HA_MODE_EXT_ALIAS): return self.get_ha_sync_data_for_host(context, host, agent, router_ids=router_ids, active=True) diff --git a/neutron/db/l3_db.py b/neutron/db/l3_db.py index dd4689cca4d..bd6b21b94f4 100644 --- a/neutron/db/l3_db.py +++ b/neutron/db/l3_db.py @@ -18,6 +18,7 @@ import random import netaddr from neutron_lib.api.definitions import external_net as extnet_apidef from neutron_lib.api.definitions import l3 as l3_apidef +from neutron_lib.api import extensions from neutron_lib.api import validators from neutron_lib.callbacks import events from neutron_lib.callbacks import exceptions @@ -108,17 +109,17 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase, def _is_dns_integration_supported(self): if self._dns_integration is None: self._dns_integration = ( - utils.is_extension_supported(self._core_plugin, - 'dns-integration') or - utils.is_extension_supported(self._core_plugin, - 'dns-domain-ports')) + extensions.is_extension_supported( + self._core_plugin, 'dns-integration') or + extensions.is_extension_supported( + self._core_plugin, 'dns-domain-ports')) return self._dns_integration @property def _is_fip_qos_supported(self): if self._fip_qos is None: # Check L3 service plugin - self._fip_qos = utils.is_extension_supported( + self._fip_qos = extensions.is_extension_supported( self, qos_fip.FIP_QOS_ALIAS) return self._fip_qos @@ -327,7 +328,7 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase, # first get plugin supporting l3 agent scheduling # (either l3 service plugin or core_plugin) l3_plugin = directory.get_plugin(plugin_constants.L3) - if (not utils.is_extension_supported( + if (not extensions.is_extension_supported( l3_plugin, constants.L3_AGENT_SCHEDULER_EXT_ALIAS) or l3_plugin.router_scheduler is None): diff --git a/neutron/db/l3_dvrscheduler_db.py b/neutron/db/l3_dvrscheduler_db.py index b286bdc25f6..a657da612cb 100644 --- a/neutron/db/l3_dvrscheduler_db.py +++ b/neutron/db/l3_dvrscheduler_db.py @@ -14,6 +14,7 @@ # under the License. from neutron_lib.api.definitions import portbindings +from neutron_lib.api import extensions from neutron_lib.callbacks import events from neutron_lib.callbacks import registry from neutron_lib.callbacks import resources @@ -226,7 +227,8 @@ class L3_DVRsch_db_mixin(l3agent_sch_db.L3AgentSchedulerDbMixin): def _get_active_l3_agent_routers_sync_data(self, context, host, agent, router_ids): - if n_utils.is_extension_supported(self, n_const.L3_HA_MODE_EXT_ALIAS): + if extensions.is_extension_supported( + self, n_const.L3_HA_MODE_EXT_ALIAS): return self.get_ha_sync_data_for_host(context, host, agent, router_ids=router_ids, active=True) diff --git a/neutron/db/l3_hamode_db.py b/neutron/db/l3_hamode_db.py index 646a7be5f84..50310cd20fa 100644 --- a/neutron/db/l3_hamode_db.py +++ b/neutron/db/l3_hamode_db.py @@ -19,6 +19,7 @@ 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 extensions from neutron_lib.api import validators from neutron_lib.callbacks import events from neutron_lib.callbacks import registry @@ -629,7 +630,7 @@ class L3_HA_NAT_db_mixin(l3_dvr_db.L3_NAT_with_dvr_db_mixin, agent_mode in [constants.L3_AGENT_MODE_DVR_SNAT, constants.L3_AGENT_MODE_DVR, constants.L3_AGENT_MODE_DVR_NO_EXTERNAL]) - if (dvr_agent_mode and n_utils.is_extension_supported( + if (dvr_agent_mode and extensions.is_extension_supported( self, constants.L3_DISTRIBUTED_EXT_ALIAS)): # DVR has to be handled differently sync_data = self._get_dvr_sync_data(context, host, agent, diff --git a/neutron/db/metering/metering_rpc.py b/neutron/db/metering/metering_rpc.py index e699dbdbd10..07a2477ea0d 100644 --- a/neutron/db/metering/metering_rpc.py +++ b/neutron/db/metering/metering_rpc.py @@ -12,13 +12,13 @@ # License for the specific language governing permissions and limitations # under the License. +from neutron_lib.api import extensions from neutron_lib import constants as consts from neutron_lib.plugins import constants as plugin_constants from neutron_lib.plugins import directory from oslo_log import log as logging import oslo_messaging -from neutron.common import utils LOG = logging.getLogger(__name__) @@ -37,7 +37,7 @@ class MeteringRpcCallbacks(object): metering_data = self.meter_plugin.get_sync_data_metering(context) host = kwargs.get('host') - if not utils.is_extension_supported( + if not extensions.is_extension_supported( l3_plugin, consts.L3_AGENT_SCHEDULER_EXT_ALIAS) or not host: return metering_data else: diff --git a/neutron/plugins/ml2/plugin.py b/neutron/plugins/ml2/plugin.py index 06f0d6cd547..ba7c91e3083 100644 --- a/neutron/plugins/ml2/plugin.py +++ b/neutron/plugins/ml2/plugin.py @@ -24,6 +24,7 @@ from neutron_lib.api.definitions import port_security as psec from neutron_lib.api.definitions import portbindings from neutron_lib.api.definitions import subnet as subnet_def from neutron_lib.api.definitions import vlantransparent as vlan_apidef +from neutron_lib.api import extensions from neutron_lib.api import validators from neutron_lib.api.validators import availability_zone as az_validator from neutron_lib.callbacks import events @@ -811,7 +812,7 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, self.type_manager.extend_network_dict_provider(context, result) # Update the transparent vlan if configured - if utils.is_extension_supported(self, 'vlan-transparent'): + if extensions.is_extension_supported(self, 'vlan-transparent'): vlt = vlan_apidef.get_vlan_transparent(net_data) net_db['vlan_transparent'] = vlt result['vlan_transparent'] = vlt @@ -1272,7 +1273,7 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, raise psec_exc.PortSecurityAndIPRequiredForSecurityGroups() elif (not self._check_update_deletes_security_groups(port)): - if not utils.is_extension_supported(self, 'security-group'): + if not extensions.is_extension_supported(self, 'security-group'): return # Update did not have security groups passed in. Check # that port does not have any security groups already on it. diff --git a/neutron/services/trunk/rules.py b/neutron/services/trunk/rules.py index b1ec8ed4373..c2df3fb22e9 100644 --- a/neutron/services/trunk/rules.py +++ b/neutron/services/trunk/rules.py @@ -17,13 +17,13 @@ import collections from neutron_lib.api import converters from neutron_lib.api.definitions import portbindings from neutron_lib.api.definitions import provider_net as provider +from neutron_lib.api import extensions from neutron_lib.api import validators from neutron_lib import exceptions as n_exc from neutron_lib.plugins import directory from neutron_lib.plugins.ml2 import api from neutron._i18n import _ -from neutron.common import utils as n_utils from neutron.objects import trunk as trunk_objects from neutron.services.trunk import constants from neutron.services.trunk import exceptions as trunk_exc @@ -200,8 +200,8 @@ class SubPortsValidator(object): core_plugin = directory.get_plugin() if (any_has_inherit and - not n_utils.is_extension_supported(core_plugin, - provider.ALIAS)): + not extensions.is_extension_supported( + core_plugin, provider.ALIAS)): msg = _("Cannot accept segmentation type %s") % constants.INHERIT raise n_exc.InvalidInput(error_message=msg) @@ -223,7 +223,7 @@ class SubPortsValidator(object): # To speed up the request, record the network MTU for each # subport to avoid hitting the DB more than necessary. Do # that only if the extension is available. - if n_utils.is_extension_supported(core_plugin, 'net-mtu'): + if extensions.is_extension_supported(core_plugin, 'net-mtu'): subport_mtus[port['port_id']] = net[api.MTU] return subport_mtus @@ -235,7 +235,7 @@ class SubPortsValidator(object): """ core_plugin = directory.get_plugin() - if not n_utils.is_extension_supported(core_plugin, 'net-mtu'): + if not extensions.is_extension_supported(core_plugin, 'net-mtu'): return try: diff --git a/neutron/services/trunk/utils.py b/neutron/services/trunk/utils.py index bcd69b0eafa..0500dfa5fcc 100644 --- a/neutron/services/trunk/utils.py +++ b/neutron/services/trunk/utils.py @@ -12,16 +12,15 @@ # License for the specific language governing permissions and limitations # under the License. +from neutron_lib.api import extensions from neutron_lib.plugins import directory -from neutron.common import utils - def get_agent_types_by_host(context, host): """Return the agent types registered on the host.""" agent_types = [] core_plugin = directory.get_plugin() - if utils.is_extension_supported(core_plugin, 'agent'): + if extensions.is_extension_supported(core_plugin, 'agent'): agents = core_plugin.get_agents( context.elevated(), filters={'host': [host]}) agent_types = [a['agent_type'] for a in agents] diff --git a/neutron/tests/unit/api/rpc/agentnotifiers/test_dhcp_rpc_agent_api.py b/neutron/tests/unit/api/rpc/agentnotifiers/test_dhcp_rpc_agent_api.py index b12844c32bd..26568418157 100644 --- a/neutron/tests/unit/api/rpc/agentnotifiers/test_dhcp_rpc_agent_api.py +++ b/neutron/tests/unit/api/rpc/agentnotifiers/test_dhcp_rpc_agent_api.py @@ -16,6 +16,7 @@ import datetime import mock +from neutron_lib.api import extensions from neutron_lib.callbacks import events from neutron_lib.callbacks import registry from neutron_lib.callbacks import resources @@ -24,7 +25,6 @@ from oslo_utils import timeutils from oslo_utils import uuidutils from neutron.api.rpc.agentnotifiers import dhcp_rpc_agent_api -from neutron.common import utils from neutron.db.agentschedulers_db import cfg from neutron.objects import agent as agent_obj from neutron.tests import base @@ -37,7 +37,7 @@ class TestDhcpAgentNotifyAPI(base.BaseTestCase): self.notifier = ( dhcp_rpc_agent_api.DhcpAgentNotifyAPI(plugin=mock.Mock())) - mock_util_p = mock.patch.object(utils, 'is_extension_supported') + mock_util_p = mock.patch.object(extensions, 'is_extension_supported') mock_log_p = mock.patch.object(dhcp_rpc_agent_api, 'LOG') mock_fanout_p = mock.patch.object(self.notifier, '_fanout_message') mock_cast_p = mock.patch.object(self.notifier, '_cast_message')