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 Closes-Bug: #1819160 Change-Id: I1216d96af40449ec16a852cc1f6c4f15c85f4546
This commit is contained in:
parent
8f35331c91
commit
c69a87405a
|
@ -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)
|
||||
|
||||
|
|
|
@ -60,6 +60,7 @@ def prepare_router_data(ip_version=lib_constants.IP_VERSION_4,
|
|||
v6_ext_gw_with_sub=True,
|
||||
snat_bound_fip=False,
|
||||
enable_pf_floating_ip=False,
|
||||
vrrp_id=None,
|
||||
**kwargs):
|
||||
fixed_ips = []
|
||||
subnets = []
|
||||
|
@ -160,9 +161,13 @@ def prepare_router_data(ip_version=lib_constants.IP_VERSION_4,
|
|||
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
|
||||
|
|
|
@ -35,7 +35,6 @@ from neutron.agent.linux import ip_lib
|
|||
from neutron.agent.linux import iptables_manager
|
||||
from neutron.common import constants as n_const
|
||||
from neutron.common import utils
|
||||
from neutron.tests import base as test_base
|
||||
from neutron.tests.common import l3_test_common
|
||||
from neutron.tests.common import machine_fixtures
|
||||
from neutron.tests.common import net_helpers
|
||||
|
@ -525,6 +524,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
|
||||
|
@ -536,6 +536,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
|
||||
|
@ -1282,14 +1283,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'])
|
||||
|
@ -1322,7 +1327,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,
|
||||
|
@ -1331,7 +1337,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
|
||||
|
@ -1473,9 +1481,15 @@ class TestDvrRouter(framework.L3AgentTestFramework):
|
|||
self._setup_dvr_ha_bridges()
|
||||
|
||||
router1 = self._create_dvr_ha_router(
|
||||
self.agent, enable_gw=True)
|
||||
self.agent, enable_gw=True,
|
||||
vrrp_id=14,
|
||||
ha_port_ip="169.254.192.106",
|
||||
ha_port_mac="12:34:56:78:3a:aa")
|
||||
router2 = self._create_dvr_ha_router(
|
||||
self.failover_agent, enable_gw=True)
|
||||
self.failover_agent, enable_gw=True,
|
||||
vrrp_id=14,
|
||||
ha_port_ip="169.254.192.107",
|
||||
ha_port_mac="12:34:56:78:3a:bb")
|
||||
|
||||
master, backup = self._get_master_and_slave_routers(
|
||||
router1, router2, check_external_device=False)
|
||||
|
@ -1508,18 +1522,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)
|
||||
|
||||
|
@ -1533,12 +1555,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)
|
||||
|
@ -1554,26 +1582,32 @@ class TestDvrRouter(framework.L3AgentTestFramework):
|
|||
self._assert_ip_addresses_in_dvr_ha_snat_namespace(backup)
|
||||
self._assert_no_ip_addresses_in_dvr_ha_snat_namespace(master)
|
||||
|
||||
@test_base.unstable_test("bug 1819160")
|
||||
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)
|
||||
|
||||
@test_base.unstable_test("bug 1819160")
|
||||
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)
|
||||
|
||||
@test_base.unstable_test("bug 1819160")
|
||||
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