From: rajeev Date: Thu, 11 Sep 2014 16:03:00 +0000 (-0400) Subject: Cleanup floatingips also on router delete X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=c3326996e38cb67f8d4ba3dabd829dc6f327b666;p=openstack-build%2Fneutron-build.git 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 --- 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)