Merge "Delete qg device during DVR-SNAT router deletion"
This commit is contained in:
commit
16eedf109b
@ -891,9 +891,10 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback,
|
|||||||
def external_gateway_removed(self, ri, ex_gw_port, interface_name):
|
def external_gateway_removed(self, ri, ex_gw_port, interface_name):
|
||||||
if ri.router['distributed']:
|
if ri.router['distributed']:
|
||||||
self.process_router_floating_ip_nat_rules(ri)
|
self.process_router_floating_ip_nat_rules(ri)
|
||||||
interface_name = self._get_external_device_interface_name(
|
to_fip_interface_name = self._get_external_device_interface_name(
|
||||||
ri, ex_gw_port)
|
ri, ex_gw_port)
|
||||||
self.process_router_floating_ip_addresses(ri, interface_name)
|
self.process_router_floating_ip_addresses(
|
||||||
|
ri, to_fip_interface_name)
|
||||||
for p in ri.internal_ports:
|
for p in ri.internal_ports:
|
||||||
internal_interface = self.get_internal_device_name(p['id'])
|
internal_interface = self.get_internal_device_name(p['id'])
|
||||||
self._snat_redirect_remove(ri, p, internal_interface)
|
self._snat_redirect_remove(ri, p, internal_interface)
|
||||||
|
@ -30,6 +30,7 @@ from neutron.agent import l3_agent as l3_agent_main
|
|||||||
from neutron.agent.linux import dhcp
|
from neutron.agent.linux import dhcp
|
||||||
from neutron.agent.linux import external_process
|
from neutron.agent.linux import external_process
|
||||||
from neutron.agent.linux import ip_lib
|
from neutron.agent.linux import ip_lib
|
||||||
|
from neutron.agent.linux import ovs_lib
|
||||||
from neutron.agent.metadata import agent as metadata_agent
|
from neutron.agent.metadata import agent as metadata_agent
|
||||||
from neutron.common import config as common_config
|
from neutron.common import config as common_config
|
||||||
from neutron.common import constants as l3_constants
|
from neutron.common import constants as l3_constants
|
||||||
@ -255,6 +256,14 @@ class L3AgentTestFramework(base.BaseOVSLinuxTestCase):
|
|||||||
for extra_route in router.router['routes']:
|
for extra_route in router.router['routes']:
|
||||||
self.assertIn(extra_route, routes)
|
self.assertIn(extra_route, routes)
|
||||||
|
|
||||||
|
def _assert_interfaces_deleted_from_ovs(self):
|
||||||
|
def assert_ovs_bridge_empty(bridge_name):
|
||||||
|
bridge = ovs_lib.OVSBridge(bridge_name, self.root_helper)
|
||||||
|
self.assertFalse(bridge.get_port_name_list())
|
||||||
|
|
||||||
|
assert_ovs_bridge_empty(self.agent.conf.ovs_integration_bridge)
|
||||||
|
assert_ovs_bridge_empty(self.agent.conf.external_network_bridge)
|
||||||
|
|
||||||
|
|
||||||
class L3AgentTestCase(L3AgentTestFramework):
|
class L3AgentTestCase(L3AgentTestFramework):
|
||||||
def test_observer_notifications_legacy_router(self):
|
def test_observer_notifications_legacy_router(self):
|
||||||
@ -412,6 +421,7 @@ class L3AgentTestCase(L3AgentTestFramework):
|
|||||||
|
|
||||||
self._delete_router(self.agent, router.router_id)
|
self._delete_router(self.agent, router.router_id)
|
||||||
|
|
||||||
|
self._assert_interfaces_deleted_from_ovs()
|
||||||
self._assert_router_does_not_exist(router)
|
self._assert_router_does_not_exist(router)
|
||||||
if enable_ha:
|
if enable_ha:
|
||||||
self.assertFalse(router.keepalived_manager.process.active)
|
self.assertFalse(router.keepalived_manager.process.active)
|
||||||
@ -611,6 +621,7 @@ class TestDvrRouter(L3AgentTestFramework):
|
|||||||
self._assert_extra_routes(router)
|
self._assert_extra_routes(router)
|
||||||
|
|
||||||
self._delete_router(self.agent, router.router_id)
|
self._delete_router(self.agent, router.router_id)
|
||||||
|
self._assert_interfaces_deleted_from_ovs()
|
||||||
self._assert_router_does_not_exist(router)
|
self._assert_router_does_not_exist(router)
|
||||||
|
|
||||||
def generate_dvr_router_info(self, enable_ha=False, enable_snat=False):
|
def generate_dvr_router_info(self, enable_ha=False, enable_snat=False):
|
||||||
|
@ -475,7 +475,11 @@ class TestBasicRouterOperations(BasicRouterOperationsFramework):
|
|||||||
elif action == 'remove':
|
elif action == 'remove':
|
||||||
self.device_exists.return_value = True
|
self.device_exists.return_value = True
|
||||||
agent.external_gateway_removed(ri, ex_gw_port, interface_name)
|
agent.external_gateway_removed(ri, ex_gw_port, interface_name)
|
||||||
self.assertEqual(self.mock_driver.unplug.call_count, 1)
|
self.mock_driver.unplug.assert_called_once_with(
|
||||||
|
interface_name,
|
||||||
|
bridge=agent.conf.external_network_bridge,
|
||||||
|
namespace=mock.ANY,
|
||||||
|
prefix=mock.ANY)
|
||||||
else:
|
else:
|
||||||
raise Exception("Invalid action %s" % action)
|
raise Exception("Invalid action %s" % action)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user