Fix ML2/OVN OVSDB handling of gateway ports
The ML2/OVN OVSDB maintenance tasks check_redirect_type_router_gateway_ports and add_gw_port_info_to_logical_router_port are fixed to handle properly the gateway ports of user defined flavor routers. They should be ignored because they don't exist in the OVN database. Closes-Bug: #2064778 Change-Id: I75c49e2b00ea186d0d34f9441eb86034de31b21e
This commit is contained in:
@@ -665,6 +665,10 @@ class DBInconsistenciesPeriodics(SchemaAwarePeriodicsBase):
|
||||
gw_ports = self._ovn_client._plugin.get_ports(
|
||||
context, {'device_owner': [n_const.DEVICE_OWNER_ROUTER_GW]})
|
||||
for gw_port in gw_ports:
|
||||
router = self._ovn_client._l3_plugin.get_router(
|
||||
context, gw_port['device_id'])
|
||||
if not utils.is_ovn_provider_router(router):
|
||||
continue
|
||||
enable_redirect = False
|
||||
if ovn_conf.is_ovn_distributed_floating_ip():
|
||||
try:
|
||||
@@ -935,7 +939,9 @@ class DBInconsistenciesPeriodics(SchemaAwarePeriodicsBase):
|
||||
"""Add info if LRP is connecting internal subnet or ext gateway."""
|
||||
cmds = []
|
||||
context = n_context.get_admin_context()
|
||||
for router in self._ovn_client._l3_plugin.get_routers(context):
|
||||
filters = {'flavor_id': [None]}
|
||||
for router in self._ovn_client._l3_plugin.get_routers(context,
|
||||
filters=filters):
|
||||
ext_gw_networks = [
|
||||
ext_gw['network_id'] for ext_gw in router['external_gateways']]
|
||||
rtr_name = 'neutron-{}'.format(router['id'])
|
||||
|
||||
@@ -694,13 +694,22 @@ class TestDBInconsistenciesPeriodics(testlib_api.SqlTestCaseLight,
|
||||
nb_idl.db_set.assert_has_calls(expected_calls)
|
||||
|
||||
def _test_check_redirect_type_router_gateway_ports(self, networks,
|
||||
redirect_value):
|
||||
redirect_value,
|
||||
flavored_router=False):
|
||||
self.fake_ovn_client._plugin.get_ports.return_value = [{
|
||||
'device_owner': n_const.DEVICE_OWNER_ROUTER_GW,
|
||||
'id': 'fake-id',
|
||||
'device_id': 'fake-device-id'}]
|
||||
self.fake_ovn_client._get_router_ports.return_value = []
|
||||
self.fake_ovn_client._plugin.get_networks.return_value = networks
|
||||
if flavored_router:
|
||||
self.fake_ovn_client._l3_plugin.get_router.return_value = {
|
||||
'id': 'fake-id',
|
||||
'flavor_id': 'fake-flavor-id'}
|
||||
else:
|
||||
self.fake_ovn_client._l3_plugin.get_router.return_value = {
|
||||
'id': 'fake-id',
|
||||
'flavor_id': None}
|
||||
|
||||
lrp_redirect = fakes.FakeOvsdbRow.create_one_ovsdb_row(
|
||||
attrs={
|
||||
@@ -721,21 +730,25 @@ class TestDBInconsistenciesPeriodics(testlib_api.SqlTestCaseLight,
|
||||
periodics.NeverAgain,
|
||||
self.periodic.check_redirect_type_router_gateway_ports)
|
||||
|
||||
if redirect_value:
|
||||
expected_calls = [
|
||||
mock.call.db_set('Logical_Router_Port',
|
||||
mock.ANY,
|
||||
('options', {'redirect-type': 'bridged'}))
|
||||
]
|
||||
self.fake_ovn_client._nb_idl.db_set.assert_has_calls(
|
||||
expected_calls)
|
||||
if flavored_router:
|
||||
self.fake_ovn_client._nb_idl.db_set.assert_not_called()
|
||||
self.fake_ovn_client._nb_idl.db_remove.assert_not_called()
|
||||
else:
|
||||
expected_calls = [
|
||||
mock.call.db_remove('Logical_Router_Port', mock.ANY,
|
||||
'options', 'redirect-type')
|
||||
]
|
||||
self.fake_ovn_client._nb_idl.db_remove.assert_has_calls(
|
||||
expected_calls)
|
||||
if redirect_value:
|
||||
expected_calls = [
|
||||
mock.call.db_set('Logical_Router_Port',
|
||||
mock.ANY,
|
||||
('options', {'redirect-type': 'bridged'}))
|
||||
]
|
||||
self.fake_ovn_client._nb_idl.db_set.assert_has_calls(
|
||||
expected_calls)
|
||||
else:
|
||||
expected_calls = [
|
||||
mock.call.db_remove('Logical_Router_Port', mock.ANY,
|
||||
'options', 'redirect-type')
|
||||
]
|
||||
self.fake_ovn_client._nb_idl.db_remove.assert_has_calls(
|
||||
expected_calls)
|
||||
|
||||
def test_check_redirect_type_router_gateway_ports_enable_redirect(self):
|
||||
cfg.CONF.set_override('enable_distributed_floating_ip', 'True',
|
||||
@@ -751,6 +764,18 @@ class TestDBInconsistenciesPeriodics(testlib_api.SqlTestCaseLight,
|
||||
'provider:network_type': n_const.TYPE_GENEVE}]
|
||||
self._test_check_redirect_type_router_gateway_ports(networks, False)
|
||||
|
||||
def test_check_redirect_type_router_gateway_ports_flavored_router(self):
|
||||
cfg.CONF.set_override('enable_distributed_floating_ip', 'True',
|
||||
group='ovn')
|
||||
networks = [{'network_id': 'foo',
|
||||
'provider:network_type': n_const.TYPE_VLAN}]
|
||||
self._test_check_redirect_type_router_gateway_ports(
|
||||
networks, True, flavored_router=True)
|
||||
networks = [{'network_id': 'foo',
|
||||
'provider:network_type': n_const.TYPE_GENEVE}]
|
||||
self._test_check_redirect_type_router_gateway_ports(
|
||||
networks, False, flavored_router=True)
|
||||
|
||||
def _test_check_vlan_distributed_ports(self, opt_value=None):
|
||||
fake_net0 = {'id': 'net0'}
|
||||
fake_net1 = {'id': 'net1'}
|
||||
|
||||
Reference in New Issue
Block a user