Give some HA router case specific resources
1. give each HA failover case an independent vrrp_id 2. give each HA port an independent IP address, so the interface IPs for router HA ports will be: 169.254.192.100 and 169.254.192.101 169.254.192.102 and 169.254.192.103 169.254.192.104 and 169.254.192.105 169.254.192.106 and 169.254.192.107 VIP of each case will be: 169.254.0.10/24 169.254.0.11/24 169.254.0.12/24 169.254.0.13/24 169.254.0.14/24 Conflicts: neutron/tests/functional/agent/l3/test_dvr_router.py Closes-Bug: #1819160 Change-Id: I1216d96af40449ec16a852cc1f6c4f15c85f4546 (cherry picked from commitc69a87405a
) (cherry picked from commit2c5957f56d
) (cherry picked from commitc50bdf2329
) (cherry picked from commit7b2a8f795f
)
This commit is contained in:
parent
9e8ea8edbc
commit
26f6d5fd73
|
@ -395,6 +395,8 @@ class KeepalivedManager(object):
|
|||
|
||||
def _output_config_file(self):
|
||||
config_str = self.config.get_config_str()
|
||||
LOG.debug("Router %s keepalived config: %s",
|
||||
self.resource_id, config_str)
|
||||
config_path = self.get_full_config_file_path('keepalived.conf')
|
||||
file_utils.replace_file(config_path, config_str)
|
||||
|
||||
|
|
|
@ -58,6 +58,7 @@ def prepare_router_data(ip_version=4, enable_snat=None, num_internal_ports=1,
|
|||
extra_routes=False, dual_stack=False, enable_gw=True,
|
||||
v6_ext_gw_with_sub=True,
|
||||
snat_bound_fip=False,
|
||||
vrrp_id=None,
|
||||
**kwargs):
|
||||
fixed_ips = []
|
||||
subnets = []
|
||||
|
@ -133,9 +134,13 @@ def prepare_router_data(ip_version=4, enable_snat=None, num_internal_ports=1,
|
|||
router_append_interface(router, count=num_internal_ports,
|
||||
ip_version=ip_version, dual_stack=dual_stack)
|
||||
if enable_ha:
|
||||
ha_port_ip = kwargs.get('ha_port_ip', '169.254.192.1')
|
||||
ha_port_mac = kwargs.get('ha_port_mac', '12:34:56:78:2b:aa')
|
||||
router['ha'] = True
|
||||
router['ha_vr_id'] = 1
|
||||
router[lib_constants.HA_INTERFACE_KEY] = (get_ha_interface())
|
||||
router['ha_vr_id'] = vrrp_id or 1
|
||||
router[lib_constants.HA_INTERFACE_KEY] = (
|
||||
get_ha_interface(ip=ha_port_ip,
|
||||
mac=ha_port_mac))
|
||||
|
||||
if enable_snat is not None:
|
||||
router['enable_snat'] = enable_snat
|
||||
|
|
|
@ -523,6 +523,7 @@ class TestDvrRouter(framework.L3AgentTestFramework):
|
|||
extra_routes=False,
|
||||
enable_floating_ip=True,
|
||||
enable_centralized_fip=False,
|
||||
vrrp_id=None,
|
||||
**kwargs):
|
||||
if not agent:
|
||||
agent = self.agent
|
||||
|
@ -534,6 +535,7 @@ class TestDvrRouter(framework.L3AgentTestFramework):
|
|||
num_internal_ports=2,
|
||||
enable_gw=enable_gw,
|
||||
snat_bound_fip=snat_bound_fip,
|
||||
vrrp_id=vrrp_id,
|
||||
**kwargs)
|
||||
internal_ports = router.get(lib_constants.INTERFACE_KEY, [])
|
||||
router['distributed'] = True
|
||||
|
@ -1283,14 +1285,18 @@ class TestDvrRouter(framework.L3AgentTestFramework):
|
|||
|
||||
def _mocked_dvr_ha_router(self, agent, enable_ha=True, enable_gw=True,
|
||||
enable_centralized_fip=False,
|
||||
snat_bound_fip=False):
|
||||
snat_bound_fip=False,
|
||||
vrrp_id=None,
|
||||
**kwargs):
|
||||
r_info = self.generate_dvr_router_info(
|
||||
enable_ha=enable_ha,
|
||||
enable_snat=True,
|
||||
agent=agent,
|
||||
enable_gw=enable_gw,
|
||||
enable_centralized_fip=enable_centralized_fip,
|
||||
snat_bound_fip=snat_bound_fip)
|
||||
snat_bound_fip=snat_bound_fip,
|
||||
vrrp_id=vrrp_id,
|
||||
**kwargs)
|
||||
|
||||
r_snat_ns_name = namespaces.build_ns_name(dvr_snat_ns.SNAT_NS_PREFIX,
|
||||
r_info['id'])
|
||||
|
@ -1323,7 +1329,8 @@ class TestDvrRouter(framework.L3AgentTestFramework):
|
|||
|
||||
def _create_dvr_ha_router(self, agent, enable_gw=True,
|
||||
enable_centralized_fip=False,
|
||||
snat_bound_fip=False, ha_interface=True):
|
||||
snat_bound_fip=False, ha_interface=True,
|
||||
vrrp_id=None, **kwargs):
|
||||
get_ns_name = mock.patch.object(namespaces.RouterNamespace,
|
||||
'_get_ns_name').start()
|
||||
get_snat_ns_name = mock.patch.object(dvr_snat_ns.SnatNamespace,
|
||||
|
@ -1332,7 +1339,9 @@ class TestDvrRouter(framework.L3AgentTestFramework):
|
|||
mocked_r_ns_name,
|
||||
mocked_r_snat_ns_name) = self._mocked_dvr_ha_router(
|
||||
agent, ha_interface, enable_gw, enable_centralized_fip,
|
||||
snat_bound_fip)
|
||||
snat_bound_fip,
|
||||
vrrp_id=vrrp_id,
|
||||
**kwargs)
|
||||
|
||||
if not ha_interface:
|
||||
r_info['ha'] = True
|
||||
|
@ -1471,18 +1480,26 @@ class TestDvrRouter(framework.L3AgentTestFramework):
|
|||
|
||||
def _test_dvr_ha_router_failover_with_gw_and_fip(self, enable_gw,
|
||||
enable_centralized_fip,
|
||||
snat_bound_fip):
|
||||
snat_bound_fip,
|
||||
vrrp_id=None):
|
||||
self._setup_dvr_ha_agents()
|
||||
self._setup_dvr_ha_bridges()
|
||||
|
||||
router1 = self._create_dvr_ha_router(
|
||||
self.agent, enable_gw=enable_gw,
|
||||
enable_centralized_fip=enable_centralized_fip,
|
||||
snat_bound_fip=snat_bound_fip)
|
||||
snat_bound_fip=snat_bound_fip,
|
||||
vrrp_id=vrrp_id,
|
||||
ha_port_ip="169.254.192.100",
|
||||
ha_port_mac="12:34:56:78:2b:aa")
|
||||
router2 = self._create_dvr_ha_router(
|
||||
self.failover_agent, enable_gw=enable_gw,
|
||||
enable_centralized_fip=enable_centralized_fip,
|
||||
snat_bound_fip=snat_bound_fip)
|
||||
snat_bound_fip=snat_bound_fip,
|
||||
vrrp_id=vrrp_id,
|
||||
ha_port_ip="169.254.192.101",
|
||||
ha_port_mac="12:34:56:78:2b:bb")
|
||||
|
||||
master, backup = self._get_master_and_slave_routers(
|
||||
router1, router2, check_external_device=False)
|
||||
|
||||
|
@ -1496,12 +1513,18 @@ class TestDvrRouter(framework.L3AgentTestFramework):
|
|||
self._assert_ip_addresses_in_dvr_ha_snat_namespace_with_fip(backup)
|
||||
self._assert_no_ip_addresses_in_dvr_ha_snat_namespace_with_fip(master)
|
||||
|
||||
def _test_dvr_ha_router_failover(self, enable_gw):
|
||||
def _test_dvr_ha_router_failover(self, enable_gw, vrrp_id=None):
|
||||
self._setup_dvr_ha_agents()
|
||||
self._setup_dvr_ha_bridges()
|
||||
|
||||
router1 = self._create_dvr_ha_router(self.agent, enable_gw=enable_gw)
|
||||
router2 = self._create_dvr_ha_router(self.failover_agent, enable_gw)
|
||||
router1 = self._create_dvr_ha_router(
|
||||
self.agent, enable_gw=enable_gw, vrrp_id=vrrp_id,
|
||||
ha_port_ip="169.254.192.102",
|
||||
ha_port_mac="12:34:56:78:2b:cc")
|
||||
router2 = self._create_dvr_ha_router(
|
||||
self.failover_agent, enable_gw, vrrp_id=vrrp_id,
|
||||
ha_port_ip="169.254.192.103",
|
||||
ha_port_mac="12:34:56:78:2b:dd")
|
||||
|
||||
master, backup = self._get_master_and_slave_routers(
|
||||
router1, router2, check_external_device=False)
|
||||
|
@ -1518,22 +1541,31 @@ class TestDvrRouter(framework.L3AgentTestFramework):
|
|||
self._assert_no_ip_addresses_in_dvr_ha_snat_namespace(master)
|
||||
|
||||
def test_dvr_ha_router_failover_with_gw(self):
|
||||
self._test_dvr_ha_router_failover(enable_gw=True)
|
||||
self._test_dvr_ha_router_failover(enable_gw=True, vrrp_id=10)
|
||||
|
||||
def test_dvr_ha_router_failover_with_gw_and_floatingip(self):
|
||||
self._test_dvr_ha_router_failover_with_gw_and_fip(
|
||||
enable_gw=True, enable_centralized_fip=True, snat_bound_fip=True)
|
||||
enable_gw=True, enable_centralized_fip=True, snat_bound_fip=True,
|
||||
vrrp_id=11)
|
||||
|
||||
def test_dvr_ha_router_failover_without_gw(self):
|
||||
self._test_dvr_ha_router_failover(enable_gw=False)
|
||||
self._test_dvr_ha_router_failover(enable_gw=False, vrrp_id=12)
|
||||
|
||||
def test_dvr_non_ha_router_update(self):
|
||||
self._setup_dvr_ha_agents()
|
||||
self._setup_dvr_ha_bridges()
|
||||
|
||||
router1 = self._create_dvr_ha_router(self.agent)
|
||||
router2 = self._create_dvr_ha_router(self.failover_agent,
|
||||
ha_interface=False)
|
||||
router1 = self._create_dvr_ha_router(
|
||||
self.agent,
|
||||
vrrp_id=13,
|
||||
ha_port_ip="169.254.192.104",
|
||||
ha_port_mac="12:34:56:78:2b:ee")
|
||||
router2 = self._create_dvr_ha_router(
|
||||
self.failover_agent,
|
||||
ha_interface=False,
|
||||
vrrp_id=13,
|
||||
ha_port_ip="169.254.192.105",
|
||||
ha_port_mac="12:34:56:78:2b:ff")
|
||||
|
||||
r1_chsfr = mock.patch.object(self.agent,
|
||||
'check_ha_state_for_router').start()
|
||||
|
|
Loading…
Reference in New Issue