diff --git a/manila_tempest_tests/tests/scenario/manager.py b/manila_tempest_tests/tests/scenario/manager.py
index dede47a..c83dfe6 100644
--- a/manila_tempest_tests/tests/scenario/manager.py
+++ b/manila_tempest_tests/tests/scenario/manager.py
@@ -734,14 +734,15 @@
         return self.os_admin.networks_client.list_networks()['networks']
 
     def create_floating_ip(self, thing, external_network_id=None,
-                           port_id=None, client=None):
+                           port_id=None, ip_addr=None, client=None):
         """Create a floating IP and associates to a resource/port on Neutron"""
         if not external_network_id:
             external_network_id = CONF.network.public_network_id
         if not client:
             client = self.floating_ips_client
         if not port_id:
-            port_id, ip4 = self._get_server_port_id_and_ip4(thing)
+            port_id, ip4 = self._get_server_port_id_and_ip4(thing,
+                                                            ip_addr=ip_addr)
         else:
             ip4 = None
         result = client.create_floatingip(
diff --git a/manila_tempest_tests/tests/scenario/manager_share.py b/manila_tempest_tests/tests/scenario/manager_share.py
index eaffa35..a670876 100644
--- a/manila_tempest_tests/tests/scenario/manager_share.py
+++ b/manila_tempest_tests/tests/scenario/manager_share.py
@@ -158,10 +158,11 @@
     def init_remote_client(self, instance):
         server_ip = None
         if self.ipv6_enabled:
-            server_ip = self._get_ipv6_server_ip(instance)
+            server_ip = self._get_ip_server_ip(instance, ip_version=6)
         if not server_ip:
+            ip_addr = self._get_ip_server_ip(instance)
             # Obtain a floating IP
-            floating_ip = self.create_floating_ip(instance)
+            floating_ip = self.create_floating_ip(instance, ip_addr=ip_addr)
             self.floating_ips[instance['id']] = floating_ip
             server_ip = floating_ip['floating_ip_address']
 
@@ -328,7 +329,7 @@
         client = client or self.shares_v2_client
         if not CONF.share.multitenancy_enabled:
             if self.ipv6_enabled and not self.storage_network:
-                server_ip = self._get_ipv6_server_ip(instance)
+                server_ip = self._get_ip_server_ip(instance, ip_version=6)
             else:
                 server_ip = (
                     CONF.share.override_ip_for_nfs_access
@@ -379,15 +380,15 @@
 
         return locations
 
-    def _get_ipv6_server_ip(self, instance):
-        ipv6_addrs = []
+    def _get_ip_server_ip(self, instance, ip_version=4):
+        ip_addrs = []
         for network_name, nic_list in instance['addresses'].items():
             if network_name == self.storage_network_name:
                 continue
             for nic_data in nic_list:
-                if nic_data['version'] == 6:
-                    ipv6_addrs.append(nic_data['addr'])
-        return ipv6_addrs[0] if ipv6_addrs else None
+                if nic_data['version'] == ip_version:
+                    ip_addrs.append(nic_data['addr'])
+        return ip_addrs[0] if ip_addrs else None
 
     def _create_share(self, share_protocol=None, size=None, name=None,
                       snapshot_id=None, description=None, metadata=None,
