[stable-only] Fix to cover multiple listener on IPv6 LB
This patch fixes the issue where the calculation of the vips field failed when more than one listener was included in an IPv6 LB. Closes-Bug: 2052628 Change-Id: I37e660d5eaa45deb38ff127cf69195b0a9ef0846
This commit is contained in:
parent
58bdbbb0ee
commit
1413ae8324
|
@ -933,20 +933,28 @@ class OvnProviderHelper():
|
|||
for mb_ip, mb_port, mb_subnet, mb_id in self._extract_member_info(
|
||||
lb_external_ids[pool_id]):
|
||||
if not self._is_member_offline(ovn_lb, mb_id):
|
||||
if netaddr.IPNetwork(mb_ip).version == 6:
|
||||
ips.append(f'[{mb_ip}]:{mb_port}')
|
||||
else:
|
||||
ips.append(f'{mb_ip}:{mb_port}')
|
||||
mb_ip_formatted = (
|
||||
f'[{mb_ip}]:{mb_port}'
|
||||
if netaddr.IPNetwork(mb_ip).version == 6
|
||||
else f'{mb_ip}:{mb_port}'
|
||||
)
|
||||
ips.append(mb_ip_formatted)
|
||||
|
||||
if ips:
|
||||
if netaddr.IPNetwork(lb_vip).version == 6:
|
||||
lb_vip = f'[{lb_vip}]'
|
||||
vip_ips[lb_vip + ':' + vip_port] = ','.join(ips)
|
||||
lb_vip_formatted = (
|
||||
f'[{lb_vip}]'
|
||||
if netaddr.IPNetwork(lb_vip).version == 6
|
||||
else lb_vip
|
||||
)
|
||||
vip_ips[lb_vip_formatted + ':' + vip_port] = ','.join(ips)
|
||||
|
||||
if vip_fip:
|
||||
if netaddr.IPNetwork(vip_fip).version == 6:
|
||||
vip_fip = f'[{vip_fip}]'
|
||||
vip_ips[vip_fip + ':' + vip_port] = ','.join(ips)
|
||||
vip_fip_formatted = (
|
||||
f'[{vip_fip}]'
|
||||
if netaddr.IPNetwork(vip_fip).version == 6
|
||||
else vip_fip
|
||||
)
|
||||
vip_ips[vip_fip_formatted + ':' + vip_port] = ','.join(ips)
|
||||
|
||||
return vip_ips
|
||||
|
||||
|
|
|
@ -3740,6 +3740,33 @@ class TestOvnProviderHelper(ovn_base.TestOvnOctaviaBase):
|
|||
'[fc00::]:80': '[2001:db8::1]:1010'}
|
||||
self.assertEqual(expected, ret)
|
||||
|
||||
def test__frame_lb_vips_ipv6_multiple_listener_pool_member(self):
|
||||
listener2_id = uuidutils.generate_uuid()
|
||||
pool2_id = uuidutils.generate_uuid()
|
||||
member2_id = uuidutils.generate_uuid()
|
||||
member2_port = '1011'
|
||||
self.member_address = '2001:db8::1'
|
||||
member2_line = (
|
||||
'member_%s_%s:%s_%s' %
|
||||
(member2_id, self.member_address,
|
||||
member2_port, self.member_subnet_id))
|
||||
|
||||
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::',
|
||||
'pool_%s' % self.pool_id: self.member_line,
|
||||
'pool_%s' % pool2_id: member2_line,
|
||||
'listener_%s' % self.listener_id: '80:pool_%s' % self.pool_id,
|
||||
'listener_%s' % listener2_id: '443:pool_%s' % pool2_id}
|
||||
ret = self.helper._frame_vip_ips(self.ovn_lb, self.ovn_lb.external_ids)
|
||||
expected = {'[fc00::]:80': '[2001:db8::1]:1010',
|
||||
'[fc00::]:443': '[2001:db8::1]:1011'}
|
||||
self.assertEqual(expected, ret)
|
||||
|
||||
def test_check_lb_protocol(self):
|
||||
self.ovn_lb.protocol = ['tcp']
|
||||
ret = self.helper.check_lb_protocol(self.listener_id, 'udp')
|
||||
|
|
Loading…
Reference in New Issue