Merge "Only store segmenthostmapping when enable segment plugin"
This commit is contained in:
commit
a7ecc991a6
|
@ -23,6 +23,7 @@ from neutron_lib.db import utils as db_utils
|
||||||
from neutron_lib import exceptions as n_exc
|
from neutron_lib import exceptions as n_exc
|
||||||
from neutron_lib.plugins import directory
|
from neutron_lib.plugins import directory
|
||||||
from oslo_concurrency import lockutils
|
from oslo_concurrency import lockutils
|
||||||
|
from oslo_config import cfg
|
||||||
from oslo_db import exception as db_exc
|
from oslo_db import exception as db_exc
|
||||||
from oslo_log import helpers as log_helpers
|
from oslo_log import helpers as log_helpers
|
||||||
from oslo_utils import uuidutils
|
from oslo_utils import uuidutils
|
||||||
|
@ -37,6 +38,26 @@ from neutron.objects import network
|
||||||
from neutron.services.segments import exceptions
|
from neutron.services.segments import exceptions
|
||||||
|
|
||||||
|
|
||||||
|
_USER_CONFIGURED_SEGMENT_PLUGIN = None
|
||||||
|
|
||||||
|
|
||||||
|
def check_user_configured_segment_plugin():
|
||||||
|
global _USER_CONFIGURED_SEGMENT_PLUGIN
|
||||||
|
# _USER_CONFIGURED_SEGMENT_PLUGIN will contain 3 possible values:
|
||||||
|
# 1. None, this just happens during neutron-server startup.
|
||||||
|
# 2. True, this means that users configure the 'segments'
|
||||||
|
# service plugin in neutron config file.
|
||||||
|
# 3. False, this means that can not find 'segments' service
|
||||||
|
# plugin in neutron config file.
|
||||||
|
# This function just load once to store the result
|
||||||
|
# into _USER_CONFIGURED_SEGMENT_PLUGIN during neutron-server startup.
|
||||||
|
if _USER_CONFIGURED_SEGMENT_PLUGIN is None:
|
||||||
|
segment_class = 'neutron.services.segments.plugin.Plugin'
|
||||||
|
_USER_CONFIGURED_SEGMENT_PLUGIN = any(
|
||||||
|
p in cfg.CONF.service_plugins for p in ['segments', segment_class])
|
||||||
|
return _USER_CONFIGURED_SEGMENT_PLUGIN
|
||||||
|
|
||||||
|
|
||||||
class SegmentDbMixin(common_db_mixin.CommonDbMixin):
|
class SegmentDbMixin(common_db_mixin.CommonDbMixin):
|
||||||
"""Mixin class to add segment."""
|
"""Mixin class to add segment."""
|
||||||
|
|
||||||
|
@ -258,7 +279,8 @@ def _update_segment_host_mapping_for_agent(resource, event, trigger,
|
||||||
context, host, plugin, agent,
|
context, host, plugin, agent,
|
||||||
status):
|
status):
|
||||||
check_segment_for_agent = getattr(plugin, 'check_segment_for_agent', None)
|
check_segment_for_agent = getattr(plugin, 'check_segment_for_agent', None)
|
||||||
if not check_segment_for_agent:
|
if (not check_user_configured_segment_plugin() or
|
||||||
|
not check_segment_for_agent):
|
||||||
return
|
return
|
||||||
phys_nets = _get_phys_nets(agent)
|
phys_nets = _get_phys_nets(agent)
|
||||||
if not phys_nets:
|
if not phys_nets:
|
||||||
|
@ -289,7 +311,8 @@ def _add_segment_host_mapping_for_segment(resource, event, trigger,
|
||||||
return
|
return
|
||||||
cp = directory.get_plugin()
|
cp = directory.get_plugin()
|
||||||
check_segment_for_agent = getattr(cp, 'check_segment_for_agent', None)
|
check_segment_for_agent = getattr(cp, 'check_segment_for_agent', None)
|
||||||
if not hasattr(cp, 'get_agents') or not check_segment_for_agent:
|
if not check_user_configured_segment_plugin() or not hasattr(
|
||||||
|
cp, 'get_agents') or not check_segment_for_agent:
|
||||||
# not an agent-supporting plugin
|
# not an agent-supporting plugin
|
||||||
registry.unsubscribe(_add_segment_host_mapping_for_segment,
|
registry.unsubscribe(_add_segment_host_mapping_for_segment,
|
||||||
resources.SEGMENT, events.PRECOMMIT_CREATE)
|
resources.SEGMENT, events.PRECOMMIT_CREATE)
|
||||||
|
|
|
@ -81,6 +81,7 @@ class SegmentTestCase(test_db_base_plugin_v2.NeutronDbPluginV2TestCase):
|
||||||
if not plugin:
|
if not plugin:
|
||||||
plugin = TEST_PLUGIN_KLASS
|
plugin = TEST_PLUGIN_KLASS
|
||||||
service_plugins = {'segments_plugin_name': SERVICE_PLUGIN_KLASS}
|
service_plugins = {'segments_plugin_name': SERVICE_PLUGIN_KLASS}
|
||||||
|
cfg.CONF.set_override('service_plugins', [SERVICE_PLUGIN_KLASS])
|
||||||
ext_mgr = SegmentTestExtensionManager()
|
ext_mgr = SegmentTestExtensionManager()
|
||||||
super(SegmentTestCase, self).setUp(plugin=plugin, ext_mgr=ext_mgr,
|
super(SegmentTestCase, self).setUp(plugin=plugin, ext_mgr=ext_mgr,
|
||||||
service_plugins=service_plugins)
|
service_plugins=service_plugins)
|
||||||
|
@ -2531,3 +2532,40 @@ class TestSegmentHostRoutes(TestSegmentML2):
|
||||||
self.assertIn(sub_res['gateway_ip'], gateway_ips)
|
self.assertIn(sub_res['gateway_ip'], gateway_ips)
|
||||||
self.assertEqual(len(sub_res['host_routes']), 1)
|
self.assertEqual(len(sub_res['host_routes']), 1)
|
||||||
self.assertIn(sub_res['host_routes'][0], host_routes)
|
self.assertIn(sub_res['host_routes'][0], host_routes)
|
||||||
|
|
||||||
|
|
||||||
|
class TestSegmentHostMappingNoStore(
|
||||||
|
test_db_base_plugin_v2.NeutronDbPluginV2TestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
driver_type.register_ml2_drivers_vlan_opts()
|
||||||
|
cfg.CONF.set_override('network_vlan_ranges', ['phys_net1'],
|
||||||
|
group='ml2_type_vlan')
|
||||||
|
cfg.CONF.set_override('service_plugins', [])
|
||||||
|
super(TestSegmentHostMappingNoStore, self).setUp(
|
||||||
|
plugin='neutron.plugins.ml2.plugin.Ml2Plugin')
|
||||||
|
# set to None for simulating server start
|
||||||
|
db._USER_CONFIGURED_SEGMENT_PLUGIN = None
|
||||||
|
db.subscribe()
|
||||||
|
|
||||||
|
@mock.patch('neutron.services.segments.db.update_segment_host_mapping')
|
||||||
|
@mock.patch('neutron.services.segments.db.map_segment_to_hosts')
|
||||||
|
def test_no_segmenthostmapping_when_disable_segment(
|
||||||
|
self, mock_map_segment_to_hosts, mock_update_segment_mapping):
|
||||||
|
with self.network(
|
||||||
|
arg_list=('provider:network_type',
|
||||||
|
'provider:physical_network',
|
||||||
|
'provider:segmentation_id'),
|
||||||
|
**{'provider:network_type': 'vlan',
|
||||||
|
'provider:physical_network': 'phys_net1',
|
||||||
|
'provider:segmentation_id': '400'}) as network:
|
||||||
|
network['network']
|
||||||
|
mock_map_segment_to_hosts.assert_not_called()
|
||||||
|
|
||||||
|
host1 = 'test_host'
|
||||||
|
physical_network = 'phys_net1'
|
||||||
|
helpers.register_ovs_agent(
|
||||||
|
host=host1,
|
||||||
|
bridge_mappings={physical_network: 'br-eth-1'},
|
||||||
|
plugin=self.plugin)
|
||||||
|
mock_update_segment_mapping.assert_not_called()
|
||||||
|
|
Loading…
Reference in New Issue