Merge "Fix duplicated routes exceptions" into stable/xena
This commit is contained in:
@@ -152,6 +152,11 @@ class KeepalivedVirtualRoute(object):
|
|||||||
LOG.warning("keepalived_use_no_track cfg option is True but "
|
LOG.warning("keepalived_use_no_track cfg option is True but "
|
||||||
"keepalived on host seems to not support this "
|
"keepalived on host seems to not support this "
|
||||||
"option")
|
"option")
|
||||||
|
# NOTE(mstinsky): neutron and keepalived are adding the same routes on
|
||||||
|
# primary routers. With this we ensure that both are adding the routes
|
||||||
|
# with the same procotol and prevent duplicated routes which result in
|
||||||
|
# neutron exception for ip route commands.
|
||||||
|
output += ' protocol static'
|
||||||
return output
|
return output
|
||||||
|
|
||||||
|
|
||||||
|
@@ -79,11 +79,11 @@ vrrp_instance VR_1 {
|
|||||||
%(int_port_ipv6)s dev %(internal_device_name)s scope link no_track
|
%(int_port_ipv6)s dev %(internal_device_name)s scope link no_track
|
||||||
}
|
}
|
||||||
virtual_routes {
|
virtual_routes {
|
||||||
0.0.0.0/0 via %(default_gateway_ip)s dev %(ex_device_name)s no_track
|
0.0.0.0/0 via %(default_gateway_ip)s dev %(ex_device_name)s no_track protocol static
|
||||||
8.8.8.0/24 via 19.4.4.4 no_track
|
8.8.8.0/24 via 19.4.4.4 no_track protocol static
|
||||||
%(extra_subnet_cidr)s dev %(ex_device_name)s scope link no_track
|
%(extra_subnet_cidr)s dev %(ex_device_name)s scope link no_track protocol static
|
||||||
}
|
}
|
||||||
}"""
|
}""" # noqa: E501 # pylint: disable=line-too-long
|
||||||
|
|
||||||
|
|
||||||
def get_ovs_bridge(br_name):
|
def get_ovs_bridge(br_name):
|
||||||
|
@@ -164,7 +164,7 @@ class KeepalivedConfTestCase(KeepalivedBaseTestCase,
|
|||||||
192.168.55.0/24 dev eth10 no_track
|
192.168.55.0/24 dev eth10 no_track
|
||||||
}
|
}
|
||||||
virtual_routes {
|
virtual_routes {
|
||||||
0.0.0.0/0 via 192.168.1.1 dev eth1 no_track
|
0.0.0.0/0 via 192.168.1.1 dev eth1 no_track protocol static
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
vrrp_instance VR_2 {
|
vrrp_instance VR_2 {
|
||||||
@@ -247,7 +247,7 @@ class KeepalivedConfWithoutNoTrackTestCase(KeepalivedConfTestCase):
|
|||||||
192.168.55.0/24 dev eth10
|
192.168.55.0/24 dev eth10
|
||||||
}
|
}
|
||||||
virtual_routes {
|
virtual_routes {
|
||||||
0.0.0.0/0 via 192.168.1.1 dev eth1
|
0.0.0.0/0 via 192.168.1.1 dev eth1 protocol static
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
vrrp_instance VR_2 {
|
vrrp_instance VR_2 {
|
||||||
@@ -323,11 +323,11 @@ class KeepalivedInstanceRoutesTestCase(KeepalivedBaseTestCase):
|
|||||||
|
|
||||||
def test_build_config(self):
|
def test_build_config(self):
|
||||||
expected = """ virtual_routes {
|
expected = """ virtual_routes {
|
||||||
0.0.0.0/0 via 1.0.0.254 dev eth0 no_track
|
0.0.0.0/0 via 1.0.0.254 dev eth0 no_track protocol static
|
||||||
::/0 via fe80::3e97:eff:fe26:3bfa/64 dev eth1 no_track
|
::/0 via fe80::3e97:eff:fe26:3bfa/64 dev eth1 no_track protocol static
|
||||||
10.0.0.0/8 via 1.0.0.1 no_track
|
10.0.0.0/8 via 1.0.0.1 no_track protocol static
|
||||||
20.0.0.0/8 via 2.0.0.2 no_track
|
20.0.0.0/8 via 2.0.0.2 no_track protocol static
|
||||||
30.0.0.0/8 dev eth0 scope link no_track
|
30.0.0.0/8 dev eth0 scope link no_track protocol static
|
||||||
}"""
|
}"""
|
||||||
with mock.patch.object(
|
with mock.patch.object(
|
||||||
keepalived, '_is_keepalived_use_no_track_supported',
|
keepalived, '_is_keepalived_use_no_track_supported',
|
||||||
@@ -337,11 +337,11 @@ class KeepalivedInstanceRoutesTestCase(KeepalivedBaseTestCase):
|
|||||||
|
|
||||||
def _get_no_track_less_expected_config(self):
|
def _get_no_track_less_expected_config(self):
|
||||||
expected = """ virtual_routes {
|
expected = """ virtual_routes {
|
||||||
0.0.0.0/0 via 1.0.0.254 dev eth0
|
0.0.0.0/0 via 1.0.0.254 dev eth0 protocol static
|
||||||
::/0 via fe80::3e97:eff:fe26:3bfa/64 dev eth1
|
::/0 via fe80::3e97:eff:fe26:3bfa/64 dev eth1 protocol static
|
||||||
10.0.0.0/8 via 1.0.0.1
|
10.0.0.0/8 via 1.0.0.1 protocol static
|
||||||
20.0.0.0/8 via 2.0.0.2
|
20.0.0.0/8 via 2.0.0.2 protocol static
|
||||||
30.0.0.0/8 dev eth0 scope link
|
30.0.0.0/8 dev eth0 scope link protocol static
|
||||||
}"""
|
}"""
|
||||||
return expected
|
return expected
|
||||||
|
|
||||||
@@ -395,7 +395,7 @@ class KeepalivedInstanceTestCase(KeepalivedBaseTestCase,
|
|||||||
192.168.1.0/24 dev eth1%(no_track)s
|
192.168.1.0/24 dev eth1%(no_track)s
|
||||||
}
|
}
|
||||||
virtual_routes {
|
virtual_routes {
|
||||||
0.0.0.0/0 via 192.168.1.1 dev eth1%(no_track)s
|
0.0.0.0/0 via 192.168.1.1 dev eth1%(no_track)s protocol static
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
vrrp_instance VR_2 {
|
vrrp_instance VR_2 {
|
||||||
@@ -416,7 +416,7 @@ class KeepalivedInstanceTestCase(KeepalivedBaseTestCase,
|
|||||||
192.168.3.0/24 dev eth6%(no_track)s
|
192.168.3.0/24 dev eth6%(no_track)s
|
||||||
192.168.55.0/24 dev eth10%(no_track)s
|
192.168.55.0/24 dev eth10%(no_track)s
|
||||||
}
|
}
|
||||||
}""" % {'no_track': no_track_value})
|
}""" % {'no_track': no_track_value}) # noqa: E501 # pylint: disable=line-too-long
|
||||||
|
|
||||||
self.assertEqual(expected, config.get_config_str())
|
self.assertEqual(expected, config.get_config_str())
|
||||||
|
|
||||||
@@ -501,7 +501,8 @@ class KeepalivedVirtualRouteTestCase(KeepalivedBaseTestCase):
|
|||||||
return_value=True):
|
return_value=True):
|
||||||
route = keepalived.KeepalivedVirtualRoute(
|
route = keepalived.KeepalivedVirtualRoute(
|
||||||
n_consts.IPv4_ANY, '1.2.3.4', 'eth0')
|
n_consts.IPv4_ANY, '1.2.3.4', 'eth0')
|
||||||
self.assertEqual('0.0.0.0/0 via 1.2.3.4 dev eth0 no_track',
|
self.assertEqual(
|
||||||
|
'0.0.0.0/0 via 1.2.3.4 dev eth0 no_track protocol static',
|
||||||
route.build_config())
|
route.build_config())
|
||||||
|
|
||||||
def test_virtual_route_with_dev_no_track_not_supported(self):
|
def test_virtual_route_with_dev_no_track_not_supported(self):
|
||||||
@@ -510,14 +511,14 @@ class KeepalivedVirtualRouteTestCase(KeepalivedBaseTestCase):
|
|||||||
return_value=False):
|
return_value=False):
|
||||||
route = keepalived.KeepalivedVirtualRoute(
|
route = keepalived.KeepalivedVirtualRoute(
|
||||||
n_consts.IPv4_ANY, '1.2.3.4', 'eth0')
|
n_consts.IPv4_ANY, '1.2.3.4', 'eth0')
|
||||||
self.assertEqual('0.0.0.0/0 via 1.2.3.4 dev eth0',
|
self.assertEqual('0.0.0.0/0 via 1.2.3.4 dev eth0 protocol static',
|
||||||
route.build_config())
|
route.build_config())
|
||||||
|
|
||||||
def test_virtual_route_with_dev_without_no_track(self):
|
def test_virtual_route_with_dev_without_no_track(self):
|
||||||
cfg.CONF.set_override('keepalived_use_no_track', False)
|
cfg.CONF.set_override('keepalived_use_no_track', False)
|
||||||
route = keepalived.KeepalivedVirtualRoute(n_consts.IPv4_ANY, '1.2.3.4',
|
route = keepalived.KeepalivedVirtualRoute(n_consts.IPv4_ANY, '1.2.3.4',
|
||||||
'eth0')
|
'eth0')
|
||||||
self.assertEqual('0.0.0.0/0 via 1.2.3.4 dev eth0',
|
self.assertEqual('0.0.0.0/0 via 1.2.3.4 dev eth0 protocol static',
|
||||||
route.build_config())
|
route.build_config())
|
||||||
|
|
||||||
def test_virtual_route_without_dev(self):
|
def test_virtual_route_without_dev(self):
|
||||||
@@ -525,7 +526,7 @@ class KeepalivedVirtualRouteTestCase(KeepalivedBaseTestCase):
|
|||||||
keepalived, '_is_keepalived_use_no_track_supported',
|
keepalived, '_is_keepalived_use_no_track_supported',
|
||||||
return_value=True):
|
return_value=True):
|
||||||
route = keepalived.KeepalivedVirtualRoute('50.0.0.0/8', '1.2.3.4')
|
route = keepalived.KeepalivedVirtualRoute('50.0.0.0/8', '1.2.3.4')
|
||||||
self.assertEqual('50.0.0.0/8 via 1.2.3.4 no_track',
|
self.assertEqual('50.0.0.0/8 via 1.2.3.4 no_track protocol static',
|
||||||
route.build_config())
|
route.build_config())
|
||||||
|
|
||||||
def test_virtual_route_without_dev_no_track_not_supported(self):
|
def test_virtual_route_without_dev_no_track_not_supported(self):
|
||||||
@@ -533,13 +534,14 @@ class KeepalivedVirtualRouteTestCase(KeepalivedBaseTestCase):
|
|||||||
keepalived, '_is_keepalived_use_no_track_supported',
|
keepalived, '_is_keepalived_use_no_track_supported',
|
||||||
return_value=False):
|
return_value=False):
|
||||||
route = keepalived.KeepalivedVirtualRoute('50.0.0.0/8', '1.2.3.4')
|
route = keepalived.KeepalivedVirtualRoute('50.0.0.0/8', '1.2.3.4')
|
||||||
self.assertEqual('50.0.0.0/8 via 1.2.3.4',
|
self.assertEqual('50.0.0.0/8 via 1.2.3.4 protocol static',
|
||||||
route.build_config())
|
route.build_config())
|
||||||
|
|
||||||
def test_virtual_route_without_dev_without_no_track(self):
|
def test_virtual_route_without_dev_without_no_track(self):
|
||||||
cfg.CONF.set_override('keepalived_use_no_track', False)
|
cfg.CONF.set_override('keepalived_use_no_track', False)
|
||||||
route = keepalived.KeepalivedVirtualRoute('50.0.0.0/8', '1.2.3.4')
|
route = keepalived.KeepalivedVirtualRoute('50.0.0.0/8', '1.2.3.4')
|
||||||
self.assertEqual('50.0.0.0/8 via 1.2.3.4', route.build_config())
|
self.assertEqual('50.0.0.0/8 via 1.2.3.4 protocol static',
|
||||||
|
route.build_config())
|
||||||
|
|
||||||
|
|
||||||
class KeepalivedTrackScriptTestCase(KeepalivedBaseTestCase):
|
class KeepalivedTrackScriptTestCase(KeepalivedBaseTestCase):
|
||||||
|
Reference in New Issue
Block a user