Merge "[OVN] Allow use of ovn-sync mechanism driver" into stable/ussuri

This commit is contained in:
Zuul 2020-07-15 16:15:50 +00:00 committed by Gerrit Code Review
commit 02d4eb001f
3 changed files with 51 additions and 1 deletions

View File

@ -0,0 +1,21 @@
# Copyright 2020 Canonical Ltd.
#
# 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._i18n import _
from neutron_lib import exceptions as n_exc
class MechanismDriverNotFound(n_exc.NotFound):
message = _("None of the supported mechanism drivers found: "
"%(mechanism_drivers)s. Check your configuration.")

View File

@ -42,6 +42,8 @@ from neutron.db import ovn_revision_numbers_db as db_rev
from neutron.plugins.ml2.drivers.ovn.mech_driver.ovsdb import ovn_client
from neutron.scheduler import l3_ovn_scheduler
from neutron.services.ovn_l3 import exceptions as ovn_l3_exc
LOG = log.getLogger(__name__)
@ -108,7 +110,17 @@ class OVNL3RouterPlugin(service_base.ServicePluginBase,
@property
def _plugin_driver(self):
if self._mech is None:
self._mech = self._plugin.mechanism_manager.mech_drivers['ovn'].obj
drivers = ('ovn', 'ovn-sync')
for driver in drivers:
try:
self._mech = self._plugin.mechanism_manager.mech_drivers[
driver].obj
break
except KeyError:
pass
else:
raise ovn_l3_exc.MechanismDriverNotFound(
mechanism_drivers=drivers)
return self._mech
def get_plugin_type(self):

View File

@ -286,6 +286,23 @@ class TestOVNL3RouterPlugin(test_mech_driver.Ml2PluginV2TestCase):
return_value=False)
self.mock_is_lb_member_fip.start()
def test__plugin_driver(self):
# No valid mech drivers should raise an exception.
self._mechanism_drivers = None
self.l3_inst._plugin.mechanism_manager.mech_drivers = {}
self.l3_inst._mech = None
self.assertRaises(n_exc.NotFound, lambda: self.l3_inst._plugin_driver)
# Populate the mechanism driver map with keys the code under test looks
# for and validate it finds them.
fake_mech_driver = mock.MagicMock()
for driver in ('ovn', 'ovn-sync'):
self.l3_inst._plugin.mechanism_manager.mech_drivers[
driver] = fake_mech_driver
result = self.l3_inst._plugin_driver
self.l3_inst._plugin.mechanism_manager.mech_drivers.pop(
driver, None)
self.assertEqual(fake_mech_driver.obj, result)
@mock.patch('neutron.db.l3_db.L3_NAT_dbonly_mixin.add_router_interface')
def test_add_router_interface(self, func):
router_id = 'router-id'