HA-non-DVR router don't need manually add static route

When a router set as HA mode, The keepalived process will take over
the route entry's generation. So, the codes that add static route
is redundant.

But, for DVR-HA router, in dvr_snat node the keepalived process run
in snat-namespace and don't take over qrouter-namespace, so the
manually add static route codes still need be called.

Closes-Bug: #1927849
Change-Id: Id09de6c43c0fab4009336e253c88f54219398053
(cherry picked from commit f192153b44)
This commit is contained in:
yangjianfeng 2021-05-09 06:28:06 +00:00
parent 8c6f774504
commit f29641a7f7
2 changed files with 28 additions and 1 deletions

View File

@ -271,7 +271,9 @@ class HaRouter(router.RouterInfo):
keepalived.KeepalivedVirtualRoute(
route['destination'], route['nexthop'])
for route in new_routes]
super(HaRouter, self).routes_updated(old_routes, new_routes)
if self.router.get('distributed', False):
super(HaRouter, self).routes_updated(old_routes, new_routes)
self.keepalived_manager.get_process().reload_cfg()
def _add_default_gw_virtual_route(self, ex_gw_port, interface_name):
gateway_ips = self._get_external_gw_ips(ex_gw_port)

View File

@ -55,6 +55,31 @@ class TestBasicRouterOperations(base.BaseTestCase):
ri._get_cidrs_from_keepalived = mock.MagicMock(return_value=addresses)
self.assertEqual(set(addresses), ri.get_router_cidrs(device))
def test_routes_updated_with_dvr(self):
ri = self._create_router(router={'distributed': True})
ri.keepalived_manager = mock.Mock()
base_routes_updated = mock.patch(
'neutron.agent.l3.router_info.'
'RouterInfo.routes_updated').start()
mock_instance = mock.Mock()
mock_instance.virtual_routes.gateway_routes = []
ri._get_keepalived_instance = mock.Mock(
return_value=mock_instance)
ri.routes_updated([], [])
self.assertTrue(base_routes_updated.called)
def test_routes_updated_with_non_dvr(self):
ri = self._create_router(router={'distributed': False})
ri.keepalived_manager = mock.Mock()
base_routes_updated = mock.patch(
'neutron.agent.l3.router_info.'
'RouterInfo.routes_updated').start()
mock_instance = mock.Mock()
mock_instance.virtual_routes.gateway_routes = []
ri._get_keepalived_instance = mock.Mock(return_value=mock_instance)
ri.routes_updated([], [])
self.assertFalse(base_routes_updated.called)
def test__add_default_gw_virtual_route(self):
ri = self._create_router()
mock_instance = mock.Mock()