Remove get_router_cidrs method of dvr_edge_ha router
Since commita388f78c8c
, we fetch routers existing floating ip address from the fip namespace's route table instead of qrouter namespace's qg device for the dvr_local and dvr_edge router. But for dvr_edge_ha router, it still fetch the existing floating ip like legacy router, causing it can’t know which existent floating ip rules need to be removed. After removing the get_router_cidrs method, the dvr_edge_ha router inherit the get_router_cidrs method from dvr_local router and it will remove the existent floating ip rules successfully if we disassociate the floating ip. Co-Authored-By: Swaminathan Vasudevan <swaminathan.vasudevan@hpe.com> Change-Id: Ic471189773298b353db7629c827c8787703c0069 Related-Bug: #1644415 (cherry picked from commit91b2efcbd5
)
This commit is contained in:
parent
9c1b18296d
commit
9851426331
|
@ -90,9 +90,6 @@ class DvrEdgeHaRouter(dvr_edge_router.DvrEdgeRouter,
|
||||||
self._create_snat_namespace()
|
self._create_snat_namespace()
|
||||||
super(DvrEdgeHaRouter, self).initialize(process_monitor)
|
super(DvrEdgeHaRouter, self).initialize(process_monitor)
|
||||||
|
|
||||||
def get_router_cidrs(self, device):
|
|
||||||
return router_info.RouterInfo.get_router_cidrs(self, device)
|
|
||||||
|
|
||||||
def _external_gateway_added(self, ex_gw_port, interface_name,
|
def _external_gateway_added(self, ex_gw_port, interface_name,
|
||||||
ns_name, preserve_ips):
|
ns_name, preserve_ips):
|
||||||
self._plug_external_gateway(ex_gw_port, interface_name, ns_name)
|
self._plug_external_gateway(ex_gw_port, interface_name, ns_name)
|
||||||
|
|
|
@ -635,6 +635,68 @@ class TestDvrRouter(framework.L3AgentTestFramework):
|
||||||
self._assert_iptables_rules_exist(
|
self._assert_iptables_rules_exist(
|
||||||
router.iptables_manager, 'nat', expected_rules)
|
router.iptables_manager, 'nat', expected_rules)
|
||||||
|
|
||||||
|
def test_dvr_router_with_ha_for_fip_disassociation(self):
|
||||||
|
"""Test to validate the fip rules are deleted in dvr_snat_ha router.
|
||||||
|
|
||||||
|
This test validates the fip rules are getting deleted in
|
||||||
|
a router namespace when the router has ha and snat enabled after
|
||||||
|
the floatingip is disassociated.
|
||||||
|
"""
|
||||||
|
self.agent.conf.agent_mode = 'dvr_snat'
|
||||||
|
router_info = self.generate_dvr_router_info(
|
||||||
|
enable_snat=True, enable_ha=True, enable_gw=True)
|
||||||
|
fip_agent_gw_port = router_info[n_const.FLOATINGIP_AGENT_INTF_KEY]
|
||||||
|
self.mock_plugin_api.get_agent_gateway_port.return_value = (
|
||||||
|
fip_agent_gw_port[0])
|
||||||
|
router1 = self.manage_router(self.agent, router_info)
|
||||||
|
fip_ns_name = router1.fip_ns.get_name()
|
||||||
|
self.assertTrue(self._namespace_exists(router1.ns_name))
|
||||||
|
self.assertTrue(self._namespace_exists(fip_ns_name))
|
||||||
|
self._assert_snat_namespace_exists(router1)
|
||||||
|
ns_ipr = ip_lib.IPRule(namespace=router1.ns_name)
|
||||||
|
ip4_rules_list_with_fip = ns_ipr.rule.list_rules(
|
||||||
|
lib_constants.IP_VERSION_4)
|
||||||
|
# The rules_list should have 6 entries:
|
||||||
|
# 3 default rules (local, main and default)
|
||||||
|
# 1 Fip forward rule
|
||||||
|
# 2 interface rules to redirect to snat
|
||||||
|
self.assertEqual(6, len(ip4_rules_list_with_fip))
|
||||||
|
rfp_device_name = router1.fip_ns.get_rtr_ext_device_name(
|
||||||
|
router1.router_id)
|
||||||
|
rfp_device = ip_lib.IPDevice(rfp_device_name,
|
||||||
|
namespace=router1.ns_name)
|
||||||
|
rtr_2_fip, fip_2_rtr = router1.rtr_fip_subnet.get_pair()
|
||||||
|
self._assert_default_gateway(
|
||||||
|
fip_2_rtr, rfp_device, rfp_device_name)
|
||||||
|
|
||||||
|
router1.router[lib_constants.FLOATINGIP_KEY] = []
|
||||||
|
self.agent._process_updated_router(router1.router)
|
||||||
|
router_updated = self.agent.router_info[router1.router['id']]
|
||||||
|
self.assertTrue(self._namespace_exists(router_updated.ns_name))
|
||||||
|
self._assert_snat_namespace_exists(router1)
|
||||||
|
ip4_rules_list = ns_ipr.rule.list_rules(lib_constants.IP_VERSION_4)
|
||||||
|
self.assertEqual(5, len(ip4_rules_list))
|
||||||
|
interface_rules_list_count = 0
|
||||||
|
fip_rule_count = 0
|
||||||
|
for ip_rule in ip4_rules_list:
|
||||||
|
tbl_index = ip_rule['table']
|
||||||
|
if tbl_index not in ['local', 'default', 'main']:
|
||||||
|
interface_rules_list_count += 1
|
||||||
|
if tbl_index == dvr_fip_ns.FIP_RT_TBL:
|
||||||
|
fip_rule_count += 1
|
||||||
|
self.assertEqual(2, interface_rules_list_count)
|
||||||
|
self.assertEqual(0, fip_rule_count)
|
||||||
|
|
||||||
|
def _assert_default_gateway(self, fip_2_rtr, rfp_device, device_name):
|
||||||
|
expected_gateway = [{'dev': device_name,
|
||||||
|
'cidr': '0.0.0.0/0',
|
||||||
|
'via': str(fip_2_rtr.ip),
|
||||||
|
'table': dvr_fip_ns.FIP_RT_TBL}]
|
||||||
|
self.assertEqual(expected_gateway, rfp_device.route.list_routes(
|
||||||
|
ip_version=lib_constants.IP_VERSION_4,
|
||||||
|
table=dvr_fip_ns.FIP_RT_TBL,
|
||||||
|
via=str(fip_2_rtr.ip)))
|
||||||
|
|
||||||
def test_dvr_router_rem_fips_on_restarted_agent(self):
|
def test_dvr_router_rem_fips_on_restarted_agent(self):
|
||||||
self.agent.conf.agent_mode = 'dvr_snat'
|
self.agent.conf.agent_mode = 'dvr_snat'
|
||||||
router_info = self.generate_dvr_router_info()
|
router_info = self.generate_dvr_router_info()
|
||||||
|
|
Loading…
Reference in New Issue