Merge "Bring up secondary IPs on member networks"

This commit is contained in:
Zuul 2018-12-12 20:36:49 +00:00 committed by Gerrit Code Review
commit 5f07d61cd8
2 changed files with 91 additions and 10 deletions

View File

@ -158,11 +158,6 @@ class BaseOS(object):
text = template_port.render(interface=netns_interface)
else:
for index, fixed_ip in enumerate(fixed_ips, -1):
if index == -1:
netns_ip_interface = netns_interface
else:
netns_ip_interface = "{int}:{ip}".format(
int=netns_interface, ip=index)
try:
ip_addr = fixed_ip['ip_address']
cidr = fixed_ip['subnet_cidr']
@ -179,7 +174,7 @@ class BaseOS(object):
except ValueError:
return webob.Response(
json=dict(message="Invalid network IP"), status=400)
new_text = template_port.render(interface=netns_ip_interface,
new_text = template_port.render(interface=netns_interface,
ipv6=ip.version == 6,
ip_address=ip.exploded,
broadcast=broadcast,

View File

@ -183,11 +183,8 @@ class TestPlugNetwork(base.TestCase):
def setUp(self):
super(TestPlugNetwork, self).setUp()
self.mock_platform = mock.patch("distro.id").start()
self.mock_platform.return_value = "ubuntu"
self.osutil = osutils.BaseOS.get_os_util()
self.test_plug = plug.Plug(self.osutil)
def test__generate_network_file_text_static_ip_ubuntu(self):
def __generate_network_file_text_static_ip(self):
netns_interface = 'eth1234'
FIXED_IP = '192.0.2.2'
BROADCAST = '192.0.2.255'
@ -232,3 +229,92 @@ class TestPlugNetwork(base.TestCase):
dest2=DEST2,
nexthop=NEXTHOP)
self.assertEqual(expected_text, text)
def __generate_network_file_text_two_static_ips(self):
netns_interface = 'eth1234'
FIXED_IP = '192.0.2.2'
BROADCAST = '192.0.2.255'
SUBNET_CIDR = '192.0.2.0/24'
NETMASK = '255.255.255.0'
DEST1 = '198.51.100.0/24'
DEST2 = '203.0.113.0/24'
NEXTHOP = '192.0.2.1'
MTU = 1450
FIXED_IP_IPV6 = '2001:0db8:0000:0000:0000:0000:0000:0001'
BROADCAST_IPV6 = '2001:0db8:ffff:ffff:ffff:ffff:ffff:ffff'
SUBNET_CIDR_IPV6 = '2001:db8::/32'
NETMASK_IPV6 = '32'
fixed_ips = [{'ip_address': FIXED_IP,
'subnet_cidr': SUBNET_CIDR,
'host_routes': [
{'destination': DEST1, 'nexthop': NEXTHOP},
{'destination': DEST2, 'nexthop': NEXTHOP}
]},
{'ip_address': FIXED_IP_IPV6,
'subnet_cidr': SUBNET_CIDR_IPV6,
'host_routes': []}
]
format_text = (
'\n\n# Generated by Octavia agent\n'
'auto {netns_interface}\n'
'iface {netns_interface} inet static\n'
'address {fixed_ip}\n'
'broadcast {broadcast}\n'
'netmask {netmask}\n'
'mtu {mtu}\n'
'up route add -net {dest1} gw {nexthop} dev {netns_interface}\n'
'down route del -net {dest1} gw {nexthop} dev {netns_interface}\n'
'up route add -net {dest2} gw {nexthop} dev {netns_interface}\n'
'down route del -net {dest2} gw {nexthop} dev {netns_interface}\n'
'post-up /sbin/iptables -t nat -A POSTROUTING -p udp -o '
'{netns_interface} -j MASQUERADE\n'
'post-down /sbin/iptables -t nat -D POSTROUTING -p udp -o '
'{netns_interface} -j MASQUERADE\n'
'\n\n# Generated by Octavia agent\n'
'auto {netns_interface}\n'
'iface {netns_interface} inet6 static\n'
'address {fixed_ip_ipv6}\n'
'broadcast {broadcast_ipv6}\n'
'netmask {netmask_ipv6}\n'
'mtu {mtu}\n'
'post-up /sbin/ip6tables -t nat -A POSTROUTING -p udp -o '
'{netns_interface} -j MASQUERADE\n'
'post-down /sbin/ip6tables -t nat -D POSTROUTING -p udp -o '
'{netns_interface} -j MASQUERADE\n')
template_port = osutils.j2_env.get_template('plug_port_ethX.conf.j2')
text = self.test_plug._osutils._generate_network_file_text(
netns_interface, fixed_ips, MTU, template_port)
expected_text = format_text.format(netns_interface=netns_interface,
fixed_ip=FIXED_IP,
broadcast=BROADCAST,
netmask=NETMASK,
mtu=MTU,
dest1=DEST1,
dest2=DEST2,
nexthop=NEXTHOP,
fixed_ip_ipv6=FIXED_IP_IPV6,
broadcast_ipv6=BROADCAST_IPV6,
netmask_ipv6=NETMASK_IPV6)
self.assertEqual(expected_text, text)
def _setup(self, os):
self.mock_platform.return_value = os
self.osutil = osutils.BaseOS.get_os_util()
self.test_plug = plug.Plug(self.osutil)
def test__generate_network_file_text_static_ip_ubuntu(self):
self._setup("ubuntu")
self.__generate_network_file_text_static_ip()
def test__generate_network_file_text_static_ip_centos(self):
self._setup("centos")
self.__generate_network_file_text_static_ip()
def test__generate_network_file_text_two_static_ips_ubuntu(self):
self._setup("ubuntu")
self.__generate_network_file_text_two_static_ips()
def test__generate_network_file_text_two_static_ips_centos(self):
self._setup("centos")
self.__generate_network_file_text_two_static_ips()