Merge "[OVN] Allow use of ovn-sync mechanism driver" into stable/ussuri
This commit is contained in:
commit
02d4eb001f
|
@ -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.")
|
|
@ -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.plugins.ml2.drivers.ovn.mech_driver.ovsdb import ovn_client
|
||||||
from neutron.scheduler import l3_ovn_scheduler
|
from neutron.scheduler import l3_ovn_scheduler
|
||||||
|
|
||||||
|
from neutron.services.ovn_l3 import exceptions as ovn_l3_exc
|
||||||
|
|
||||||
|
|
||||||
LOG = log.getLogger(__name__)
|
LOG = log.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -108,7 +110,17 @@ class OVNL3RouterPlugin(service_base.ServicePluginBase,
|
||||||
@property
|
@property
|
||||||
def _plugin_driver(self):
|
def _plugin_driver(self):
|
||||||
if self._mech is None:
|
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
|
return self._mech
|
||||||
|
|
||||||
def get_plugin_type(self):
|
def get_plugin_type(self):
|
||||||
|
|
|
@ -286,6 +286,23 @@ class TestOVNL3RouterPlugin(test_mech_driver.Ml2PluginV2TestCase):
|
||||||
return_value=False)
|
return_value=False)
|
||||||
self.mock_is_lb_member_fip.start()
|
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')
|
@mock.patch('neutron.db.l3_db.L3_NAT_dbonly_mixin.add_router_interface')
|
||||||
def test_add_router_interface(self, func):
|
def test_add_router_interface(self, func):
|
||||||
router_id = 'router-id'
|
router_id = 'router-id'
|
||||||
|
|
Loading…
Reference in New Issue