diff --git a/manila_tempest_tests/tests/scenario/manager.py b/manila_tempest_tests/tests/scenario/manager.py
index 6cbaa8b..85d2f27 100644
--- a/manila_tempest_tests/tests/scenario/manager.py
+++ b/manila_tempest_tests/tests/scenario/manager.py
@@ -14,7 +14,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import netaddr
 from oslo_log import log
 from oslo_utils import uuidutils
 from tempest.common import image as common_image
@@ -149,95 +148,6 @@
         if not CONF.service_available.neutron:
             raise cls.skipException('Neutron not available')
 
-    def _create_subnet(self, network, subnets_client=None,
-                       routers_client=None, namestart='subnet-smoke',
-                       **kwargs):
-        """Create a subnet for the given network
-
-        within the cidr block configured for tenant networks.
-        """
-        if not subnets_client:
-            subnets_client = self.subnets_client
-        if not routers_client:
-            routers_client = self.routers_client
-
-        def cidr_in_use(cidr, tenant_id):
-            """Check cidr existence
-
-            :returns: True if subnet with cidr already exist in tenant
-                  False else
-            """
-            cidr_in_use = self.os_admin.subnets_client.list_subnets(
-                tenant_id=tenant_id, cidr=cidr)['subnets']
-            return len(cidr_in_use) != 0
-
-        def _make_create_subnet_request(namestart, network,
-                                        ip_version, subnets_client, **kwargs):
-
-            subnet = dict(
-                name=data_utils.rand_name(namestart),
-                network_id=network['id'],
-                tenant_id=network['tenant_id'],
-                ip_version=ip_version,
-                **kwargs
-            )
-
-            if ip_version == 6:
-                subnet['ipv6_address_mode'] = 'slaac'
-                subnet['ipv6_ra_mode'] = 'slaac'
-
-            try:
-                return subnets_client.create_subnet(**subnet)
-            except lib_exc.Conflict as e:
-                if 'overlaps with another subnet' not in str(e):
-                    raise
-
-        result = None
-        str_cidr = None
-
-        use_default_subnetpool = kwargs.get('use_default_subnetpool', False)
-
-        ip_version = kwargs.pop('ip_version', 4)
-
-        if not use_default_subnetpool:
-
-            if ip_version == 6:
-                tenant_cidr = netaddr.IPNetwork(
-                    CONF.network.project_network_v6_cidr)
-                num_bits = CONF.network.project_network_v6_mask_bits
-            else:
-                tenant_cidr = netaddr.IPNetwork(
-                    CONF.network.project_network_cidr)
-                num_bits = CONF.network.project_network_mask_bits
-
-            # Repeatedly attempt subnet creation with sequential cidr
-            # blocks until an unallocated block is found.
-            for subnet_cidr in tenant_cidr.subnet(num_bits):
-                str_cidr = str(subnet_cidr)
-                if cidr_in_use(str_cidr, tenant_id=network['tenant_id']):
-                    continue
-
-                result = _make_create_subnet_request(
-                    namestart, network, ip_version, subnets_client,
-                    cidr=str_cidr, **kwargs)
-                if result is not None:
-                    break
-        else:
-            result = _make_create_subnet_request(
-                namestart, network, ip_version, subnets_client,
-                **kwargs)
-
-        self.assertIsNotNone(result)
-
-        subnet = result['subnet']
-        if str_cidr is not None:
-            self.assertEqual(subnet['cidr'], str_cidr)
-
-        self.addCleanup(test_utils.call_and_ignore_notfound_exc,
-                        subnets_client.delete_subnet, subnet['id'])
-
-        return subnet
-
     def _get_network_by_name_or_id(self, identifier):
 
         if uuidutils.is_uuid_like(identifier):
@@ -572,56 +482,3 @@
         router = self.routers_client.update_router(
             router['id'], **kwargs)['router']
         self.assertEqual(admin_state_up, router['admin_state_up'])
-
-    def create_networks(self, networks_client=None,
-                        routers_client=None, subnets_client=None,
-                        tenant_id=None, dns_nameservers=None,
-                        port_security_enabled=True):
-        """Create a network with a subnet connected to a router.
-
-        The baremetal driver is a special case since all nodes are
-        on the same shared network.
-
-        :param tenant_id: id of tenant to create resources in.
-        :param dns_nameservers: list of dns servers to send to subnet.
-        :returns: network, subnet, router
-        """
-        if CONF.network.shared_physical_network:
-            # NOTE(Shrews): This exception is for environments where tenant
-            # credential isolation is available, but network separation is
-            # not (the current baremetal case). Likely can be removed when
-            # test account mgmt is reworked:
-            # https://blueprints.launchpad.net/tempest/+spec/test-accounts
-            if not CONF.compute.fixed_network_name:
-                m = 'fixed_network_name must be specified in config'
-                raise lib_exc.InvalidConfiguration(m)
-            network = self._get_network_by_name_or_id(
-                CONF.compute.fixed_network_name)
-            router = None
-            subnet = None
-        else:
-            network = self.create_network(
-                networks_client=networks_client,
-                tenant_id=tenant_id,
-                port_security_enabled=port_security_enabled)
-            router = self._get_router(client=routers_client,
-                                      tenant_id=tenant_id)
-            subnet_kwargs = dict(network=network,
-                                 subnets_client=subnets_client,
-                                 routers_client=routers_client)
-            # use explicit check because empty list is a valid option
-            if dns_nameservers is not None:
-                subnet_kwargs['dns_nameservers'] = dns_nameservers
-            subnet = self._create_subnet(**subnet_kwargs)
-            if not routers_client:
-                routers_client = self.routers_client
-            router_id = router['id']
-            routers_client.add_router_interface(router_id,
-                                                subnet_id=subnet['id'])
-
-            # save a cleanup job to remove this association between
-            # router and subnet
-            self.addCleanup(test_utils.call_and_ignore_notfound_exc,
-                            routers_client.remove_router_interface, router_id,
-                            subnet_id=subnet['id'])
-        return network, subnet, router
diff --git a/manila_tempest_tests/tests/scenario/manager_share.py b/manila_tempest_tests/tests/scenario/manager_share.py
index e1d3a8f..af8f687 100644
--- a/manila_tempest_tests/tests/scenario/manager_share.py
+++ b/manila_tempest_tests/tests/scenario/manager_share.py
@@ -116,7 +116,7 @@
             'ip_version': self.ip_version,
             'use_default_subnetpool': self.ipv6_enabled
         }
-        self.subnet = self._create_subnet(
+        self.subnet = self.create_subnet(
             network=self.network,
             namestart="manila-share-sub",
             **subnet_ip_params)
