Fix IPv6 tests if ipv6-private-subnet is stateless

If the cloud has configured the ipv6-private-subnet to use stateless
addressing, such as slaac or dhcpv6-stateless, we need to not request
a fixed IP from neutron.

Story: 2006164
Task: 35674

Change-Id: I27e82b34a39bea8a987724e013081079f236894d
diff --git a/octavia_tempest_plugin/tests/api/v2/test_load_balancer.py b/octavia_tempest_plugin/tests/api/v2/test_load_balancer.py
index 555d34e..66d26cf 100644
--- a/octavia_tempest_plugin/tests/api/v2/test_load_balancer.py
+++ b/octavia_tempest_plugin/tests/api/v2/test_load_balancer.py
@@ -120,8 +120,9 @@
         self.assertEqual(CONF.load_balancer.provider, lb[const.PROVIDER])
         self.assertIsNotNone(lb[const.VIP_PORT_ID])
         if lb_kwargs[const.VIP_SUBNET_ID]:
-            self.assertEqual(lb_kwargs[const.VIP_ADDRESS],
-                             lb[const.VIP_ADDRESS])
+            if ip_version == 4 or self.lb_member_vip_ipv6_subnet_stateful:
+                self.assertEqual(lb_kwargs[const.VIP_ADDRESS],
+                                 lb[const.VIP_ADDRESS])
             self.assertEqual(lb_kwargs[const.VIP_SUBNET_ID],
                              lb[const.VIP_SUBNET_ID])
 
diff --git a/octavia_tempest_plugin/tests/test_base.py b/octavia_tempest_plugin/tests/test_base.py
index a4775da..e85fb0a 100644
--- a/octavia_tempest_plugin/tests/test_base.py
+++ b/octavia_tempest_plugin/tests/test_base.py
@@ -157,6 +157,7 @@
                                                  uuidutils.generate_uuid()}
                 cls.lb_member_1_ipv6_subnet = {'id': uuidutils.generate_uuid()}
                 cls.lb_member_2_ipv6_subnet = {'id': uuidutils.generate_uuid()}
+                cls.lb_member_vip_ipv6_subnet_stateful = True
             return
         elif CONF.load_balancer.test_network_override:
             if conf_lb.test_subnet_override:
@@ -182,6 +183,10 @@
                 cls.lb_member_vip_ipv6_subnet = override_ipv6_subnet
                 cls.lb_member_1_ipv6_subnet = override_ipv6_subnet
                 cls.lb_member_2_ipv6_subnet = override_ipv6_subnet
+                cls.lb_member_vip_ipv6_subnet_stateful = False
+                if (override_ipv6_subnet[0]['ipv6_address_mode'] ==
+                        'dhcpv6-stateful'):
+                    cls.lb_member_vip_ipv6_subnet_stateful = True
             else:
                 cls.lb_member_vip_ipv6_subnet = None
                 cls.lb_member_1_ipv6_subnet = None
@@ -303,6 +308,10 @@
             priv_ipv6_subnet = cls.os_admin.subnets_client.list_subnets(
                 name='ipv6-private-subnet')['subnets']
 
+            cls.lb_member_vip_ipv6_subnet_stateful = False
+            if (priv_ipv6_subnet[0]['ipv6_address_mode'] ==
+                    'dhcpv6-stateful'):
+                cls.lb_member_vip_ipv6_subnet_stateful = True
             if len(priv_ipv6_subnet) == 1:
                 cls.lb_member_vip_ipv6_subnet = priv_ipv6_subnet[0]
                 cls.lb_member_vip_ipv6_net = {
@@ -457,6 +466,10 @@
                     subnet = cls.os_admin.subnets_client.show_subnet(subnet_id)
                     network = ipaddress.IPv6Network(subnet['subnet']['cidr'])
                     lb_vip_address = str(network[ip_index])
+                    # If the subnet is IPv6 slaac or dhcpv6-stateless
+                    # neutron does not allow a fixed IP
+                    if not cls.lb_member_vip_ipv6_subnet_stateful:
+                        use_fixed_ip = False
             lb_kwargs[const.VIP_SUBNET_ID] = subnet_id
             if use_fixed_ip:
                 lb_kwargs[const.VIP_ADDRESS] = lb_vip_address