Wrap IPv6 address with brackets

If IPv6 address is not wrapped with brackets OpenFlow rules are
not properly installed.

Change-Id: Ib5836b004fd47671c4cdaa382c9376380beee448
Closes-Bug: #1863892
This commit is contained in:
Maciej Józefczyk 2020-02-19 15:40:09 +00:00 committed by Brian Haley
parent 17b1d9d573
commit a6122e33da
2 changed files with 40 additions and 6 deletions

View File

@ -790,11 +790,12 @@ class OvnProviderHelper(object):
return pool_key
def _extract_member_info(self, member):
mem_info = ''
mem_info = []
if member:
for mem in member.split(','):
mem_info += str(mem.split('_')[2]) + ','
return mem_info[:-1] # Remove the last ','
mem_ip_port = mem.split('_')[2]
mem_info.append(tuple(mem_ip_port.rsplit(':', 1)))
return mem_info
def _get_member_key(self, member, old_convention=False):
member_info = ''
@ -865,11 +866,22 @@ class OvnProviderHelper(object):
if pool_id not in lb_external_ids or not lb_external_ids[pool_id]:
continue
ips = self._extract_member_info(lb_external_ids[pool_id])
vip_ips[lb_vip + ':' + vip_port] = ips
ips = []
for member_ip, member_port in self._extract_member_info(
lb_external_ids[pool_id]):
if netaddr.IPNetwork(member_ip).version == 6:
ips.append('[%s]:%s' % (member_ip, member_port))
else:
ips.append('%s:%s' % (member_ip, member_port))
if netaddr.IPNetwork(lb_vip).version == 6:
lb_vip = '[%s]' % lb_vip
vip_ips[lb_vip + ':' + vip_port] = ','.join(ips)
if vip_fip:
vip_ips[vip_fip + ':' + vip_port] = ips
if netaddr.IPNetwork(vip_fip).version == 6:
vip_fip = '[%s]' % vip_fip
vip_ips[vip_fip + ':' + vip_port] = ','.join(ips)
return vip_ips

View File

@ -2772,3 +2772,25 @@ class TestOvnProviderHelper(TestOvnOctaviaBase):
def test__get_existing_pool_members(self):
ret = self.helper._get_existing_pool_members(self.pool_id)
self.assertEqual(ret, self.member_line)
def test__frame_lb_vips(self):
ret = self.helper._frame_vip_ips(self.ovn_lb.external_ids)
expected = {'10.22.33.4:80': '192.168.2.149:1010',
'123.123.123.123:80': '192.168.2.149:1010'}
self.assertEqual(expected, ret)
def test__frame_lb_vips_ipv6(self):
self.member_address = '2001:db8::1'
self.member_line = (
'member_%s_%s:%s_%s' %
(self.member_id, self.member_address,
self.member_port, self.member_subnet_id))
self.ovn_lb.external_ids = {
ovn_const.LB_EXT_IDS_VIP_KEY: 'fc00::',
ovn_const.LB_EXT_IDS_VIP_FIP_KEY: '2002::',
'pool_%s' % self.pool_id: self.member_line,
'listener_%s' % self.listener_id: '80:pool_%s' % self.pool_id}
ret = self.helper._frame_vip_ips(self.ovn_lb.external_ids)
expected = {'[2002::]:80': '[2001:db8::1]:1010',
'[fc00::]:80': '[2001:db8::1]:1010'}
self.assertEqual(expected, ret)