Add/rm centralized fips for DVR+HA from standby node
For DVR+HA:
When adding/removing a centralized fip, just add/remove it to/from
keepalived instance and do not check if it is a master router.
When adding a centralized fip, it is still needed to invoke method
of supperclass to configure nat rules on master node.
When removing a centralized fip, it is still needed to invoke method
of supperclass to clean contrack on master node.
Change-Id: I202db59acb7fb0b7924748cf7def2879a748e56a
Closes-Bug: #1736068
(cherry picked from commit 2200b1c369
)
This commit is contained in:
parent
e8e4407fac
commit
e3d11d45cf
|
@ -58,16 +58,18 @@ class DvrEdgeHaRouter(dvr_edge_router.DvrEdgeRouter,
|
|||
constants.SNAT_INT_DEV_PREFIX)
|
||||
|
||||
def add_centralized_floatingip(self, fip, fip_cidr):
|
||||
if self.is_router_master():
|
||||
interface_name = self.get_snat_external_device_interface_name(
|
||||
interface_name = self.get_snat_external_device_interface_name(
|
||||
self.get_ex_gw_port())
|
||||
self._add_vip(fip_cidr, interface_name)
|
||||
self._add_vip(fip_cidr, interface_name)
|
||||
if self.is_router_master():
|
||||
return super(DvrEdgeHaRouter, self).add_centralized_floatingip(
|
||||
fip, fip_cidr)
|
||||
else:
|
||||
return constants.FLOATINGIP_STATUS_ACTIVE
|
||||
|
||||
def remove_centralized_floatingip(self, fip_cidr):
|
||||
self._remove_vip(fip_cidr)
|
||||
if self.is_router_master():
|
||||
self._remove_vip(fip_cidr)
|
||||
super(DvrEdgeHaRouter, self).remove_centralized_floatingip(
|
||||
fip_cidr)
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@ from oslo_log import log
|
|||
from oslo_utils import uuidutils
|
||||
|
||||
from neutron.agent.l3 import agent as l3_agent
|
||||
from neutron.agent.l3 import dvr_edge_ha_router as dvr_edge_ha_rtr
|
||||
from neutron.agent.l3 import dvr_edge_router as dvr_edge_rtr
|
||||
from neutron.agent.l3 import dvr_local_router as dvr_router
|
||||
from neutron.agent.l3 import link_local_allocator as lla
|
||||
|
@ -869,3 +870,61 @@ class TestDvrRouterOperations(base.BaseTestCase):
|
|||
ri)
|
||||
ri._handle_router_snat_rules(ex_gw_port, interface_name)
|
||||
ipv4_nat.add_rule.assert_called_once_with('snat', '-j $float-snat')
|
||||
|
||||
@mock.patch.object(dvr_edge_rtr.DvrEdgeRouter,
|
||||
'add_centralized_floatingip')
|
||||
def test_add_centralized_floatingip(self,
|
||||
super_add_centralized_floatingip):
|
||||
agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
|
||||
agent.conf.agent_mode = lib_constants.L3_AGENT_MODE_DVR_SNAT
|
||||
router = l3_test_common.prepare_router_data(num_internal_ports=2)
|
||||
router['gw_port_host'] = HOSTNAME
|
||||
self.mock_driver.unplug.reset_mock()
|
||||
self._set_ri_kwargs(agent, router['id'], router)
|
||||
fip = {'id': _uuid()}
|
||||
fip_cidr = '11.22.33.44/24'
|
||||
|
||||
ri = dvr_edge_ha_rtr.DvrEdgeHaRouter(HOSTNAME, [], **self.ri_kwargs)
|
||||
ri.is_router_master = mock.Mock(return_value=False)
|
||||
ri._add_vip = mock.Mock()
|
||||
interface_name = ri.get_snat_external_device_interface_name(
|
||||
ri.get_ex_gw_port())
|
||||
ri.add_centralized_floatingip(fip, fip_cidr)
|
||||
ri._add_vip.assert_called_once_with(fip_cidr, interface_name)
|
||||
super_add_centralized_floatingip.assert_not_called()
|
||||
|
||||
ri1 = dvr_edge_ha_rtr.DvrEdgeHaRouter(HOSTNAME, [], **self.ri_kwargs)
|
||||
ri1.is_router_master = mock.Mock(return_value=True)
|
||||
ri1._add_vip = mock.Mock()
|
||||
interface_name = ri1.get_snat_external_device_interface_name(
|
||||
ri1.get_ex_gw_port())
|
||||
ri1.add_centralized_floatingip(fip, fip_cidr)
|
||||
ri1._add_vip.assert_called_once_with(fip_cidr, interface_name)
|
||||
super_add_centralized_floatingip.assert_called_once_with(fip,
|
||||
fip_cidr)
|
||||
|
||||
@mock.patch.object(dvr_edge_rtr.DvrEdgeRouter,
|
||||
'remove_centralized_floatingip')
|
||||
def test_remove_centralized_floatingip(self,
|
||||
super_remove_centralized_floatingip):
|
||||
agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
|
||||
agent.conf.agent_mode = lib_constants.L3_AGENT_MODE_DVR_SNAT
|
||||
router = l3_test_common.prepare_router_data(num_internal_ports=2)
|
||||
router['gw_port_host'] = HOSTNAME
|
||||
self.mock_driver.unplug.reset_mock()
|
||||
self._set_ri_kwargs(agent, router['id'], router)
|
||||
fip_cidr = '11.22.33.44/24'
|
||||
|
||||
ri = dvr_edge_ha_rtr.DvrEdgeHaRouter(HOSTNAME, [], **self.ri_kwargs)
|
||||
ri.is_router_master = mock.Mock(return_value=False)
|
||||
ri._remove_vip = mock.Mock()
|
||||
ri.remove_centralized_floatingip(fip_cidr)
|
||||
ri._remove_vip.assert_called_once_with(fip_cidr)
|
||||
super_remove_centralized_floatingip.assert_not_called()
|
||||
|
||||
ri1 = dvr_edge_ha_rtr.DvrEdgeHaRouter(HOSTNAME, [], **self.ri_kwargs)
|
||||
ri1.is_router_master = mock.Mock(return_value=True)
|
||||
ri1._remove_vip = mock.Mock()
|
||||
ri1.remove_centralized_floatingip(fip_cidr)
|
||||
ri1._remove_vip.assert_called_once_with(fip_cidr)
|
||||
super_remove_centralized_floatingip.assert_called_once_with(fip_cidr)
|
||||
|
|
Loading…
Reference in New Issue