diff --git a/ovn_octavia_provider/helper.py b/ovn_octavia_provider/helper.py index d1803c23..31c56e00 100644 --- a/ovn_octavia_provider/helper.py +++ b/ovn_octavia_provider/helper.py @@ -926,20 +926,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 diff --git a/ovn_octavia_provider/tests/unit/test_helper.py b/ovn_octavia_provider/tests/unit/test_helper.py index 13bdb635..ac7e05a7 100644 --- a/ovn_octavia_provider/tests/unit/test_helper.py +++ b/ovn_octavia_provider/tests/unit/test_helper.py @@ -3722,6 +3722,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')