From c3326996e38cb67f8d4ba3dabd829dc6f327b666 Mon Sep 17 00:00:00 2001 From: rajeev Date: Thu, 11 Sep 2014 12:03:00 -0400 Subject: [PATCH] Cleanup floatingips also on router delete In router remove path process_router(), processing of floating ips is getting skipped. This change adds processing of floating ips if the external gateway for the router was previously set. Since DVR uses FIP namespaces and agent gateway ports, this change ensures such ports and namespaces are removed. Change-Id: Ib1d8fb54adcd8aab411dced695d171376687c980 Partial-bug: #1367588 --- neutron/agent/l3_agent.py | 4 ++-- neutron/tests/unit/test_l3_agent.py | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/neutron/agent/l3_agent.py b/neutron/agent/l3_agent.py index 6531a6bc6..f2ef1ec00 100644 --- a/neutron/agent/l3_agent.py +++ b/neutron/agent/l3_agent.py @@ -918,7 +918,7 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, manager.Manager): # Process SNAT/DNAT rules for floating IPs fip_statuses = {} try: - if ex_gw_port: + if ex_gw_port or ri.ex_gw_port: existing_floating_ips = ri.floating_ips self.process_router_floating_ip_nat_rules(ri) ri.iptables_manager.defer_apply_off() @@ -932,7 +932,7 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, manager.Manager): for fip in ri.router.get(l3_constants.FLOATINGIP_KEY, []): fip_statuses[fip['id']] = l3_constants.FLOATINGIP_STATUS_ERROR - if ex_gw_port: + if ex_gw_port or ri.ex_gw_port: # Identify floating IPs which were disabled ri.floating_ips = set(fip_statuses.keys()) for fip_id in existing_floating_ips - ri.floating_ips: diff --git a/neutron/tests/unit/test_l3_agent.py b/neutron/tests/unit/test_l3_agent.py index 42d0d09ef..bfe98fdc8 100644 --- a/neutron/tests/unit/test_l3_agent.py +++ b/neutron/tests/unit/test_l3_agent.py @@ -955,7 +955,17 @@ class TestBasicRouterOperations(base.BaseTestCase): del router[l3_constants.INTERFACE_KEY] del router['gw_port'] agent.process_router(ri) + ex_gw_port = agent._get_ex_gw_port(ri) self.assertEqual(self.send_arp.call_count, 1) + agent.process_router_floating_ip_addresses.assert_called_with( + ri, ex_gw_port) + agent.process_router_floating_ip_addresses.reset_mock() + agent.process_router_floating_ip_nat_rules.assert_called_with(ri) + agent.process_router_floating_ip_nat_rules.reset_mock() + + # now no ports no gateway, test state tear down + ri.ex_gw_port = None + agent.process_router(ri) self.assertFalse(agent.process_router_floating_ip_addresses.called) self.assertFalse(agent.process_router_floating_ip_nat_rules.called) -- 2.45.2