diff --git a/.coveragerc b/.coveragerc
index 449e62c..398755b 100644
--- a/.coveragerc
+++ b/.coveragerc
@@ -1,4 +1,4 @@
 [run]
 branch = True
 source = tempest
-omit = tempest/tests/*,tempest/scenario/test_*.py,tempest/api/*
+omit = tempest/tests/*,tempest/scenario/test_*.py,tempest/api/*,tempest/serial_tests/*
diff --git a/HACKING.rst b/HACKING.rst
index caf954b..23bc61b 100644
--- a/HACKING.rst
+++ b/HACKING.rst
@@ -184,7 +184,7 @@
 the ``slow`` attribute is leveraged to run slow tests on a selective basis,
 to keep total `Zuul`_ job runtime down to a reasonable time frame.
 
-.. _Zuul: https://docs.openstack.org/infra/zuul/
+.. _Zuul: https://zuul-ci.org/docs/zuul/latest/
 
 Smoke Attribute
 ^^^^^^^^^^^^^^^
@@ -488,7 +488,7 @@
 Otherwise the bug fix won't be able to land in the project.
 
 Handily, `Zuul's cross-repository dependencies
-<https://docs.openstack.org/infra/zuul/user/gating.html#cross-project-dependencies>`_.
+<https://zuul-ci.org/docs/zuul/latest/gating.html#cross-project-dependencies>`_.
 can be leveraged to do without step 2 and to have steps 3 and 4 happen
 "atomically". To do that, make the patch written in step 1 to depend (refer to
 Zuul's documentation above) on the patch written in step 4. The commit message
diff --git a/README.rst b/README.rst
index 3cde2bf..7880357 100644
--- a/README.rst
+++ b/README.rst
@@ -3,7 +3,6 @@
 ========================
 
 .. image:: https://governance.openstack.org/tc/badges/tempest.svg
-    :target: https://governance.openstack.org/tc/reference/tags/index.html
 
 .. Change things from this point on
 
diff --git a/doc/source/contributor/contributing.rst b/doc/source/contributor/contributing.rst
index 139f0b7..81a1874 100644
--- a/doc/source/contributor/contributing.rst
+++ b/doc/source/contributor/contributing.rst
@@ -14,8 +14,9 @@
 Communication
 ~~~~~~~~~~~~~
 * IRC channel ``#openstack-qa`` at OFTC
-* Mailing list (prefix subjects with ``[qa]`` for faster responses)
-  http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-discuss
+* `Mailing list <https://lists.openstack.org/mailman3/lists/openstack-discuss.lists.openstack.org/>`_
+  (prefix subjects with ``[qa]`` for faster responses)
+
 
 Contacting the Core Team
 ~~~~~~~~~~~~~~~~~~~~~~~~
@@ -26,25 +27,29 @@
 ~~~~~~~~~~~~~~~~~~~~
 If you want to propose a new feature please read `Feature Proposal Process`_
 Tempest features are tracked on `Launchpad BP <https://blueprints.launchpad.net/tempest>`_.
+It also helps to bring the feature up during the next PTG and contact
+`the current PTL of QA project <https://governance.openstack.org/tc/reference/projects/>`_.
+Information about PTG is always posted on `the Mailing list
+<https://lists.openstack.org/mailman3/lists/openstack-discuss.lists.openstack.org/>`_.
 
 Task Tracking
 ~~~~~~~~~~~~~
 We track our tasks in `Launchpad <https://bugs.launchpad.net/tempest>`_.
 
-If you're looking for some smaller, easier work item to pick up and get started
+If you're looking for some smaller, easier work items to pick up and get started
 on, search for the 'low-hanging-fruit' tag.
 
 Reporting a Bug
 ~~~~~~~~~~~~~~~
-You found an issue and want to make sure we are aware of it? You can do so on
-`Launchpad <https://bugs.launchpad.net/tempest/+filebug>`__.
+Have you found an issue and want to make sure we are aware of it? You can do so
+on `Launchpad <https://bugs.launchpad.net/tempest/+filebug>`__.
 More info about Launchpad usage can be found on `OpenStack docs page
 <https://docs.openstack.org/contributors/common/task-tracking.html#launchpad>`_
 
 Getting Your Patch Merged
 ~~~~~~~~~~~~~~~~~~~~~~~~~
-All changes proposed to the Tempest require single ``Code-Review +2`` votes from
-Tempest core reviewers by giving ``Workflow +1`` vote. More detailed guidelines
+All changes proposed to the Tempest require a single ``Code-Review +2`` vote
+from a Tempest core followed by a ``Workflow +1`` vote. More detailed guidelines
 for reviewers are available at :doc:`../REVIEWING`.
 
 Project Team Lead Duties
diff --git a/doc/source/index.rst b/doc/source/index.rst
index 2f29cf2..0340f8d 100644
--- a/doc/source/index.rst
+++ b/doc/source/index.rst
@@ -83,6 +83,7 @@
    :maxdepth: 2
 
    HACKING
+   serial_tests
    REVIEWING
    microversion_testing
    test_removal
diff --git a/doc/source/library/api_microversion_testing.rst b/doc/source/library/api_microversion_testing.rst
index 8be924d..e979683 100644
--- a/doc/source/library/api_microversion_testing.rst
+++ b/doc/source/library/api_microversion_testing.rst
@@ -9,9 +9,9 @@
 
 Many of the OpenStack components have implemented API microversions.
 It is important to test those microversions in Tempest or external plugins.
-Tempest now provides stable interfaces to support to test the API microversions.
+Tempest now provides stable interfaces to support testing the API microversions.
 Based on the microversion range coming from the combination of both configuration
-and each test case, APIs request will be made with selected microversion.
+and each test case, APIs requests will be made with the selected microversion.
 
 This document explains the interfaces needed for microversion testing.
 
diff --git a/doc/source/library/clients.rst b/doc/source/library/clients.rst
index 0f4ba4c..fe9f4ca 100644
--- a/doc/source/library/clients.rst
+++ b/doc/source/library/clients.rst
@@ -6,11 +6,11 @@
 Tests make requests against APIs using service clients. Service clients are
 specializations of the ``RestClient`` class. The service clients that cover the
 APIs exposed by a service should be grouped in a service clients module.
-A service clients module is python module where all service clients are
+A service clients module is a Python module where all service clients are
 defined. If major API versions are available, submodules should be defined,
 one for each version.
 
-The ``ClientsFactory`` class helps initializing all clients of a specific
+The ``ClientsFactory`` class helps to initialize all clients of a specific
 service client module from a set of shared parameters.
 
 The ``ServiceClients`` class provides a convenient way to get access to all
diff --git a/doc/source/library/credential_providers.rst b/doc/source/library/credential_providers.rst
index d25f85c..8c9a16a 100644
--- a/doc/source/library/credential_providers.rst
+++ b/doc/source/library/credential_providers.rst
@@ -4,12 +4,12 @@
 ====================
 
 These library interfaces are used to deal with allocating credentials on demand
-either dynamically by calling keystone to allocate new credentials, or from
+either dynamically by calling Keystone to allocate new credentials, or from
 a list of preprovisioned credentials. These 2 modules are implementations of
 the same abstract credential providers class and can be used interchangeably.
 However, each implementation has some additional parameters that are used to
 influence the behavior of the modules. The API reference at the bottom of this
-doc shows the interface definitions for both modules, however that may be a bit
+doc shows the interface definitions for both modules, however, that may be a bit
 opaque. You can see some examples of how to leverage this interface below.
 
 Initialization Example
@@ -30,7 +30,7 @@
       # If a test requires a new account to work, it can have it via forcing
       # dynamic credentials. A new account will be produced only for that test.
       # In case admin credentials are not available for the account creation,
-      # the test should be skipped else it would fail.
+      # the test should be skipped else it will fail.
       identity_version = identity_version or CONF.identity.auth_version
       if CONF.auth.use_dynamic_credentials or force_tenant_isolation:
           admin_creds = get_configured_admin_credentials(
@@ -81,12 +81,12 @@
 Once you have a credential provider object created the access patterns for
 allocating and removing credentials are the same across both the dynamic
 and preprovisioned credentials. These are defined in the abstract
-CredentialProvider class. At a high level the credentials provider enables
-you to get 3 basic types of credentials at once (per object): a primary, alt,
+CredentialProvider class. At a high level, the credentials provider enables
+you to get 3 basic types of credentials at once (per object): primary, alt,
 and admin. You're also able to allocate a credential by role. These credentials
-are tracked by the provider object and delete must manually be called otherwise
-the created resources will not be deleted (or returned to the pool in the case
-of preprovisioned creds)
+are tracked by the provider object and delete must be called manually,
+otherwise, the created resources will not be deleted (or returned to the pool
+in the case of preprovisioned creds).
 
 Examples
 ''''''''
diff --git a/doc/source/plugins/plugin.rst b/doc/source/plugins/plugin.rst
index 0771318..31aa134 100644
--- a/doc/source/plugins/plugin.rst
+++ b/doc/source/plugins/plugin.rst
@@ -80,30 +80,30 @@
 
 Since all that's required for a plugin to be detected by Tempest is a valid
 setuptools entry point in the proper namespace there is no difference from the
-Tempest perspective on either creating a separate python package to
-house the plugin or adding the code to an existing python project. However,
+Tempest perspective on either creating a separate Python package to
+house the plugin or adding the code to an existing Python project. However,
 there are tradeoffs to consider when deciding which approach to take when
 creating a new plugin.
 
-If you create a separate python project for your plugin this makes a lot of
+If you create a separate Python project for your plugin this makes a lot of
 things much easier. Firstly it makes packaging and versioning much simpler, you
 can easily decouple the requirements for the plugin from the requirements for
 the other project. It lets you version the plugin independently and maintain a
 single version of the test code across project release boundaries (see the
 `Branchless Tempest Spec`_ for more details on this). It also greatly
 simplifies the install time story for external users. Instead of having to
-install the right version of a project in the same python namespace as Tempest
+install the right version of a project in the same Python namespace as Tempest
 they simply need to pip install the plugin in that namespace. It also means
 that users don't have to worry about inadvertently installing a Tempest plugin
 when they install another package.
 
 .. _Branchless Tempest Spec: https://specs.openstack.org/openstack/qa-specs/specs/tempest/implemented/branchless-tempest.html
 
-The sole advantage to integrating a plugin into an existing python project is
+The sole advantage of integrating a plugin into an existing Python project is
 that it enables you to land code changes at the same time you land test changes
 in the plugin. This reduces some of the burden on contributors by not having
-to land 2 changes to add a new API feature and then test it and doing it as a
-single combined commit.
+to land 2 changes to add a new API feature and then test it, and do it as a
+single combined commit instead.
 
 
 Plugin Class
@@ -122,7 +122,7 @@
   class MyPlugin(plugins.TempestPlugin):
 
 Then you need to ensure you locally define all of the mandatory methods in the
-abstract class, you can refer to the api doc below for a reference of what that
+abstract class, you can refer to the API doc below for a reference of what that
 entails.
 
 Abstract Plugin Class
@@ -135,7 +135,7 @@
 ================
 While there are no hard and fast rules for the structure of a plugin, there are
 basically no constraints on what the plugin looks like as long as the 2 steps
-above are done. However,  there are some recommended patterns to follow to make
+above are done. However, there are some recommended patterns to follow to make
 it easy for people to contribute and work with your plugin. For example, if you
 create a directory structure with something like::
 
@@ -214,7 +214,7 @@
 Parameters:
 
 * **name**: Name of the attribute used to access the ``ClientsFactory`` from
-  the ``ServiceClients`` instance. See example below.
+  the ``ServiceClients`` instance. See the example below.
 * **service_version**: Tempest enforces a single implementation for each
   service client. Available service clients are held in a ``ClientsRegistry``
   singleton, and registered with ``service_version``, which means that
@@ -229,7 +229,7 @@
 
 .. code-block:: python
 
-   # my_creds is instance of tempest.lib.auth.Credentials
+   # my_creds is an instance of tempest.lib.auth.Credentials
    # identity_uri is v2 or v3 depending on the configuration
    from tempest.lib.services import clients
 
@@ -241,13 +241,13 @@
 constraints on the structure of the configuration options exposed by the
 plugin.
 
-First ``service_version`` should be in the format `service_config[.version]`.
+Firstly, ``service_version`` should be in the format `service_config[.version]`.
 The `.version` part is optional, and should only be used if there are multiple
 versions of the same API available. The `service_config` must match the name of
 a configuration options group defined by the plugin. Different versions of one
 API must share the same configuration group.
 
-Second the configuration options group `service_config` must contain the
+Secondly, the configuration options group `service_config` must contain the
 following options:
 
 * `catalog_type`: corresponds to `service` in the catalog
@@ -257,10 +257,10 @@
 as they do not necessarily apply to all service clients.
 
 * `region`: default to identity.region
-* `build_timeout` : default to compute.build_timeout
+* `build_timeout`: default to compute.build_timeout
 * `build_interval`: default to compute.build_interval
 
-Third the service client classes should inherit from ``RestClient``, should
+Thirdly, the service client classes should inherit from ``RestClient``, should
 accept generic keyword arguments, and should pass those arguments to the
 ``__init__`` method of ``RestClient``. Extra arguments can be added. For
 instance:
@@ -276,7 +276,7 @@
            self.my_arg = my_arg
            self.my_args2 = my_arg
 
-Finally the service client should be structured in a python module, so that all
+Finally, the service client should be structured in a Python module, so that all
 service client classes are importable from it. Each major API version should
 have its own module.
 
@@ -299,7 +299,7 @@
    __all__ = ['API1Client', 'API2Client']
 
 The following folder and module structure is recommended for multiple major
-API version::
+API versions::
 
     plugin_dir/
       services/
@@ -325,14 +325,14 @@
 =============
 
 Tempest will automatically discover any installed plugins when it is run. So by
-just installing the python packages which contain your plugin you'll be using
+just installing the Python packages, which contain your plugin, you'll be using
 them with Tempest, nothing else is really required.
 
-However, you should take care when installing plugins. By their very nature
+However, you should take care when installing plugins. By their very nature,
 there are no guarantees when running Tempest with plugins enabled about the
 quality of the plugin. Additionally, while there is no limitation on running
 with multiple plugins, it's worth noting that poorly written plugins might not
-properly isolate their tests which could cause unexpected cross interactions
+properly isolate their tests which could cause unexpected cross-interactions
 between plugins.
 
 Notes for using plugins with virtualenvs
diff --git a/doc/source/serial_tests.rst b/doc/source/serial_tests.rst
new file mode 120000
index 0000000..6709115
--- /dev/null
+++ b/doc/source/serial_tests.rst
@@ -0,0 +1 @@
+../../tempest/serial_tests/README.rst
\ No newline at end of file
diff --git a/doc/source/supported_version.rst b/doc/source/supported_version.rst
index 89f0f90..968c821 100644
--- a/doc/source/supported_version.rst
+++ b/doc/source/supported_version.rst
@@ -9,10 +9,10 @@
 
 Tempest master supports the below OpenStack Releases:
 
+* 2024.1
 * 2023.2
 * 2023.1
 * Zed
-* Yoga
 
 For older OpenStack Release:
 
diff --git a/doc/source/tests/modules.rst b/doc/source/tests/modules.rst
index 026a7a5..697b011 100644
--- a/doc/source/tests/modules.rst
+++ b/doc/source/tests/modules.rst
@@ -19,3 +19,10 @@
    network/modules
    object_storage/modules
    volume/modules
+
+Serial Tests
+------------
+.. toctree::
+   :maxdepth: 2
+
+   serial_tests/modules
diff --git a/playbooks/devstack-tempest-ipv6.yaml b/playbooks/devstack-tempest-ipv6.yaml
index 568077e..89eec6d 100644
--- a/playbooks/devstack-tempest-ipv6.yaml
+++ b/playbooks/devstack-tempest-ipv6.yaml
@@ -17,6 +17,16 @@
     # fail early if anything missing the IPv6 settings or deployments.
     - devstack-ipv6-only-deployments-verification
   tasks:
+    - name: Run tempest cleanup init-saved-state
+      include_role:
+        name: tempest-cleanup
+      vars:
+        init_saved_state: true
+      when: (run_tempest_dry_cleanup is defined and run_tempest_dry_cleanup | bool) or
+            (run_tempest_cleanup is defined and run_tempest_cleanup | bool) or
+            (run_tempest_fail_if_leaked_resources is defined and run_tempest_fail_if_leaked_resources | bool) or
+            (run_tempest_cleanup_prefix is defined and run_tempest_cleanup_prefix | bool)
+
     - name: Run Tempest version <= 26.0.0
       include_role:
         name: run-tempest-26
@@ -30,3 +40,15 @@
       when:
         - zuul.branch is defined
         - zuul.branch not in ["stable/ocata", "stable/pike", "stable/queens", "stable/rocky", "stable/stein"]
+
+    - name: Run tempest cleanup dry-run
+      include_role:
+        name: tempest-cleanup
+      vars:
+        dry_run: true
+      when: run_tempest_dry_cleanup is defined and run_tempest_dry_cleanup | bool
+
+    - name: Run tempest cleanup
+      include_role:
+        name: tempest-cleanup
+      when: run_tempest_cleanup is defined and run_tempest_cleanup | bool
diff --git a/playbooks/devstack-tempest.yaml b/playbooks/devstack-tempest.yaml
index 269999c..5fb1afc 100644
--- a/playbooks/devstack-tempest.yaml
+++ b/playbooks/devstack-tempest.yaml
@@ -20,6 +20,11 @@
       include_role:
         name: acl-devstack-files
 
+    - name: Set source and destination host
+      include_role:
+        name: set-src-dest-host
+      when: tempest_set_src_dest_host is defined and tempest_set_src_dest_host | bool
+
     - name: Run tempest cleanup init-saved-state
       include_role:
         name: tempest-cleanup
@@ -27,7 +32,8 @@
         init_saved_state: true
       when: (run_tempest_dry_cleanup is defined and run_tempest_dry_cleanup | bool) or
             (run_tempest_cleanup is defined and run_tempest_cleanup | bool) or
-            (run_tempest_fail_if_leaked_resources is defined and run_tempest_fail_if_leaked_resources | bool)
+            (run_tempest_fail_if_leaked_resources is defined and run_tempest_fail_if_leaked_resources | bool) or
+            (run_tempest_cleanup_prefix is defined and run_tempest_cleanup_prefix | bool)
 
     - name: Run Tempest version <= 26.0.0
       include_role:
diff --git a/releasenotes/notes/Add-resource_name_prefix-config-option-26e0b7cfeffc48f9.yaml b/releasenotes/notes/Add-resource_name_prefix-config-option-26e0b7cfeffc48f9.yaml
new file mode 100644
index 0000000..0824c66
--- /dev/null
+++ b/releasenotes/notes/Add-resource_name_prefix-config-option-26e0b7cfeffc48f9.yaml
@@ -0,0 +1,10 @@
+---
+features:
+  - |
+    A new config option in the default section, resource_name_prefix,
+    is added to allow users to customize the name (specifically the prefix)
+    of the resources created by Tempest during a test run. By default it is
+    set to tempest.
+    Tempest cleanup CLI will then use this config option to cleanup only the
+    resources that match the prefix. Make sure this prefix does not match with
+    the resource name you do not want Tempest cleanup CLI to delete.
diff --git a/releasenotes/notes/Allow-tempest-cleanup-delete-resources-based-on-prefix-96d9562f1f30e979.yaml b/releasenotes/notes/Allow-tempest-cleanup-delete-resources-based-on-prefix-96d9562f1f30e979.yaml
new file mode 100644
index 0000000..872f664
--- /dev/null
+++ b/releasenotes/notes/Allow-tempest-cleanup-delete-resources-based-on-prefix-96d9562f1f30e979.yaml
@@ -0,0 +1,10 @@
+---
+features:
+  - |
+    We add a new argument, ``--prefix``, to ``tempest cleanup`` tool that will
+    allow users delete only resources that match the prefix. When this option
+    is used, ``saved_state.json`` file is not needed (no need to run with
+    ``--init-saved-state`` first). If there is one, it will be ignored and the
+    cleanup will be done based on the given prefix only.
+    Note, that some resources are not named thus they will not be deleted when
+    filtering based on the prefix.
diff --git a/releasenotes/notes/add-delete-image-from-specific-store-api-84c0ecd50724f6de.yaml b/releasenotes/notes/add-delete-image-from-specific-store-api-84c0ecd50724f6de.yaml
new file mode 100644
index 0000000..a8a0b70
--- /dev/null
+++ b/releasenotes/notes/add-delete-image-from-specific-store-api-84c0ecd50724f6de.yaml
@@ -0,0 +1,4 @@
+---
+features:
+  - |
+    Add delete image from specific store API to image V2 client
diff --git a/releasenotes/notes/add-option-to-specify-source-host.yaml b/releasenotes/notes/add-option-to-specify-source-host.yaml
new file mode 100644
index 0000000..f8df40a
--- /dev/null
+++ b/releasenotes/notes/add-option-to-specify-source-host.yaml
@@ -0,0 +1,5 @@
+---
+features:
+  - Add a new config options migration_source_host and migration_dest_host
+    in the compute section, which if is set takes source or destination
+    host from options, otherwise a host is chosen automatically.
diff --git a/releasenotes/notes/backup-driver-config-option-5f12e71c75b7f01b.yaml b/releasenotes/notes/backup-driver-config-option-5f12e71c75b7f01b.yaml
new file mode 100644
index 0000000..0126a06
--- /dev/null
+++ b/releasenotes/notes/backup-driver-config-option-5f12e71c75b7f01b.yaml
@@ -0,0 +1,7 @@
+---
+features:
+  - |
+    A new tempest.conf option called backup_driver was added to tempest to
+    indicate which backup driver is used by Cinder. This option allows us
+    to create a resource properly and avoid cleanup issues when Swift is used as the
+    backup driver.
diff --git a/releasenotes/notes/cleanup-decorator-aliases-e940b6e114e6f481.yaml b/releasenotes/notes/cleanup-decorator-aliases-e940b6e114e6f481.yaml
new file mode 100644
index 0000000..fd4a546
--- /dev/null
+++ b/releasenotes/notes/cleanup-decorator-aliases-e940b6e114e6f481.yaml
@@ -0,0 +1,9 @@
+---
+upgrade:
+  - |
+    The following decorators are no longer available in the ``tempest.test``
+    module. Use the ``tempest.common.utils`` module instead.
+
+    - ``services``
+    - ``requires_ext``
+    - ``is_extension_enabled``
diff --git a/releasenotes/notes/end-of-support-of-yoga-4ad45e91fe893024.yaml b/releasenotes/notes/end-of-support-of-yoga-4ad45e91fe893024.yaml
new file mode 100644
index 0000000..ceeb2b2
--- /dev/null
+++ b/releasenotes/notes/end-of-support-of-yoga-4ad45e91fe893024.yaml
@@ -0,0 +1,12 @@
+---
+prelude: >
+    This is an intermediate release during the 2024.1 development cycle to
+    mark the end of support for Yoga release in Tempest.
+    After this release, Tempest will support below OpenStack Releases:
+
+    * 2023.2
+    * 2023.1
+    * Zed
+
+    Current development of Tempest is for OpenStack 2024.1 development
+    cycle.
diff --git a/releasenotes/notes/identity-feature-opt-cleanup-caracal-7afd283855a07025.yaml b/releasenotes/notes/identity-feature-opt-cleanup-caracal-7afd283855a07025.yaml
new file mode 100644
index 0000000..67f6ede
--- /dev/null
+++ b/releasenotes/notes/identity-feature-opt-cleanup-caracal-7afd283855a07025.yaml
@@ -0,0 +1,21 @@
+---
+upgrade:
+  - |
+    The following deprecated options in the ``[identity-feature-enabled]``
+    section have been removed. Project tags API and application credentials
+    API are now always tested if identity v3 API is available.
+
+    - ``project_tag``
+    - ``application_credentials``
+
+  - |
+    Default value of the ``[identity-feature-enabled] access_rule`` option has
+    been changed from ``False`` to ``True`` and now the access rule API is
+    always tested when identity API is available.
+
+deprecations:
+  - |
+    The Keystone access_rule is enabled by default since Train release and we
+    no longer need a separate config in Tempest to enable it. Therefore
+    the ``[identity-feature-enabled] access_rule`` option has been deprecated
+    and will be removed in a future release.
diff --git a/releasenotes/notes/remove-compute-feature-enabled-block-migrate-cinder-iscsi-882da88096019f3c.yaml b/releasenotes/notes/remove-compute-feature-enabled-block-migrate-cinder-iscsi-882da88096019f3c.yaml
new file mode 100644
index 0000000..2808677
--- /dev/null
+++ b/releasenotes/notes/remove-compute-feature-enabled-block-migrate-cinder-iscsi-882da88096019f3c.yaml
@@ -0,0 +1,8 @@
+---
+upgrade:
+  - |
+    The deprecated ``[compute-feature-enabled] block_migrate_cinder_iscsi``
+    option has been removed.
+    Now the ``[compute-feature-enabled] block_migration_for_live_migration``
+    option is solely used to determine when to run block migration based tests
+    during live migration.
diff --git a/releasenotes/notes/remove-dns_servers_option-f49fdb2b4eb50f8f.yaml b/releasenotes/notes/remove-dns_servers_option-f49fdb2b4eb50f8f.yaml
new file mode 100644
index 0000000..6be1db9
--- /dev/null
+++ b/releasenotes/notes/remove-dns_servers_option-f49fdb2b4eb50f8f.yaml
@@ -0,0 +1,4 @@
+---
+upgrade:
+  - |
+    The deprecated ``[network] dns_servers`` option has been removed.
diff --git a/releasenotes/notes/remove-nova_cert-e2ee70a40e117e8a.yaml b/releasenotes/notes/remove-nova_cert-e2ee70a40e117e8a.yaml
new file mode 100644
index 0000000..1a292f0
--- /dev/null
+++ b/releasenotes/notes/remove-nova_cert-e2ee70a40e117e8a.yaml
@@ -0,0 +1,6 @@
+---
+upgrade:
+  - |
+    The deprecated ``[compute-feature-enabled] nova_cert`` option has been
+    removed. The nova-cert service was removed from nova in 16.0.0 release.
+    Tests of compute root certificates API have also been removed.
diff --git a/releasenotes/notes/remove-rdp_console-34e11f58d525905a.yaml b/releasenotes/notes/remove-rdp_console-34e11f58d525905a.yaml
new file mode 100644
index 0000000..4f03150
--- /dev/null
+++ b/releasenotes/notes/remove-rdp_console-34e11f58d525905a.yaml
@@ -0,0 +1,5 @@
+---
+upgrade:
+  - |
+    The deprecated ``[compute-feature-enabled] rdp_console`` config option has
+    been removed.
diff --git a/releasenotes/notes/remove-vnc-server-header-1a9731ba10242603.yaml b/releasenotes/notes/remove-vnc-server-header-1a9731ba10242603.yaml
new file mode 100644
index 0000000..cf14513
--- /dev/null
+++ b/releasenotes/notes/remove-vnc-server-header-1a9731ba10242603.yaml
@@ -0,0 +1,5 @@
+---
+upgrade:
+  - |
+    The deprecated ``[compute-feature-enabled] vnc_server_header`` option has
+    been removed.
diff --git a/releasenotes/notes/tempest-2024-1-release-d51f15c6bfe60b35.yaml b/releasenotes/notes/tempest-2024-1-release-d51f15c6bfe60b35.yaml
new file mode 100644
index 0000000..81d6a05
--- /dev/null
+++ b/releasenotes/notes/tempest-2024-1-release-d51f15c6bfe60b35.yaml
@@ -0,0 +1,17 @@
+---
+prelude: >
+    This release is to tag Tempest for OpenStack 2024.1 release.
+    This release marks the start of 2024.1 release support in Tempest.
+    After this release, Tempest will support below OpenStack Releases:
+
+    * 2024.1
+    * 2023.2
+    * 2023.1
+    * Zed
+
+    Current development of Tempest is for OpenStack 2024.2 development
+    cycle. Every Tempest commit is also tested against master during
+    the 2024.2 cycle. However, this does not necessarily mean that using
+    Tempest as of this tag will work against a 2024.2 (or future release)
+    cloud.
+    To be on safe side, use this tag to test the OpenStack 2024.1 release.
diff --git a/releasenotes/source/index.rst b/releasenotes/source/index.rst
index 989d3b5..e3018b4 100644
--- a/releasenotes/source/index.rst
+++ b/releasenotes/source/index.rst
@@ -6,6 +6,8 @@
    :maxdepth: 1
 
    unreleased
+   v38.0.0
+   v37.0.0
    v36.0.0
    v35.0.0
    v34.2.0
diff --git a/releasenotes/source/v37.0.0.rst b/releasenotes/source/v37.0.0.rst
new file mode 100644
index 0000000..72b8bc6
--- /dev/null
+++ b/releasenotes/source/v37.0.0.rst
@@ -0,0 +1,6 @@
+=====================
+v37.0.0 Release Notes
+=====================
+
+.. release-notes:: 37.0.0 Release Notes
+   :version: 37.0.0
diff --git a/releasenotes/source/v38.0.0.rst b/releasenotes/source/v38.0.0.rst
new file mode 100644
index 0000000..2664374
--- /dev/null
+++ b/releasenotes/source/v38.0.0.rst
@@ -0,0 +1,6 @@
+=====================
+v38.0.0 Release Notes
+=====================
+
+.. release-notes:: 38.0.0 Release Notes
+   :version: 38.0.0
diff --git a/roles/set-src-dest-host/defaults/main.yaml b/roles/set-src-dest-host/defaults/main.yaml
new file mode 100644
index 0000000..fea05c8
--- /dev/null
+++ b/roles/set-src-dest-host/defaults/main.yaml
@@ -0,0 +1 @@
+devstack_base_dir: /opt/stack
diff --git a/roles/set-src-dest-host/tasks/main.yaml b/roles/set-src-dest-host/tasks/main.yaml
new file mode 100644
index 0000000..78b7a2c
--- /dev/null
+++ b/roles/set-src-dest-host/tasks/main.yaml
@@ -0,0 +1,29 @@
+- name: Find out hostnames
+  set_fact:
+      devstack_hostnames: "{{ devstack_hostnames|default([]) + [hostvars[zj_item]['ansible_hostname'] | default('unknown')] }}"
+  loop: "{{ query('inventory_hostnames', 'all,!localhost') }}"
+  loop_control:
+    loop_var: zj_item
+  ignore_errors: yes  # noqa ignore-errors
+
+- name: Found hostnames
+  debug:
+    msg: |
+      # Available hosts
+      {{ devstack_hostnames }}
+
+- name: Set migration_source_host in tempest.conf
+  become: true
+  community.general.ini_file:
+    path: "{{ devstack_base_dir }}/tempest/etc/tempest.conf"
+    section: compute
+    option: migration_source_host
+    value: "{{ devstack_hostnames[0] }}"
+
+- name: Set migration_dest_host in tempest.conf
+  become: true
+  community.general.ini_file:
+    path: "{{ devstack_base_dir }}/tempest/etc/tempest.conf"
+    section: compute
+    option: migration_dest_host
+    value: "{{ devstack_hostnames[1] }}"
diff --git a/roles/tempest-cleanup/README.rst b/roles/tempest-cleanup/README.rst
index d1fad90..d43319c 100644
--- a/roles/tempest-cleanup/README.rst
+++ b/roles/tempest-cleanup/README.rst
@@ -40,6 +40,12 @@
    some must have been leaked. This can be also used to verify that tempest
    cleanup was successful.
 
+.. zuul:rolevar:: run_tempest_cleanup_prefix
+   :default: false
+
+   When true, tempest cleanup will be called with '--prefix tempest' to delete
+   only resources with names that match the prefix. This option can be used
+   together with dry_run.
 
 Role usage
 ----------
diff --git a/roles/tempest-cleanup/defaults/main.yaml b/roles/tempest-cleanup/defaults/main.yaml
index ce78bdb..8060b29 100644
--- a/roles/tempest-cleanup/defaults/main.yaml
+++ b/roles/tempest-cleanup/defaults/main.yaml
@@ -2,3 +2,4 @@
 init_saved_state: false
 dry_run: false
 run_tempest_fail_if_leaked_resources: false
+run_tempest_cleanup_prefix: false
diff --git a/roles/tempest-cleanup/tasks/dry_run.yaml b/roles/tempest-cleanup/tasks/dry_run.yaml
index 46749ab..07e1b63 100644
--- a/roles/tempest-cleanup/tasks/dry_run.yaml
+++ b/roles/tempest-cleanup/tasks/dry_run.yaml
@@ -5,3 +5,12 @@
   command: tox -evenv-tempest -- tempest cleanup --dry-run --debug
   args:
     chdir: "{{ devstack_base_dir }}/tempest"
+  when: not run_tempest_cleanup_prefix
+
+- name: Run tempest cleanup dry-run with tempest prefix
+  become: yes
+  become_user: tempest
+  command: tox -evenv-tempest -- tempest cleanup --dry-run --debug --prefix tempest
+  args:
+    chdir: "{{ devstack_base_dir }}/tempest"
+  when: run_tempest_cleanup_prefix
\ No newline at end of file
diff --git a/roles/tempest-cleanup/tasks/main.yaml b/roles/tempest-cleanup/tasks/main.yaml
index c1d63f0..7ef4928 100644
--- a/roles/tempest-cleanup/tasks/main.yaml
+++ b/roles/tempest-cleanup/tasks/main.yaml
@@ -27,6 +27,15 @@
       command: tox -evenv-tempest -- tempest cleanup --debug
       args:
         chdir: "{{ devstack_base_dir }}/tempest"
+      when: not run_tempest_cleanup_prefix
+
+    - name: Run tempest cleanup with tempest prefix
+      become: yes
+      become_user: tempest
+      command: tox -evenv-tempest -- tempest cleanup --debug --prefix tempest
+      args:
+        chdir: "{{ devstack_base_dir }}/tempest"
+      when: run_tempest_cleanup_prefix
 
 - when:
     - run_tempest_fail_if_leaked_resources
diff --git a/tempest/README.rst b/tempest/README.rst
index b345032..b300dcb 100644
--- a/tempest/README.rst
+++ b/tempest/README.rst
@@ -8,7 +8,7 @@
 implementations for both correctness, as well as a burn in tool for
 OpenStack clouds.
 
-As such Tempest tests come in many flavors, each with their own rules
+As such Tempest tests come in many flavors, each with its own rules
 and guidelines. Below is the overview of the Tempest repository structure
 to make this clear.
 
@@ -17,6 +17,7 @@
    tempest/
       api/ - API tests
       scenario/ - complex scenario tests
+      serial_tests/ - tests that run always in the serial mode
       tests/ - unit tests for Tempest internals
 
 Each of these directories contains different types of tests. What
@@ -41,13 +42,20 @@
 ---------------------------
 
 Scenario tests are complex "through path" tests for OpenStack
-functionality. They are typically a series of steps where complicated
+functionality. They are typically a series of steps where a complicated
 state requiring multiple services is set up exercised, and torn down.
 
 Scenario tests should not use the existing Python clients for OpenStack,
 but should instead use the Tempest implementations of clients.
 
 
+:ref:`serial_tests_guide`
+--------------------------------
+
+Tests within this category will always be executed serially from the rest of
+the test cases.
+
+
 :ref:`unit_tests_field_guide`
 -----------------------------
 
diff --git a/tempest/api/README.rst b/tempest/api/README.rst
index a796922..7051230 100644
--- a/tempest/api/README.rst
+++ b/tempest/api/README.rst
@@ -7,20 +7,20 @@
 What are these tests?
 ---------------------
 
-One of Tempest's prime function is to ensure that your OpenStack cloud
+One of Tempest's prime functions is to ensure that your OpenStack cloud
 works with the OpenStack API as documented. The current largest
 portion of Tempest code is devoted to test cases that do exactly this.
 
 It's also important to test not only the expected positive path on
 APIs, but also to provide them with invalid data to ensure they fail
 in expected and documented ways. The latter type of tests is called
-``negative tests`` in Tempest source code. Over the course of the OpenStack
-project Tempest has discovered many fundamental bugs by doing just
+``negative tests`` in Tempest source code. Throughout the OpenStack
+project, Tempest has discovered many fundamental bugs by doing just
 this.
 
 In order for some APIs to return meaningful results, there must be
 enough data in the system. This means these tests might start by
-spinning up a server, image, etc, then operating on it.
+spinning up a server, image, etc., and then operating on it.
 
 
 Why are these tests in Tempest?
@@ -32,7 +32,7 @@
 
 It could be argued that some of the negative testing could be done
 back in the projects themselves, and we might evolve there over time,
-but currently in the OpenStack gate this is a fundamentally important
+but currently, in the OpenStack gate, this is a fundamentally important
 place to keep things.
 
 
@@ -43,7 +43,7 @@
 OpenStack API, as we want to ensure that bugs aren't hidden by the
 official clients.
 
-They should test specific API calls, and can build up complex state if
+They should test specific API calls and can build up complex states if
 it's needed for the API call to be meaningful.
 
 They should send not only good data, but bad data at the API and look
diff --git a/tempest/api/compute/admin/test_agents.py b/tempest/api/compute/admin/test_agents.py
index f54fb22..8fc155b 100644
--- a/tempest/api/compute/admin/test_agents.py
+++ b/tempest/api/compute/admin/test_agents.py
@@ -51,7 +51,9 @@
             # If you try to create an agent with the same hypervisor,
             # os and architecture as an existing agent, Nova will return
             # an HTTPConflict or HTTPServerError.
-            kwargs[rand_key] = data_utils.rand_name(kwargs[rand_key])
+            kwargs[rand_key] = data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name=kwargs[rand_key])
         return kwargs
 
     @decorators.idempotent_id('1fc6bdc8-0b6d-4cc7-9f30-9b04fabe5b90')
diff --git a/tempest/api/compute/admin/test_aggregates_negative.py b/tempest/api/compute/admin/test_aggregates_negative.py
index 7b115ce..c284370 100644
--- a/tempest/api/compute/admin/test_aggregates_negative.py
+++ b/tempest/api/compute/admin/test_aggregates_negative.py
@@ -15,10 +15,13 @@
 
 from tempest.api.compute import base
 from tempest.common import tempest_fixtures as fixtures
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
 
+CONF = config.CONF
+
 
 class AggregatesAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
     """Tests Aggregates API that require admin privileges"""
@@ -40,7 +43,9 @@
                      if v['status'] == 'enabled' and v['state'] == 'up']
 
     def _create_test_aggregate(self):
-        aggregate_name = data_utils.rand_name(self.aggregate_name_prefix)
+        aggregate_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.aggregate_name_prefix)
         aggregate = (self.client.create_aggregate(name=aggregate_name)
                      ['aggregate'])
         self.addCleanup(self.client.delete_aggregate, aggregate['id'])
@@ -50,7 +55,9 @@
     @decorators.idempotent_id('86a1cb14-da37-4a70-b056-903fd56dfe29')
     def test_aggregate_create_as_user(self):
         """Regular user is not allowed to create an aggregate"""
-        aggregate_name = data_utils.rand_name(self.aggregate_name_prefix)
+        aggregate_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.aggregate_name_prefix)
         self.assertRaises(lib_exc.Forbidden,
                           self.aggregates_client.create_aggregate,
                           name=aggregate_name)
@@ -125,7 +132,9 @@
     def test_aggregate_add_non_exist_host(self):
         """Adding a non-exist host to an aggregate should fail"""
         while True:
-            non_exist_host = data_utils.rand_name('nonexist_host')
+            non_exist_host = data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name='nonexist_host')
             if non_exist_host not in self.hosts:
                 break
         aggregate = self._create_test_aggregate()
diff --git a/tempest/api/compute/admin/test_create_server.py b/tempest/api/compute/admin/test_create_server.py
index ccdfbf3..293e284 100644
--- a/tempest/api/compute/admin/test_create_server.py
+++ b/tempest/api/compute/admin/test_create_server.py
@@ -51,7 +51,8 @@
 
         def create_flavor_with_ephemeral(ephem_disk):
             name = 'flavor_with_ephemeral_%s' % ephem_disk
-            flavor_name = data_utils.rand_name(name)
+            flavor_name = data_utils.rand_name(
+                prefix=CONF.resource_name_prefix, name=name)
 
             ram = flavor_base['ram']
             vcpus = flavor_base['vcpus']
diff --git a/tempest/api/compute/admin/test_flavors.py b/tempest/api/compute/admin/test_flavors.py
index 294b1ab..cece905 100644
--- a/tempest/api/compute/admin/test_flavors.py
+++ b/tempest/api/compute/admin/test_flavors.py
@@ -16,10 +16,13 @@
 import uuid
 
 from tempest.api.compute import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
 
+CONF = config.CONF
+
 
 class FlavorsAdminTestJSON(base.BaseV2ComputeAdminTest):
     """Tests Flavors API Create and Delete that require admin privileges"""
@@ -76,7 +79,9 @@
 
         This operation requires the user to have 'admin' role
         """
-        flavor_name = data_utils.rand_name(self.flavor_name_prefix)
+        flavor_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.flavor_name_prefix)
 
         # Create the flavor
         self.create_flavor(name=flavor_name,
@@ -107,7 +112,9 @@
             self.assertEqual(flavor['OS-FLV-EXT-DATA:ephemeral'], 0)
             self.assertEqual(flavor['os-flavor-access:is_public'], True)
 
-        flavor_name = data_utils.rand_name(self.flavor_name_prefix)
+        flavor_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.flavor_name_prefix)
         new_flavor_id = data_utils.rand_int_id(start=1000)
 
         # Create the flavor
@@ -143,7 +150,9 @@
         tenant is not automatically added access list.
         This operation requires the user to have 'admin' role
         """
-        flavor_name = data_utils.rand_name(self.flavor_name_prefix)
+        flavor_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.flavor_name_prefix)
 
         # Create the flavor
         self.create_flavor(name=flavor_name,
@@ -178,7 +187,9 @@
 
         Try to List/Get flavor with another user
         """
-        flavor_name = data_utils.rand_name(self.flavor_name_prefix)
+        flavor_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.flavor_name_prefix)
 
         # Create the flavor
         self.create_flavor(name=flavor_name,
@@ -192,8 +203,11 @@
     @decorators.idempotent_id('fb9cbde6-3a0e-41f2-a983-bdb0a823c44e')
     def test_is_public_string_variations(self):
         """Test creating public and non public flavors"""
-        flavor_name_not_public = data_utils.rand_name(self.flavor_name_prefix)
-        flavor_name_public = data_utils.rand_name(self.flavor_name_prefix)
+        prefix = CONF.resource_name_prefix
+        flavor_name_not_public = data_utils.rand_name(
+            prefix=prefix, name=self.flavor_name_prefix)
+        flavor_name_public = data_utils.rand_name(
+            prefix=prefix, name=self.flavor_name_prefix)
 
         # Create a non public flavor
         self.create_flavor(name=flavor_name_not_public,
diff --git a/tempest/api/compute/admin/test_flavors_extra_specs.py b/tempest/api/compute/admin/test_flavors_extra_specs.py
index da95660..5829269 100644
--- a/tempest/api/compute/admin/test_flavors_extra_specs.py
+++ b/tempest/api/compute/admin/test_flavors_extra_specs.py
@@ -14,9 +14,12 @@
 #    under the License.
 
 from tempest.api.compute import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 
+CONF = config.CONF
+
 
 class FlavorsExtraSpecsTestJSON(base.BaseV2ComputeAdminTest):
     """Tests Flavor Extra Spec API extension.
@@ -28,7 +31,8 @@
     @classmethod
     def resource_setup(cls):
         super(FlavorsExtraSpecsTestJSON, cls).resource_setup()
-        flavor_name = data_utils.rand_name('test_flavor')
+        flavor_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='test_flavor')
         ram = 512
         vcpus = 1
         disk = 10
@@ -139,7 +143,9 @@
     @decorators.idempotent_id('d3114f03-b0f2-4dc7-be11-70c0abc178b3')
     def test_flavor_update_with_custom_namespace(self):
         """Test flavor creation with a custom namespace, key and value"""
-        flavor_name = data_utils.rand_name(self.flavor_name_prefix)
+        flavor_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.flavor_name_prefix)
         flavor_id = self.create_flavor(ram=self.ram,
                                        vcpus=self.vcpus,
                                        disk=self.disk,
diff --git a/tempest/api/compute/admin/test_flavors_extra_specs_negative.py b/tempest/api/compute/admin/test_flavors_extra_specs_negative.py
index 6822614..7f518d2 100644
--- a/tempest/api/compute/admin/test_flavors_extra_specs_negative.py
+++ b/tempest/api/compute/admin/test_flavors_extra_specs_negative.py
@@ -15,10 +15,13 @@
 #    under the License.
 
 from tempest.api.compute import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
 
+CONF = config.CONF
+
 
 class FlavorsExtraSpecsNegativeTestJSON(base.BaseV2ComputeAdminTest):
     """Negative Tests Flavor Extra Spec API extension.
@@ -30,7 +33,8 @@
     def resource_setup(cls):
         super(FlavorsExtraSpecsNegativeTestJSON, cls).resource_setup()
 
-        flavor_name = data_utils.rand_name('test_flavor')
+        flavor_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='test_flavor')
         ram = 512
         vcpus = 1
         disk = 10
diff --git a/tempest/api/compute/admin/test_hosts.py b/tempest/api/compute/admin/test_hosts.py
index 30f3388..0d79570 100644
--- a/tempest/api/compute/admin/test_hosts.py
+++ b/tempest/api/compute/admin/test_hosts.py
@@ -68,7 +68,9 @@
         """Showing nova host details"""
         hosts = self.client.list_hosts()['hosts']
 
-        hosts = [host for host in hosts if host['service'] == 'compute']
+        hosts = [host for host in hosts if (
+            host['service'] == 'compute' and
+            not host['host_name'].endswith('-ironic'))]
         self.assertNotEmpty(hosts)
 
         for host in hosts:
diff --git a/tempest/api/compute/admin/test_keypairs_v210.py b/tempest/api/compute/admin/test_keypairs_v210.py
index 3068127..5c5031b 100644
--- a/tempest/api/compute/admin/test_keypairs_v210.py
+++ b/tempest/api/compute/admin/test_keypairs_v210.py
@@ -14,9 +14,12 @@
 #    under the License.
 
 from tempest.api.compute.keypairs import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 
+CONF = config.CONF
+
 
 class KeyPairsV210TestJSON(base.BaseKeypairTest):
     """Tests KeyPairs API with microversion higher than 2.9"""
@@ -33,7 +36,8 @@
     def _create_and_check_keypairs(self, user_id):
         key_list = list()
         for _ in range(2):
-            k_name = data_utils.rand_name('keypair')
+            k_name = data_utils.rand_name(
+                prefix=CONF.resource_name_prefix, name='keypair')
             keypair = self.create_keypair(k_name,
                                           keypair_type='ssh',
                                           user_id=user_id,
diff --git a/tempest/api/compute/admin/test_live_migration.py b/tempest/api/compute/admin/test_live_migration.py
index d68334f..f6a1ae9 100644
--- a/tempest/api/compute/admin/test_live_migration.py
+++ b/tempest/api/compute/admin/test_live_migration.py
@@ -175,9 +175,6 @@
     @testtools.skipIf(not CONF.compute_feature_enabled.
                       block_migration_for_live_migration,
                       'Block Live migration not available')
-    @testtools.skipIf(not CONF.compute_feature_enabled.
-                      block_migrate_cinder_iscsi,
-                      'Block Live migration not configured for iSCSI')
     @utils.services('volume')
     def test_live_block_migration_with_attached_volume(self):
         """Test the live-migration of an instance with an attached volume.
@@ -214,7 +211,8 @@
         self.assertEqual(volume_id1, volume_id2)
 
     def _create_net_subnet(self, name, cidr):
-        net_name = data_utils.rand_name(name=name)
+        net_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name=name)
         net = self.networks_client.create_network(name=net_name)['network']
         self.addClassResourceCleanup(
             self.networks_client.delete_network, net['id'])
@@ -228,7 +226,8 @@
         return net
 
     def _create_port(self, network_id, name):
-        name = data_utils.rand_name(name=name)
+        name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name=name)
         port = self.ports_client.create_port(name=name,
                                              network_id=network_id)['port']
         self.addClassResourceCleanup(test_utils.call_and_ignore_notfound_exc,
@@ -244,7 +243,8 @@
         subport = self._create_port(network_id=net['id'], name='subport')
 
         trunk = self.trunks_client.create_trunk(
-            name=data_utils.rand_name('trunk'),
+            name=data_utils.rand_name(
+                prefix=CONF.resource_name_prefix, name='trunk'),
             port_id=parent['id'],
             sub_ports=[{"segmentation_id": 42, "port_id": subport['id'],
                         "segmentation_type": "vlan"}]
diff --git a/tempest/api/compute/admin/test_live_migration_negative.py b/tempest/api/compute/admin/test_live_migration_negative.py
index 80c0525..c956d99 100644
--- a/tempest/api/compute/admin/test_live_migration_negative.py
+++ b/tempest/api/compute/admin/test_live_migration_negative.py
@@ -43,7 +43,8 @@
     @decorators.idempotent_id('7fb7856e-ae92-44c9-861a-af62d7830bcb')
     def test_invalid_host_for_migration(self):
         """Test migrating to an invalid host should not change the status"""
-        target_host = data_utils.rand_name('host')
+        target_host = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='host')
         server = self.create_test_server(wait_until="ACTIVE")
 
         self.assertRaises(lib_exc.BadRequest, self._migrate_server_to,
diff --git a/tempest/api/compute/admin/test_migrations.py b/tempest/api/compute/admin/test_migrations.py
index b3d2833..fa8a737 100644
--- a/tempest/api/compute/admin/test_migrations.py
+++ b/tempest/api/compute/admin/test_migrations.py
@@ -74,7 +74,9 @@
         flavor = self.admin_flavors_client.show_flavor(
             self.flavor_ref)['flavor']
         flavor = self.admin_flavors_client.create_flavor(
-            name=data_utils.rand_name('test_resize_flavor_'),
+            name=data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name='test_resize_flavor_'),
             ram=flavor['ram'],
             disk=flavor['disk'],
             vcpus=flavor['vcpus']
diff --git a/tempest/api/compute/admin/test_quotas.py b/tempest/api/compute/admin/test_quotas.py
index caf4fc1..70711f5 100644
--- a/tempest/api/compute/admin/test_quotas.py
+++ b/tempest/api/compute/admin/test_quotas.py
@@ -43,7 +43,9 @@
 
     def _get_updated_quotas(self):
         # Verify that GET shows the updated quota set of project
-        project_name = data_utils.rand_name('cpu_quota_project')
+        project_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name='cpu_quota_project')
         project_desc = project_name + '-desc'
         project = identity.identity_utils(self.os_admin).create_project(
             name=project_name, description=project_desc)
@@ -59,7 +61,9 @@
         self.assertEqual(5120, quota_set['ram']['limit'])
 
         # Verify that GET shows the updated quota set of user
-        user_name = data_utils.rand_name('cpu_quota_user')
+        user_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name='cpu_quota_user')
         password = data_utils.rand_password()
         email = user_name + '@testmail.tm'
         user = identity.identity_utils(self.os_admin).create_user(
@@ -157,7 +161,9 @@
                       'Legacy quota update not available with unified limits')
     def test_delete_quota(self):
         """Test admin can delete the compute quota set for a project"""
-        project_name = data_utils.rand_name('ram_quota_project')
+        project_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name='ram_quota_project')
         project_desc = project_name + '-desc'
         project = identity.identity_utils(self.os_admin).create_project(
             name=project_name, description=project_desc)
diff --git a/tempest/api/compute/admin/test_quotas_negative.py b/tempest/api/compute/admin/test_quotas_negative.py
index a4120bb..ef89cc1 100644
--- a/tempest/api/compute/admin/test_quotas_negative.py
+++ b/tempest/api/compute/admin/test_quotas_negative.py
@@ -133,8 +133,9 @@
         # when we reach limit maxSecurityGroupRules
         self._update_quota('security_group_rules', 0)
 
-        s_name = data_utils.rand_name('securitygroup')
-        s_description = data_utils.rand_name('description')
+        prefix = CONF.resource_name_prefix
+        s_name = data_utils.rand_name(prefix=prefix, name='securitygroup')
+        s_description = data_utils.rand_name(prefix=prefix, name='description')
         securitygroup = self.sg_client.create_security_group(
             name=s_name, description=s_description)['security_group']
         self.addCleanup(self.sg_client.delete_security_group,
diff --git a/tempest/api/compute/admin/test_security_groups.py b/tempest/api/compute/admin/test_security_groups.py
index f0a6a84..41acc94 100644
--- a/tempest/api/compute/admin/test_security_groups.py
+++ b/tempest/api/compute/admin/test_security_groups.py
@@ -15,9 +15,12 @@
 
 from tempest.api.compute import base
 from tempest.common import utils
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 
+CONF = config.CONF
+
 
 class SecurityGroupsTestAdminJSON(base.BaseV2ComputeAdminTest):
     """Test security groups API that requires admin privilege
@@ -57,9 +60,11 @@
         # List of all security groups created
         security_group_list = []
         # Create two security groups for a non-admin tenant
+        prefix = CONF.resource_name_prefix
         for _ in range(2):
-            name = data_utils.rand_name('securitygroup')
-            description = data_utils.rand_name('description')
+            name = data_utils.rand_name(prefix=prefix, name='securitygroup')
+            description = data_utils.rand_name(
+                prefix=prefix, name='description')
             securitygroup = self.client.create_security_group(
                 name=name, description=description)['security_group']
             self.addCleanup(self._delete_security_group,
@@ -69,8 +74,9 @@
         client_tenant_id = securitygroup['tenant_id']
         # Create two security groups for admin tenant
         for _ in range(2):
-            name = data_utils.rand_name('securitygroup')
-            description = data_utils.rand_name('description')
+            name = data_utils.rand_name(prefix=prefix, name='securitygroup')
+            description = data_utils.rand_name(
+                prefix=prefix, name='description')
             adm_securitygroup = self.adm_client.create_security_group(
                 name=name, description=description)['security_group']
             self.addCleanup(self._delete_security_group,
diff --git a/tempest/api/compute/admin/test_servers.py b/tempest/api/compute/admin/test_servers.py
index 321078c..be838fc 100644
--- a/tempest/api/compute/admin/test_servers.py
+++ b/tempest/api/compute/admin/test_servers.py
@@ -37,11 +37,14 @@
     def resource_setup(cls):
         super(ServersAdminTestJSON, cls).resource_setup()
 
-        cls.s1_name = data_utils.rand_name(cls.__name__ + '-server')
+        prefix = CONF.resource_name_prefix
+        cls.s1_name = data_utils.rand_name(prefix=prefix,
+                                           name=cls.__name__ + '-server')
         server = cls.create_test_server(name=cls.s1_name)
         cls.s1_id = server['id']
 
-        cls.s2_name = data_utils.rand_name(cls.__name__ + '-server')
+        cls.s2_name = data_utils.rand_name(prefix=prefix,
+                                           name=cls.__name__ + '-server')
         server = cls.create_test_server(name=cls.s2_name,
                                         wait_until='ACTIVE')
         cls.s2_id = server['id']
diff --git a/tempest/api/compute/admin/test_volume.py b/tempest/api/compute/admin/test_volume.py
index e7c931e..2813d7a 100644
--- a/tempest/api/compute/admin/test_volume.py
+++ b/tempest/api/compute/admin/test_volume.py
@@ -59,6 +59,11 @@
             'min_ram': image['min_ram'],
             'visibility': 'public',
         }
+        if 'kernel_id' in image:
+            create_dict['kernel_id'] = image['kernel_id']
+        if 'ramdisk_id' in image:
+            create_dict['ramdisk_id'] = image['ramdisk_id']
+
         create_dict.update(kwargs)
         try:
             new_image = self.admin_image_client.create_image(**create_dict)
diff --git a/tempest/api/compute/base.py b/tempest/api/compute/base.py
index d02532d..2557e47 100644
--- a/tempest/api/compute/base.py
+++ b/tempest/api/compute/base.py
@@ -223,7 +223,9 @@
             `compute.create_test_server` call.
         """
         if 'name' not in kwargs:
-            kwargs['name'] = data_utils.rand_name(cls.__name__ + "-server")
+            kwargs['name'] = data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name=cls.__name__ + "-server")
 
         request_version = api_version_request.APIVersionRequest(
             cls.request_microversion)
@@ -260,10 +262,13 @@
 
     @classmethod
     def create_security_group(cls, name=None, description=None):
+        prefix = CONF.resource_name_prefix
         if name is None:
-            name = data_utils.rand_name(cls.__name__ + "-securitygroup")
+            name = data_utils.rand_name(
+                prefix=prefix, name=cls.__name__ + "-securitygroup")
         if description is None:
-            description = data_utils.rand_name('description')
+            description = data_utils.rand_name(
+                prefix=prefix, name='description')
         body = cls.security_groups_client.create_security_group(
             name=name, description=description)['security_group']
         cls.addClassResourceCleanup(
@@ -276,7 +281,9 @@
     @classmethod
     def create_test_server_group(cls, name="", policy=None):
         if not name:
-            name = data_utils.rand_name(cls.__name__ + "-Server-Group")
+            name = data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name=cls.__name__ + "-Server-Group")
         if cls.is_requested_microversion_compatible('2.63'):
             policy = policy or ['affinity']
             if not isinstance(policy, list):
@@ -324,8 +331,11 @@
         If compute microversion >= 2.36, the returned image response will
         be from the image service API rather than the compute image proxy API.
         """
-        name = kwargs.pop('name',
-                          data_utils.rand_name(cls.__name__ + "-image"))
+        name = kwargs.pop(
+            'name',
+            data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name=cls.__name__ + "-image"))
         wait_until = kwargs.pop('wait_until', None)
         wait_for_server = kwargs.pop('wait_for_server', True)
 
@@ -501,7 +511,9 @@
         if 'size' not in kwargs:
             kwargs['size'] = CONF.volume.volume_size
         if 'display_name' not in kwargs:
-            vol_name = data_utils.rand_name(cls.__name__ + '-volume')
+            vol_name = data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name=cls.__name__ + '-volume')
             kwargs['display_name'] = vol_name
         if image_ref is not None:
             kwargs['imageRef'] = image_ref
@@ -595,7 +607,8 @@
     def create_volume_snapshot(self, volume_id, name=None, description=None,
                                metadata=None, force=False):
         name = name or data_utils.rand_name(
-            self.__class__.__name__ + '-snapshot')
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-snapshot')
         snapshot = self.snapshots_client.create_snapshot(
             volume_id=volume_id,
             force=force,
@@ -652,7 +665,9 @@
     def create_flavor(self, ram, vcpus, disk, name=None,
                       is_public='True', **kwargs):
         if name is None:
-            name = data_utils.rand_name(self.__class__.__name__ + "-flavor")
+            name = data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name=self.__class__.__name__ + "-flavor")
         id = kwargs.pop('id', data_utils.rand_int_id(start=1000))
         client = self.admin_flavors_client
         flavor = client.create_flavor(
diff --git a/tempest/api/compute/certificates/test_certificates.py b/tempest/api/compute/certificates/test_certificates.py
deleted file mode 100644
index 5917931..0000000
--- a/tempest/api/compute/certificates/test_certificates.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# Copyright 2012 OpenStack Foundation
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-from tempest.api.compute import base
-from tempest import config
-from tempest.lib import decorators
-
-CONF = config.CONF
-
-
-class CertificatesV2TestJSON(base.BaseV2ComputeTest):
-    """Test Certificates API"""
-
-    @classmethod
-    def skip_checks(cls):
-        super(CertificatesV2TestJSON, cls).skip_checks()
-        if not CONF.compute_feature_enabled.nova_cert:
-            raise cls.skipException("Nova cert is not available")
-
-    @decorators.idempotent_id('c070a441-b08e-447e-a733-905909535b1b')
-    def test_create_root_certificate(self):
-        """Test creating root certificate"""
-        self.certificates_client.create_certificate()
-
-    @decorators.idempotent_id('3ac273d0-92d2-4632-bdfc-afbc21d4606c')
-    def test_get_root_certificate(self):
-        """Test getting root certificate details"""
-        self.certificates_client.show_certificate('root')
diff --git a/tempest/api/compute/flavors/test_flavors_negative.py b/tempest/api/compute/flavors/test_flavors_negative.py
index 22b71fc..09f54b5 100644
--- a/tempest/api/compute/flavors/test_flavors_negative.py
+++ b/tempest/api/compute/flavors/test_flavors_negative.py
@@ -44,7 +44,8 @@
         size = random.randint(1024, 4096)
         image_file = io.BytesIO(data_utils.random_bytes(size))
         params = {
-            'name': data_utils.rand_name('image'),
+            'name': data_utils.rand_name(
+                prefix=CONF.resource_name_prefix, name='image'),
             'container_format': CONF.image.container_formats[0],
             'disk_format': CONF.image.disk_formats[0],
             'min_ram': min_img_ram,
diff --git a/tempest/api/compute/images/test_image_metadata.py b/tempest/api/compute/images/test_image_metadata.py
index f630bc8..1c9f212 100644
--- a/tempest/api/compute/images/test_image_metadata.py
+++ b/tempest/api/compute/images/test_image_metadata.py
@@ -52,9 +52,12 @@
     def resource_setup(cls):
         super(ImagesMetadataTestJSON, cls).resource_setup()
         cls.image_id = None
-
+        image_name_kwargs = {
+            'prefix': CONF.resource_name_prefix,
+            'name': 'image'
+        }
         params = {
-            'name': data_utils.rand_name('image'),
+            'name': data_utils.rand_name(**image_name_kwargs),
             'container_format': 'bare',
             'disk_format': 'raw',
             'visibility': 'private'
diff --git a/tempest/api/compute/images/test_images.py b/tempest/api/compute/images/test_images.py
index d47ffce..87cedae 100644
--- a/tempest/api/compute/images/test_images.py
+++ b/tempest/api/compute/images/test_images.py
@@ -57,7 +57,8 @@
         # in task_state image_snapshot
         self.addCleanup(waiters.wait_for_server_status, self.servers_client,
                         server['id'], 'ACTIVE')
-        snapshot_name = data_utils.rand_name('test-snap')
+        snapshot_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='test-snap')
         try:
             image = self.create_image_from_server(server['id'],
                                                   name=snapshot_name,
@@ -83,7 +84,8 @@
         waiters.wait_for_server_status(self.servers_client,
                                        server['id'], 'SHUTOFF')
         self.addCleanup(self.servers_client.delete_server, server['id'])
-        snapshot_name = data_utils.rand_name('test-snap')
+        snapshot_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='test-snap')
         image = self.create_image_from_server(server['id'],
                                               name=snapshot_name,
                                               wait_until='ACTIVE',
@@ -102,7 +104,8 @@
                                        server['id'], 'PAUSED')
         self.addCleanup(self.servers_client.delete_server, server['id'])
 
-        snapshot_name = data_utils.rand_name('test-snap')
+        snapshot_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='test-snap')
         image = self.create_image_from_server(server['id'],
                                               name=snapshot_name,
                                               wait_until='ACTIVE',
@@ -121,7 +124,8 @@
                                        server['id'], 'SUSPENDED')
         self.addCleanup(self.servers_client.delete_server, server['id'])
 
-        snapshot_name = data_utils.rand_name('test-snap')
+        snapshot_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='test-snap')
         image = self.create_image_from_server(server['id'],
                                               name=snapshot_name,
                                               wait_until='ACTIVE',
@@ -136,7 +140,8 @@
         self.addCleanup(self.servers_client.delete_server, server['id'])
 
         # Snapshot it
-        snapshot_name = data_utils.rand_name('test-snap')
+        snapshot_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='test-snap')
         image = self.create_image_from_server(server['id'],
                                               name=snapshot_name,
                                               wait_until='ACTIVE',
diff --git a/tempest/api/compute/images/test_images_negative.py b/tempest/api/compute/images/test_images_negative.py
index 124651e..2375514 100644
--- a/tempest/api/compute/images/test_images_negative.py
+++ b/tempest/api/compute/images/test_images_negative.py
@@ -66,8 +66,12 @@
         """Check server image should not be created with invalid server id"""
         # Create a new image with invalid server id
         meta = {'image_type': 'test'}
-        self.assertRaises(lib_exc.NotFound, self.create_image_from_server,
-                          data_utils.rand_name('invalid'), metadata=meta)
+        self.assertRaises(
+            lib_exc.NotFound,
+            self.create_image_from_server,
+            data_utils.rand_name(prefix=CONF.resource_name_prefix,
+                                 name='invalid'),
+            metadata=meta)
 
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('ec176029-73dc-4037-8d72-2e4ff60cf538')
@@ -76,7 +80,8 @@
 
         Return an error if server id passed is 35 characters or less
         """
-        snapshot_name = data_utils.rand_name('test-snap')
+        snapshot_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='test-snap')
         test_uuid = ('a' * 35)
         self.assertRaises(lib_exc.NotFound, self.client.create_image,
                           test_uuid, name=snapshot_name)
@@ -88,7 +93,8 @@
 
         Return an error if sever id passed is 37 characters or more
         """
-        snapshot_name = data_utils.rand_name('test-snap')
+        snapshot_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='test-snap')
         test_uuid = ('a' * 37)
         self.assertRaises(lib_exc.NotFound, self.client.create_image,
                           test_uuid, name=snapshot_name)
@@ -105,8 +111,10 @@
     @decorators.idempotent_id('381acb65-785a-4942-94ce-d8f8c84f1f0f')
     def test_delete_image_with_invalid_image_id(self):
         """Check an image should not be deleted with invalid image id"""
-        self.assertRaises(lib_exc.NotFound, self.client.delete_image,
-                          data_utils.rand_name('invalid'))
+        self.assertRaises(
+            lib_exc.NotFound, self.client.delete_image,
+            data_utils.rand_name(
+                prefix=CONF.resource_name_prefix, name='invalid'))
 
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('137aef61-39f7-44a1-8ddf-0adf82511701')
diff --git a/tempest/api/compute/images/test_images_oneserver.py b/tempest/api/compute/images/test_images_oneserver.py
index 2b859da..ed3bf66 100644
--- a/tempest/api/compute/images/test_images_oneserver.py
+++ b/tempest/api/compute/images/test_images_oneserver.py
@@ -66,7 +66,8 @@
             MIN_RAM = 'min_ram'
 
         # Create a new image
-        name = data_utils.rand_name('image')
+        name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='image')
         meta = {'image_type': 'test'}
         image = self.create_image_from_server(self.server_id, name=name,
                                               metadata=meta,
@@ -104,6 +105,8 @@
         # We use a string with 3 byte utf-8 character due to nova/glance which
         # will return 400(Bad Request) if we attempt to send a name which has
         # 4 byte utf-8 character.
-        utf8_name = data_utils.rand_name(b'\xe2\x82\xa1'.decode('utf-8'))
+        utf8_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=b'\xe2\x82\xa1'.decode('utf-8'))
         self.create_image_from_server(self.server_id, name=utf8_name,
                                       wait_until='ACTIVE')
diff --git a/tempest/api/compute/images/test_list_image_filters.py b/tempest/api/compute/images/test_list_image_filters.py
index c6eff9b..78363ee 100644
--- a/tempest/api/compute/images/test_list_image_filters.py
+++ b/tempest/api/compute/images/test_list_image_filters.py
@@ -56,8 +56,12 @@
         super(ListImageFiltersTestJSON, cls).resource_setup()
 
         def _create_image():
+            image_name_kwargs = {
+                'prefix': CONF.resource_name_prefix,
+                'name': cls.__name__ + '-image'
+            }
             params = {
-                'name': data_utils.rand_name(cls.__name__ + '-image'),
+                'name': data_utils.rand_name(**image_name_kwargs),
                 'container_format': 'bare',
                 'disk_format': 'raw',
                 'visibility': 'private'
diff --git a/tempest/api/compute/keypairs/base.py b/tempest/api/compute/keypairs/base.py
index 44da88c..5f8f959 100644
--- a/tempest/api/compute/keypairs/base.py
+++ b/tempest/api/compute/keypairs/base.py
@@ -14,8 +14,11 @@
 #    under the License.
 
 from tempest.api.compute import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 
+CONF = config.CONF
+
 
 class BaseKeypairTest(base.BaseV2ComputeTest):
     """Base test case class for all keypair API tests."""
@@ -32,7 +35,8 @@
             client = self.keypairs_client
         if keypair_name is None:
             keypair_name = data_utils.rand_name(
-                self.__class__.__name__ + '-keypair')
+                prefix=CONF.resource_name_prefix,
+                name=self.__class__.__name__ + '-keypair')
         kwargs = {'name': keypair_name}
         delete_params = {}
         if pub_key:
diff --git a/tempest/api/compute/keypairs/test_keypairs.py b/tempest/api/compute/keypairs/test_keypairs.py
index 8df2e84..2aab58d 100644
--- a/tempest/api/compute/keypairs/test_keypairs.py
+++ b/tempest/api/compute/keypairs/test_keypairs.py
@@ -14,9 +14,12 @@
 #    under the License.
 
 from tempest.api.compute.keypairs import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 
+CONF = config.CONF
+
 
 class KeyPairsV2TestJSON(base.BaseKeypairTest):
     """Test keypairs API with compute microversion less than 2.2"""
@@ -54,7 +57,8 @@
     @decorators.idempotent_id('6c1d3123-4519-4742-9194-622cb1714b7d')
     def test_keypair_create_delete(self):
         """Test create/delete keypair"""
-        k_name = data_utils.rand_name('keypair')
+        k_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='keypair')
         keypair = self.create_keypair(k_name)
         key_name = keypair['name']
         self.assertEqual(key_name, k_name,
@@ -64,7 +68,8 @@
     @decorators.idempotent_id('a4233d5d-52d8-47cc-9a25-e1864527e3df')
     def test_get_keypair_detail(self):
         """Test getting keypair detail by keypair name"""
-        k_name = data_utils.rand_name('keypair')
+        k_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='keypair')
         self.create_keypair(k_name)
         keypair_detail = self.keypairs_client.show_keypair(k_name)['keypair']
         self.assertEqual(keypair_detail['name'], k_name,
@@ -74,7 +79,8 @@
     @decorators.idempotent_id('39c90c6a-304a-49dd-95ec-2366129def05')
     def test_keypair_create_with_pub_key(self):
         """Test creating keypair with a given public key"""
-        k_name = data_utils.rand_name('keypair')
+        k_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='keypair')
         pub_key = ("ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCs"
                    "Ne3/1ILNCqFyfYWDeTKLD6jEXC2OQHLmietMWW+/vd"
                    "aZq7KZEwO0jhglaFjU1mpqq4Gz5RX156sCTNM9vRbw"
diff --git a/tempest/api/compute/keypairs/test_keypairs_negative.py b/tempest/api/compute/keypairs/test_keypairs_negative.py
index 40bea3f..feef864 100644
--- a/tempest/api/compute/keypairs/test_keypairs_negative.py
+++ b/tempest/api/compute/keypairs/test_keypairs_negative.py
@@ -15,10 +15,13 @@
 #    under the License.
 
 from tempest.api.compute.keypairs import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
 
+CONF = config.CONF
+
 
 class KeyPairsNegativeTestJSON(base.BaseKeypairTest):
     """Negative tests of keypairs API"""
@@ -35,7 +38,9 @@
     @decorators.idempotent_id('7cc32e47-4c42-489d-9623-c5e2cb5a2fa5')
     def test_keypair_delete_nonexistent_key(self):
         """Test non-existent key deletion should throw a proper error"""
-        k_name = data_utils.rand_name("keypair-non-existent")
+        k_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name="keypair-non-existent")
         self.assertRaises(lib_exc.NotFound,
                           self.keypairs_client.delete_keypair,
                           k_name)
@@ -60,7 +65,8 @@
     @decorators.idempotent_id('0359a7f1-f002-4682-8073-0c91e4011b7c')
     def test_create_keypair_with_duplicate_name(self):
         """Test keypairs with duplicate names should not be created"""
-        k_name = data_utils.rand_name('keypair')
+        k_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='keypair')
         self.keypairs_client.create_keypair(name=k_name)
         # Now try the same keyname to create another key
         self.assertRaises(lib_exc.Conflict, self.create_keypair,
diff --git a/tempest/api/compute/keypairs/test_keypairs_v22.py b/tempest/api/compute/keypairs/test_keypairs_v22.py
index e229c37..06bbf57 100644
--- a/tempest/api/compute/keypairs/test_keypairs_v22.py
+++ b/tempest/api/compute/keypairs/test_keypairs_v22.py
@@ -13,9 +13,12 @@
 #    under the License.
 
 from tempest.api.compute.keypairs import test_keypairs
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 
+CONF = config.CONF
+
 
 class KeyPairsV22TestJSON(test_keypairs.KeyPairsV2TestJSON):
     """Test keypairs API with compute microversion greater than 2.1"""
@@ -29,7 +32,8 @@
         self.assertEqual(keypair_type, keypair['type'])
 
     def _test_keypairs_create_list_show(self, keypair_type=None):
-        k_name = data_utils.rand_name('keypair')
+        k_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='keypair')
         keypair = self.create_keypair(k_name, keypair_type=keypair_type)
         # Verify whether 'type' is present in keypair create response of
         # version 2.2 and it is with default value 'ssh'.
diff --git a/tempest/api/compute/security_groups/test_security_group_rules_negative.py b/tempest/api/compute/security_groups/test_security_group_rules_negative.py
index 3d000ca..c09be58 100644
--- a/tempest/api/compute/security_groups/test_security_group_rules_negative.py
+++ b/tempest/api/compute/security_groups/test_security_group_rules_negative.py
@@ -14,10 +14,13 @@
 #    under the License.
 
 from tempest.api.compute.security_groups import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
 
+CONF = config.CONF
+
 
 class SecurityGroupRulesNegativeTestJSON(base.BaseSecurityGroupsTest):
     """Negative tests of security group rules API
@@ -59,7 +62,8 @@
         with parent group id which is not integer.
         """
         # Adding rules to the non int Security Group id
-        parent_group_id = data_utils.rand_name('non_int_id')
+        parent_group_id = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='non_int_id')
         ip_protocol = 'tcp'
         from_port = 22
         to_port = 22
@@ -105,7 +109,8 @@
         sg = self.create_security_group()
         # Adding rules to the created Security Group
         parent_group_id = sg['id']
-        ip_protocol = data_utils.rand_name('999')
+        ip_protocol = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='999')
         from_port = 22
         to_port = 22
 
diff --git a/tempest/api/compute/security_groups/test_security_groups.py b/tempest/api/compute/security_groups/test_security_groups.py
index a1f3514..01a7986 100644
--- a/tempest/api/compute/security_groups/test_security_groups.py
+++ b/tempest/api/compute/security_groups/test_security_groups.py
@@ -15,10 +15,13 @@
 
 from tempest.api.compute.security_groups import base
 from tempest.common import waiters
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
 
+CONF = config.CONF
+
 
 class SecurityGroupsTestJSON(base.BaseSecurityGroupsTest):
     """Test security groups API with compute microversion less than 2.36"""
@@ -69,7 +72,8 @@
         Security group should be created, fetched and deleted
         with char space between name along with leading and trailing spaces.
         """
-        s_name = ' %s ' % data_utils.rand_name('securitygroup ')
+        s_name = ' %s ' % data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='securitygroup ')
         securitygroup = self.create_security_group(name=s_name)
         securitygroup_name = securitygroup['name']
         self.assertEqual(securitygroup_name, s_name,
@@ -133,8 +137,9 @@
         securitygroup = self.create_security_group()
         securitygroup_id = securitygroup['id']
         # Update the name and description
-        s_new_name = data_utils.rand_name('sg-hth')
-        s_new_des = data_utils.rand_name('description-hth')
+        prefix = CONF.resource_name_prefix
+        s_new_name = data_utils.rand_name(prefix=prefix, name='sg-hth')
+        s_new_des = data_utils.rand_name(prefix=prefix, name='description-hth')
         self.client.update_security_group(securitygroup_id,
                                           name=s_new_name,
                                           description=s_new_des)
diff --git a/tempest/api/compute/security_groups/test_security_groups_negative.py b/tempest/api/compute/security_groups/test_security_groups_negative.py
index 4607112..c7d873f 100644
--- a/tempest/api/compute/security_groups/test_security_groups_negative.py
+++ b/tempest/api/compute/security_groups/test_security_groups_negative.py
@@ -55,7 +55,8 @@
         as an empty string, or group name with white spaces, or group name
         with chars more than 255.
         """
-        s_description = data_utils.rand_name('description')
+        s_description = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='description')
         # Create Security Group with empty string as group name
         self.assertRaises(lib_exc.BadRequest,
                           self.client.create_security_group,
@@ -81,7 +82,8 @@
         longer than 255 chars. Empty description is allowed by the API
         reference, however.
         """
-        s_name = data_utils.rand_name('securitygroup')
+        s_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='securitygroup')
         # Create Security Group with group description longer than 255 chars
         s_description = 'description-'.ljust(260, '0')
         self.assertRaises(lib_exc.BadRequest,
@@ -94,8 +96,10 @@
     @decorators.attr(type=['negative'])
     def test_security_group_create_with_duplicate_name(self):
         """Test creating security group with duplicate name should fail"""
-        s_name = data_utils.rand_name('securitygroup')
-        s_description = data_utils.rand_name('description')
+        s_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='securitygroup')
+        s_description = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='description')
         self.create_security_group(name=s_name, description=s_description)
         # Now try the Security Group with the same 'Name'
         self.assertRaises(lib_exc.BadRequest,
@@ -138,10 +142,13 @@
     @decorators.attr(type=['negative'])
     def test_update_security_group_with_invalid_sg_id(self):
         """Test updating security group with invalid group id should fail"""
-        s_name = data_utils.rand_name('sg')
-        s_description = data_utils.rand_name('description')
+        s_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='sg')
+        s_description = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='description')
         # Create a non int sg_id
-        sg_id_invalid = data_utils.rand_name('sg')
+        sg_id_invalid = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='sg')
         self.assertRaises(lib_exc.BadRequest,
                           self.client.update_security_group, sg_id_invalid,
                           name=s_name, description=s_description)
@@ -179,8 +186,10 @@
     def test_update_non_existent_security_group(self):
         """Test updating a non existent security group should fail"""
         non_exist_id = self.generate_random_security_group_id()
-        s_name = data_utils.rand_name('sg')
-        s_description = data_utils.rand_name('description')
+        s_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='sg')
+        s_description = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='description')
         self.assertRaises(lib_exc.NotFound,
                           self.client.update_security_group,
                           non_exist_id, name=s_name,
diff --git a/tempest/api/compute/servers/test_attach_interfaces.py b/tempest/api/compute/servers/test_attach_interfaces.py
index 9b6bf84..8984d1d 100644
--- a/tempest/api/compute/servers/test_attach_interfaces.py
+++ b/tempest/api/compute/servers/test_attach_interfaces.py
@@ -161,7 +161,9 @@
         network_id = ifs[0]['net_id']
         port = self.ports_client.create_port(
             network_id=network_id,
-            name=data_utils.rand_name(self.__class__.__name__))
+            name=data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name=self.__class__.__name__))
         port_id = port['port']['id']
         self.addCleanup(self.ports_client.delete_port, port_id)
         iface = self.interfaces_client.create_interface(
@@ -324,7 +326,9 @@
 
         port = self.ports_client.create_port(
             network_id=network_id,
-            name=data_utils.rand_name(self.__class__.__name__))
+            name=data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name=self.__class__.__name__))
         port_id = port['port']['id']
         self.addCleanup(self.ports_client.delete_port, port_id)
 
diff --git a/tempest/api/compute/servers/test_create_server.py b/tempest/api/compute/servers/test_create_server.py
index c9aec62..6664e15 100644
--- a/tempest/api/compute/servers/test_create_server.py
+++ b/tempest/api/compute/servers/test_create_server.py
@@ -53,7 +53,9 @@
         cls.meta = {'hello': 'world'}
         cls.accessIPv4 = '1.1.1.1'
         cls.accessIPv6 = '0000:0000:0000:0000:0000:babe:220.12.22.2'
-        cls.name = data_utils.rand_name(cls.__name__ + '-server')
+        cls.name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=cls.__name__ + '-server')
         cls.password = data_utils.rand_password()
         disk_config = cls.disk_config
         server_initial = cls.create_test_server(
diff --git a/tempest/api/compute/servers/test_create_server_multi_nic.py b/tempest/api/compute/servers/test_create_server_multi_nic.py
index 6ec058d..1cbb976 100644
--- a/tempest/api/compute/servers/test_create_server_multi_nic.py
+++ b/tempest/api/compute/servers/test_create_server_multi_nic.py
@@ -67,7 +67,9 @@
         cls.subnets_client = cls.os_primary.subnets_client
 
     def _create_net_subnet_ret_net_from_cidr(self, cidr):
-        name_net = data_utils.rand_name(self.__class__.__name__)
+        name_net = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__)
         net = self.networks_client.create_network(name=name_net)
         self.addCleanup(self.networks_client.delete_network,
                         net['network']['id'])
diff --git a/tempest/api/compute/servers/test_device_tagging.py b/tempest/api/compute/servers/test_device_tagging.py
index 7d29a4d..2640311 100644
--- a/tempest/api/compute/servers/test_device_tagging.py
+++ b/tempest/api/compute/servers/test_device_tagging.py
@@ -172,11 +172,15 @@
 
         # Create networks
         net1 = self.networks_client.create_network(
-            name=data_utils.rand_name('device-tagging-net1'))['network']
+            name=data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name='device-tagging-net1'))['network']
         self.addCleanup(self.networks_client.delete_network, net1['id'])
 
         net2 = self.networks_client.create_network(
-            name=data_utils.rand_name('device-tagging-net2'))['network']
+            name=data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name='device-tagging-net2'))['network']
         self.addCleanup(self.networks_client.delete_network, net2['id'])
 
         # Create subnets
@@ -195,13 +199,17 @@
         # Create ports
         self.port1 = self.ports_client.create_port(
             network_id=net1['id'],
-            name=data_utils.rand_name(self.__class__.__name__),
+            name=data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name=self.__class__.__name__),
             fixed_ips=[{'subnet_id': subnet1['id']}])['port']
         self.addCleanup(self.ports_client.delete_port, self.port1['id'])
 
         self.port2 = self.ports_client.create_port(
             network_id=net1['id'],
-            name=data_utils.rand_name(self.__class__.__name__),
+            name=data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name=self.__class__.__name__),
             fixed_ips=[{'subnet_id': subnet1['id']}])['port']
         self.addCleanup(self.ports_client.delete_port, self.port2['id'])
 
@@ -215,7 +223,9 @@
             wait_until='SSHABLE',
             validation_resources=validation_resources,
             config_drive=config_drive_enabled,
-            name=data_utils.rand_name('device-tagging-server'),
+            name=data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name='device-tagging-server'),
             networks=[
                 # Validation network for ssh
                 {
@@ -378,7 +388,8 @@
         # Create network
         net = self.networks_client.create_network(
             name=data_utils.rand_name(
-                'tagged-attachments-test-net'))['network']
+                prefix=CONF.resource_name_prefix,
+                name='tagged-attachments-test-net'))['network']
         self.addCleanup(self.networks_client.delete_network, net['id'])
 
         # Create subnet
@@ -400,7 +411,9 @@
             validatable=True,
             validation_resources=validation_resources,
             config_drive=config_drive_enabled,
-            name=data_utils.rand_name('device-tagging-server'),
+            name=data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name='device-tagging-server'),
             networks=[{'uuid': self.get_tenant_network()['id']}],
             wait_until='SSHABLE')
         self.addCleanup(self.delete_server, server['id'])
diff --git a/tempest/api/compute/servers/test_list_server_filters.py b/tempest/api/compute/servers/test_list_server_filters.py
index 990dd52..7873296 100644
--- a/tempest/api/compute/servers/test_list_server_filters.py
+++ b/tempest/api/compute/servers/test_list_server_filters.py
@@ -48,17 +48,23 @@
         else:
             cls.fixed_network_name = None
         network_kwargs = fixed_network.set_networks_kwarg(network)
-        cls.s1_name = data_utils.rand_name(cls.__name__ + '-instance')
+        cls.s1_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=cls.__name__ + '-instance')
         cls.s1 = cls.create_test_server(name=cls.s1_name, **network_kwargs)
 
-        cls.s2_name = data_utils.rand_name(cls.__name__ + '-instance')
+        cls.s2_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=cls.__name__ + '-instance')
         # If image_ref_alt is "" or None then we still want to boot a server
         # but we rely on `testtools.skipUnless` decorator to actually skip
         # the irrelevant tests.
         cls.s2 = cls.create_test_server(
             name=cls.s2_name, image_id=cls.image_ref_alt or cls.image_ref)
 
-        cls.s3_name = data_utils.rand_name(cls.__name__ + '-instance')
+        cls.s3_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=cls.__name__ + '-instance')
         cls.s3 = cls.create_test_server(name=cls.s3_name,
                                         flavor=cls.flavor_ref_alt,
                                         wait_until='ACTIVE')
diff --git a/tempest/api/compute/servers/test_server_actions.py b/tempest/api/compute/servers/test_server_actions.py
index a181839..21ed0cd 100644
--- a/tempest/api/compute/servers/test_server_actions.py
+++ b/tempest/api/compute/servers/test_server_actions.py
@@ -133,7 +133,9 @@
                               ['addresses'])
         # The server should be rebuilt using the provided image and data
         meta = {'rebuild': 'server'}
-        new_name = data_utils.rand_name(self.__class__.__name__ + '-server')
+        new_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-server')
         password = 'rebuildPassw0rd'
         rebuilt_server = self.client.rebuild_server(
             server_id,
@@ -575,7 +577,8 @@
             raise lib_exc.InvalidConfiguration(
                 'api_v2 must be True in [image-feature-enabled].')
 
-        backup1 = data_utils.rand_name('backup-1')
+        backup1 = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='backup-1')
         resp = self.client.create_backup(self.server_id,
                                          backup_type='daily',
                                          rotation=2,
@@ -603,7 +606,8 @@
         waiters.wait_for_image_status(glance_client,
                                       image1_id, 'active')
 
-        backup2 = data_utils.rand_name('backup-2')
+        backup2 = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='backup-2')
         waiters.wait_for_server_status(self.client, self.server_id, 'ACTIVE')
         resp = self.client.create_backup(self.server_id,
                                          backup_type='daily',
@@ -639,7 +643,8 @@
 
         # create the third one, due to the rotation is 2,
         # the first one will be deleted
-        backup3 = data_utils.rand_name('backup-3')
+        backup3 = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='backup-3')
         waiters.wait_for_server_status(self.client, self.server_id, 'ACTIVE')
         resp = self.client.create_backup(self.server_id,
                                          backup_type='daily',
@@ -796,7 +801,8 @@
     def test_create_backup(self):
         server = self.create_test_server(wait_until='ACTIVE')
 
-        backup1 = data_utils.rand_name('backup-1')
+        backup1 = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='backup-1')
         # Just check create_back to verify the schema with 2.47
         self.servers_client.create_backup(server['id'],
                                           backup_type='daily',
@@ -859,7 +865,9 @@
 
         # The server should be rebuilt using the provided image and data
         meta = {'rebuild': 'server'}
-        new_name = data_utils.rand_name(self.__class__.__name__ + '-server')
+        new_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-server')
         password = 'rebuildPassw0rd'
         rebuilt_server = self.servers_client.rebuild_server(
             server['id'],
diff --git a/tempest/api/compute/servers/test_server_group.py b/tempest/api/compute/servers/test_server_group.py
index 4b6d45a..f92b5ba 100644
--- a/tempest/api/compute/servers/test_server_group.py
+++ b/tempest/api/compute/servers/test_server_group.py
@@ -17,9 +17,12 @@
 
 from tempest.api.compute import base
 from tempest.common import compute
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 
+CONF = config.CONF
+
 
 class ServerGroupTestJSON(base.BaseV2ComputeTest):
     """These tests check for the server-group APIs.
@@ -80,7 +83,8 @@
 
     def _create_delete_server_group(self, policy):
         # Create and Delete the server-group with given policy
-        name = data_utils.rand_name('server-group')
+        name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='server-group')
         server_group = self._create_server_group(name, policy)
         self._delete_server_group(server_group)
 
@@ -99,7 +103,8 @@
     def test_create_delete_multiple_server_groups_with_same_name_policy(self):
         """Test Create/Delete the server-groups with same name and policy"""
         server_groups = []
-        server_group_name = data_utils.rand_name('server-group')
+        server_group_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='server-group')
         for _ in range(0, 2):
             server_groups.append(self._create_server_group(server_group_name,
                                                            self.policy))
diff --git a/tempest/api/compute/servers/test_server_tags.py b/tempest/api/compute/servers/test_server_tags.py
index cdeaae5..0b5870a 100644
--- a/tempest/api/compute/servers/test_server_tags.py
+++ b/tempest/api/compute/servers/test_server_tags.py
@@ -14,9 +14,12 @@
 #    under the License.
 
 from tempest.api.compute import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 
+CONF = config.CONF
+
 
 class ServerTagsTestJSON(base.BaseV2ComputeTest):
     """Test server tags with compute microversion greater than 2.25"""
@@ -51,7 +54,8 @@
         self.assertEmpty(fetched_tags)
 
         # Add server tag to the server.
-        assigned_tag = data_utils.rand_name('tag')
+        assigned_tag = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='tag')
         self._update_server_tags(self.server['id'], assigned_tag)
 
         # Check that added tag exists.
@@ -67,11 +71,16 @@
     def test_update_all_tags(self):
         """Test updating all server tags"""
         # Add server tags to the server.
-        tags = [data_utils.rand_name('tag'), data_utils.rand_name('tag')]
+        kwargs = {
+            'prefix': CONF.resource_name_prefix,
+            'name': 'tag'
+        }
+        tags = [data_utils.rand_name(**kwargs), data_utils.rand_name(**kwargs)]
         self._update_server_tags(self.server['id'], tags)
 
         # Replace tags with new tags and check that they are present.
-        new_tags = [data_utils.rand_name('tag'), data_utils.rand_name('tag')]
+        new_tags = [data_utils.rand_name(**kwargs),
+                    data_utils.rand_name(**kwargs)]
         replaced_tags = self.client.update_all_tags(
             self.server['id'], new_tags)['tags']
         self.assertCountEqual(new_tags, replaced_tags)
@@ -83,9 +92,13 @@
     @decorators.idempotent_id('a63b2a74-e918-4b7c-bcab-10c855f3a57e')
     def test_delete_all_tags(self):
         """Test deleting all server tags"""
+        kwargs = {
+            'prefix': CONF.resource_name_prefix,
+            'name': 'tag'
+        }
         # Add server tags to the server.
-        assigned_tags = [data_utils.rand_name('tag'),
-                         data_utils.rand_name('tag')]
+        assigned_tags = [data_utils.rand_name(**kwargs),
+                         data_utils.rand_name(**kwargs)]
         self._update_server_tags(self.server['id'], assigned_tags)
 
         # Delete tags from the server and check that they were deleted.
@@ -97,7 +110,8 @@
     def test_check_tag_existence(self):
         """Test checking server tag existence"""
         # Add server tag to the server.
-        assigned_tag = data_utils.rand_name('tag')
+        assigned_tag = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='tag')
         self._update_server_tags(self.server['id'], assigned_tag)
 
         # Check that added tag exists. Throws a 404 if not found, else a 204,
diff --git a/tempest/api/compute/servers/test_servers.py b/tempest/api/compute/servers/test_servers.py
index 388b9b0..c72b74e 100644
--- a/tempest/api/compute/servers/test_servers.py
+++ b/tempest/api/compute/servers/test_servers.py
@@ -60,7 +60,8 @@
         """Test creating a server with already existing name is allowed"""
         # TODO(sdague): clear out try, we do cleanup one layer up
         server_name = data_utils.rand_name(
-            self.__class__.__name__ + '-server')
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-server')
         server = self.create_test_server(name=server_name,
                                          wait_until='ACTIVE')
         id1 = server['id']
@@ -79,7 +80,8 @@
     @decorators.idempotent_id('f9e15296-d7f9-4e62-b53f-a04e89160833')
     def test_create_specify_keypair(self):
         """Test creating server with keypair"""
-        key_name = data_utils.rand_name('key')
+        key_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='key')
         self.keypairs_client.create_keypair(name=key_name)
         self.addCleanup(self.keypairs_client.delete_keypair, key_name)
         self.keypairs_client.list_keypairs()
@@ -91,7 +93,8 @@
 
     def _update_server_name(self, server_id, status, prefix_name='server'):
         # The server name should be changed to the provided value
-        new_name = data_utils.rand_name(prefix_name)
+        new_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name=prefix_name)
 
         # Update the server with a new name
         self.client.update_server(server_id,
@@ -159,7 +162,9 @@
         will return 400(Bad Request) if we attempt to send a name which has
         4 byte utf-8 character.
         """
-        utf8_name = data_utils.rand_name(b'\xe2\x82\xa1'.decode('utf-8'))
+        utf8_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=b'\xe2\x82\xa1'.decode('utf-8'))
         self.create_test_server(name=utf8_name, wait_until='ACTIVE')
 
 
diff --git a/tempest/api/compute/servers/test_servers_microversions.py b/tempest/api/compute/servers/test_servers_microversions.py
index 566d04a..346c659 100644
--- a/tempest/api/compute/servers/test_servers_microversions.py
+++ b/tempest/api/compute/servers/test_servers_microversions.py
@@ -15,6 +15,7 @@
 
 from tempest.api.compute import base
 from tempest.common import waiters
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 
@@ -30,6 +31,8 @@
 # their integration tests, you can add tests to cover those schema
 # in this file.
 
+CONF = config.CONF
+
 
 class ServerShowV254Test(base.BaseV2ComputeTest):
     """Test servers API schema for compute microversion greater than 2.53"""
@@ -41,7 +44,8 @@
         """Test rebuilding server with microversion greater than 2.53"""
         server = self.create_test_server(wait_until='ACTIVE')
         keypair_name = data_utils.rand_name(
-            self.__class__.__name__ + '-keypair')
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-keypair')
         kwargs = {'name': keypair_name}
         self.keypairs_client.create_keypair(**kwargs)
         self.addCleanup(self.keypairs_client.delete_keypair,
diff --git a/tempest/api/compute/servers/test_servers_negative.py b/tempest/api/compute/servers/test_servers_negative.py
index bd383d3..22fe54d 100644
--- a/tempest/api/compute/servers/test_servers_negative.py
+++ b/tempest/api/compute/servers/test_servers_negative.py
@@ -267,7 +267,8 @@
     def test_create_with_non_existent_keypair(self):
         """Creating a server with non-existent keypair should fail"""
         # Pass a non-existent keypair while creating a server
-        key_name = data_utils.rand_name('key')
+        key_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='key')
         self.assertRaises(lib_exc.BadRequest,
                           self.create_test_server,
                           key_name=key_name)
@@ -288,7 +289,8 @@
         """Updating name of a non-existent server should fail"""
         nonexistent_server = data_utils.rand_uuid()
         new_name = data_utils.rand_name(
-            self.__class__.__name__ + '-server') + '_updated'
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-server') + '_updated'
 
         self.assertRaises(lib_exc.NotFound, self.client.update_server,
                           nonexistent_server, name=new_name)
diff --git a/tempest/api/compute/volumes/test_volume_snapshots.py b/tempest/api/compute/volumes/test_volume_snapshots.py
index 30bea60..5b06a86 100644
--- a/tempest/api/compute/volumes/test_volume_snapshots.py
+++ b/tempest/api/compute/volumes/test_volume_snapshots.py
@@ -53,7 +53,9 @@
         volume = self.create_volume()
         self.addCleanup(self.delete_volume, volume['id'])
 
-        s_name = data_utils.rand_name(self.__class__.__name__ + '-Snapshot')
+        s_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-Snapshot')
         # Create snapshot
         snapshot = self.snapshots_client.create_snapshot(
             volume_id=volume['id'],
diff --git a/tempest/api/compute/volumes/test_volumes_get.py b/tempest/api/compute/volumes/test_volumes_get.py
index 554f418..2a4189e 100644
--- a/tempest/api/compute/volumes/test_volumes_get.py
+++ b/tempest/api/compute/volumes/test_volumes_get.py
@@ -47,7 +47,9 @@
     @decorators.idempotent_id('f10f25eb-9775-4d9d-9cbe-1cf54dae9d5f')
     def test_volume_create_get_delete(self):
         """Test create/get/delete volume"""
-        v_name = data_utils.rand_name(self.__class__.__name__ + '-Volume')
+        v_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-Volume')
         metadata = {'Type': 'work'}
         # Create volume
         volume = self.create_volume(size=CONF.volume.volume_size,
diff --git a/tempest/api/compute/volumes/test_volumes_negative.py b/tempest/api/compute/volumes/test_volumes_negative.py
index f553e32..c386497 100644
--- a/tempest/api/compute/volumes/test_volumes_negative.py
+++ b/tempest/api/compute/volumes/test_volumes_negative.py
@@ -64,7 +64,9 @@
     @decorators.idempotent_id('5125ae14-152b-40a7-b3c5-eae15e9022ef')
     def test_create_volume_with_invalid_size(self):
         """Test creating volume with invalid size should fail"""
-        v_name = data_utils.rand_name(self.__class__.__name__ + '-Volume')
+        v_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-Volume')
         metadata = {'Type': 'work'}
         self.assertRaises(lib_exc.BadRequest, self.client.create_volume,
                           size='#$%', display_name=v_name, metadata=metadata)
@@ -73,7 +75,9 @@
     @decorators.idempotent_id('131cb3a1-75cc-4d40-b4c3-1317f64719b0')
     def test_create_volume_without_passing_size(self):
         """Test creating volume without specifying size should fail"""
-        v_name = data_utils.rand_name(self.__class__.__name__ + '-Volume')
+        v_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-Volume')
         metadata = {'Type': 'work'}
         self.assertRaises(lib_exc.BadRequest, self.client.create_volume,
                           size='', display_name=v_name, metadata=metadata)
@@ -82,7 +86,9 @@
     @decorators.idempotent_id('8cce995e-0a83-479a-b94d-e1e40b8a09d1')
     def test_create_volume_with_size_zero(self):
         """Test creating volume with size=0 should fail"""
-        v_name = data_utils.rand_name(self.__class__.__name__ + '-Volume')
+        v_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-Volume')
         metadata = {'Type': 'work'}
         self.assertRaises(lib_exc.BadRequest, self.client.create_volume,
                           size='0', display_name=v_name, metadata=metadata)
@@ -97,9 +103,11 @@
     @decorators.idempotent_id('62972737-124b-4513-b6cf-2f019f178494')
     def test_delete_invalid_volume_id(self):
         """Test deleting volume with an invalid volume id should fail"""
-        self.assertRaises(lib_exc.NotFound,
-                          self.client.delete_volume,
-                          data_utils.rand_name('invalid'))
+        self.assertRaises(
+            lib_exc.NotFound,
+            self.client.delete_volume,
+            data_utils.rand_name(prefix=CONF.resource_name_prefix,
+                                 name='invalid'))
 
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('0d1417c5-4ae8-4c2c-adc5-5f0b864253e5')
diff --git a/tempest/api/identity/admin/v2/test_endpoints.py b/tempest/api/identity/admin/v2/test_endpoints.py
index 236ce7c..20d023b 100644
--- a/tempest/api/identity/admin/v2/test_endpoints.py
+++ b/tempest/api/identity/admin/v2/test_endpoints.py
@@ -14,9 +14,12 @@
 #    under the License.
 
 from tempest.api.identity import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 
+CONF = config.CONF
+
 
 class EndPointsTestJSON(base.BaseIdentityV2AdminTest):
     """Test keystone v2 endpoints"""
@@ -24,9 +27,12 @@
     @classmethod
     def resource_setup(cls):
         super(EndPointsTestJSON, cls).resource_setup()
-        s_name = data_utils.rand_name('service')
-        s_type = data_utils.rand_name('type')
-        s_description = data_utils.rand_name('description')
+        s_name = data_utils.rand_name(
+            name='service', prefix=CONF.resource_name_prefix)
+        s_type = data_utils.rand_name(
+            name='type', prefix=CONF.resource_name_prefix)
+        s_description = data_utils.rand_name(
+            name='description', prefix=CONF.resource_name_prefix)
         service_data = cls.services_client.create_service(
             name=s_name, type=s_type,
             description=s_description)['OS-KSADM:service']
@@ -36,7 +42,8 @@
         # Create endpoints so as to use for LIST and GET test cases
         cls.setup_endpoints = list()
         for _ in range(2):
-            region = data_utils.rand_name('region')
+            region = data_utils.rand_name(
+                name='region', prefix=CONF.resource_name_prefix)
             url = data_utils.rand_url()
             endpoint = cls.endpoints_client.create_endpoint(
                 service_id=cls.service_id,
@@ -65,7 +72,8 @@
     @decorators.idempotent_id('9974530a-aa28-4362-8403-f06db02b26c1')
     def test_create_list_delete_endpoint(self):
         """Test creating, listing and deleting a keystone endpoint"""
-        region = data_utils.rand_name('region')
+        region = data_utils.rand_name(
+            name='region', prefix=CONF.resource_name_prefix)
         url = data_utils.rand_url()
         endpoint = self.endpoints_client.create_endpoint(
             service_id=self.service_id,
diff --git a/tempest/api/identity/admin/v2/test_roles.py b/tempest/api/identity/admin/v2/test_roles.py
index 9736a76..6d384ab 100644
--- a/tempest/api/identity/admin/v2/test_roles.py
+++ b/tempest/api/identity/admin/v2/test_roles.py
@@ -14,10 +14,13 @@
 #    under the License.
 
 from tempest.api.identity import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib.common.utils import test_utils
 from tempest.lib import decorators
 
+CONF = config.CONF
+
 
 class RolesTestJSON(base.BaseIdentityV2AdminTest):
 
@@ -26,7 +29,8 @@
         super(RolesTestJSON, cls).resource_setup()
         cls.roles = list()
         for _ in range(5):
-            role_name = data_utils.rand_name(name='role')
+            role_name = data_utils.rand_name(
+                name='role', prefix=CONF.resource_name_prefix)
             role = cls.roles_client.create_role(name=role_name)['role']
             cls.addClassResourceCleanup(
                 test_utils.call_and_ignore_notfound_exc,
@@ -57,7 +61,8 @@
     @decorators.idempotent_id('c62d909d-6c21-48c0-ae40-0a0760e6db5e')
     def test_role_create_delete(self):
         """Role should be created, verified, and deleted."""
-        role_name = data_utils.rand_name(name='role-test')
+        role_name = data_utils.rand_name(
+            name='role-test', prefix=CONF.resource_name_prefix)
         body = self.roles_client.create_role(name=role_name)['role']
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
                         self.roles_client.delete_role, body['id'])
diff --git a/tempest/api/identity/admin/v2/test_roles_negative.py b/tempest/api/identity/admin/v2/test_roles_negative.py
index 3c71ba9..0f0466e 100644
--- a/tempest/api/identity/admin/v2/test_roles_negative.py
+++ b/tempest/api/identity/admin/v2/test_roles_negative.py
@@ -14,10 +14,13 @@
 #    under the License.
 
 from tempest.api.identity import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
 
+CONF = config.CONF
+
 
 class RolesNegativeTestJSON(base.BaseIdentityV2AdminTest):
     """Negative tests of keystone roles via v2 API"""
@@ -55,7 +58,8 @@
     @decorators.idempotent_id('585c8998-a8a4-4641-a5dd-abef7a8ced00')
     def test_create_role_by_unauthorized_user(self):
         """Test non-admin user should not be able to create role via v2 API"""
-        role_name = data_utils.rand_name(name='role')
+        role_name = data_utils.rand_name(
+            name='role', prefix=CONF.resource_name_prefix)
         self.assertRaises(lib_exc.Forbidden,
                           self.non_admin_roles_client.create_role,
                           name=role_name)
@@ -66,7 +70,8 @@
         """Test creating role without a valid token via v2 API should fail"""
         token = self.client.auth_provider.get_token()
         self.client.delete_token(token)
-        role_name = data_utils.rand_name(name='role')
+        role_name = data_utils.rand_name(
+            name='role', prefix=CONF.resource_name_prefix)
         self.assertRaises(lib_exc.Unauthorized,
                           self.roles_client.create_role, name=role_name)
         self.client.auth_provider.clear_auth()
@@ -75,7 +80,8 @@
     @decorators.idempotent_id('c0cde2c8-81c1-4bb0-8fe2-cf615a3547a8')
     def test_role_create_duplicate(self):
         """Test role names should be unique via v2 API"""
-        role_name = data_utils.rand_name(name='role-dup')
+        role_name = data_utils.rand_name(
+            name='role-dup', prefix=CONF.resource_name_prefix)
         body = self.roles_client.create_role(name=role_name)['role']
         role1_id = body.get('id')
         self.addCleanup(self.roles_client.delete_role, role1_id)
@@ -86,7 +92,8 @@
     @decorators.idempotent_id('15347635-b5b1-4a87-a280-deb2bd6d865e')
     def test_delete_role_by_unauthorized_user(self):
         """Test non-admin user should not be able to delete role via v2 API"""
-        role_name = data_utils.rand_name(name='role')
+        role_name = data_utils.rand_name(
+            name='role', prefix=CONF.resource_name_prefix)
         body = self.roles_client.create_role(name=role_name)['role']
         self.addCleanup(self.roles_client.delete_role, body['id'])
         role_id = body.get('id')
@@ -97,7 +104,8 @@
     @decorators.idempotent_id('44b60b20-70de-4dac-beaf-a3fc2650a16b')
     def test_delete_role_request_without_token(self):
         """Test deleting role without a valid token via v2 API should fail"""
-        role_name = data_utils.rand_name(name='role')
+        role_name = data_utils.rand_name(
+            name='role', prefix=CONF.resource_name_prefix)
         body = self.roles_client.create_role(name=role_name)['role']
         self.addCleanup(self.roles_client.delete_role, body['id'])
         role_id = body.get('id')
diff --git a/tempest/api/identity/admin/v2/test_services.py b/tempest/api/identity/admin/v2/test_services.py
index 182b24c..0e5d378 100644
--- a/tempest/api/identity/admin/v2/test_services.py
+++ b/tempest/api/identity/admin/v2/test_services.py
@@ -14,10 +14,13 @@
 #    under the License.
 
 from tempest.api.identity import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
 
+CONF = config.CONF
+
 
 class ServicesTestJSON(base.BaseIdentityV2AdminTest):
     """Test identity services via v2 API"""
@@ -34,9 +37,12 @@
         """Test verifies the identity service create/get/delete via v2 API"""
         # GET Service
         # Creating a Service
-        name = data_utils.rand_name('service')
-        s_type = data_utils.rand_name('type')
-        description = data_utils.rand_name('description')
+        name = data_utils.rand_name(
+            name='service', prefix=CONF.resource_name_prefix)
+        s_type = data_utils.rand_name(
+            name='type', prefix=CONF.resource_name_prefix)
+        description = data_utils.rand_name(
+            name='description', prefix=CONF.resource_name_prefix)
         service_data = self.services_client.create_service(
             name=name, type=s_type,
             description=description)['OS-KSADM:service']
@@ -70,8 +76,10 @@
 
         Create a service only with name and type.
         """
-        name = data_utils.rand_name('service')
-        s_type = data_utils.rand_name('type')
+        name = data_utils.rand_name(
+            name='service', prefix=CONF.resource_name_prefix)
+        s_type = data_utils.rand_name(
+            name='type', prefix=CONF.resource_name_prefix)
         service = self.services_client.create_service(
             name=name, type=s_type)['OS-KSADM:service']
         self.assertIn('id', service)
@@ -87,9 +95,12 @@
         """Test Create/List/Verify/Delete of identity service via v2 API"""
         services = []
         for _ in range(3):
-            name = data_utils.rand_name('service')
-            s_type = data_utils.rand_name('type')
-            description = data_utils.rand_name('description')
+            name = data_utils.rand_name(
+                name='service', prefix=CONF.resource_name_prefix)
+            s_type = data_utils.rand_name(
+                name='type', prefix=CONF.resource_name_prefix)
+            description = data_utils.rand_name(
+                name='description', prefix=CONF.resource_name_prefix)
 
             service = self.services_client.create_service(
                 name=name, type=s_type,
diff --git a/tempest/api/identity/admin/v2/test_tenant_negative.py b/tempest/api/identity/admin/v2/test_tenant_negative.py
index 792dad9..4c7c44c 100644
--- a/tempest/api/identity/admin/v2/test_tenant_negative.py
+++ b/tempest/api/identity/admin/v2/test_tenant_negative.py
@@ -14,10 +14,13 @@
 #    under the License.
 
 from tempest.api.identity import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
 
+CONF = config.CONF
+
 
 class TenantsNegativeTestJSON(base.BaseIdentityV2AdminTest):
     """Negative tests of keystone tenants via v2 API"""
@@ -77,7 +80,8 @@
     @decorators.idempotent_id('af16f44b-a849-46cb-9f13-a751c388f739')
     def test_tenant_create_duplicate(self):
         """Test tenant names should be unique via v2 API"""
-        tenant_name = data_utils.rand_name(name='tenant')
+        tenant_name = data_utils.rand_name(
+            name='tenant', prefix=CONF.resource_name_prefix)
         self.setup_test_tenant(name=tenant_name)
         self.assertRaises(lib_exc.Conflict, self.tenants_client.create_tenant,
                           name=tenant_name)
@@ -89,7 +93,8 @@
 
         Non-admin user should not be authorized to create a tenant via v2 API.
         """
-        tenant_name = data_utils.rand_name(name='tenant')
+        tenant_name = data_utils.rand_name(
+            name='tenant', prefix=CONF.resource_name_prefix)
         self.assertRaises(lib_exc.Forbidden,
                           self.non_admin_tenants_client.create_tenant,
                           name=tenant_name)
@@ -98,7 +103,8 @@
     @decorators.idempotent_id('a3ee9d7e-6920-4dd5-9321-d4b2b7f0a638')
     def test_create_tenant_request_without_token(self):
         """Test creating tenant without a token via v2 API is not allowed"""
-        tenant_name = data_utils.rand_name(name='tenant')
+        tenant_name = data_utils.rand_name(
+            name='tenant', prefix=CONF.resource_name_prefix)
         token = self.client.auth_provider.get_token()
         self.client.delete_token(token)
         self.assertRaises(lib_exc.Unauthorized,
diff --git a/tempest/api/identity/admin/v2/test_tenants.py b/tempest/api/identity/admin/v2/test_tenants.py
index 5f73e1c..4f674a8 100644
--- a/tempest/api/identity/admin/v2/test_tenants.py
+++ b/tempest/api/identity/admin/v2/test_tenants.py
@@ -14,9 +14,12 @@
 #    under the License.
 
 from tempest.api.identity import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 
+CONF = config.CONF
+
 
 class TenantsTestJSON(base.BaseIdentityV2AdminTest):
     """Test identity tenants via v2 API"""
@@ -46,7 +49,8 @@
     @decorators.idempotent_id('d25e9f24-1310-4d29-b61b-d91299c21d6d')
     def test_tenant_create_with_description(self):
         """Test creating tenant with a description via v2 API"""
-        tenant_desc = data_utils.rand_name(name='desc')
+        tenant_desc = data_utils.rand_name(
+            name='desc', prefix=CONF.resource_name_prefix)
         tenant = self.setup_test_tenant(description=tenant_desc)
         tenant_id = tenant['id']
         desc1 = tenant['description']
@@ -83,12 +87,14 @@
     @decorators.idempotent_id('781f2266-d128-47f3-8bdb-f70970add238')
     def test_tenant_update_name(self):
         """Test updating name attribute of a tenant via v2 API"""
-        t_name1 = data_utils.rand_name(name='tenant')
+        t_name1 = data_utils.rand_name(
+            name='tenant', prefix=CONF.resource_name_prefix)
         tenant = self.setup_test_tenant(name=t_name1)
         t_id = tenant['id']
         resp1_name = tenant['name']
 
-        t_name2 = data_utils.rand_name(name='tenant2')
+        t_name2 = data_utils.rand_name(
+            name='tenant2', prefix=CONF.resource_name_prefix)
         body = self.tenants_client.update_tenant(t_id, name=t_name2)['tenant']
         resp2_name = body['name']
         self.assertNotEqual(resp1_name, resp2_name)
@@ -105,12 +111,14 @@
     @decorators.idempotent_id('859fcfe1-3a03-41ef-86f9-b19a47d1cd87')
     def test_tenant_update_desc(self):
         """Test updating description attribute of a tenant via v2 API"""
-        t_desc = data_utils.rand_name(name='desc')
+        t_desc = data_utils.rand_name(
+            name='desc', prefix=CONF.resource_name_prefix)
         tenant = self.setup_test_tenant(description=t_desc)
         t_id = tenant['id']
         resp1_desc = tenant['description']
 
-        t_desc2 = data_utils.rand_name(name='desc2')
+        t_desc2 = data_utils.rand_name(
+            name='desc2', prefix=CONF.resource_name_prefix)
         body = self.tenants_client.update_tenant(t_id, description=t_desc2)
         updated_tenant = body['tenant']
         resp2_desc = updated_tenant['description']
diff --git a/tempest/api/identity/admin/v2/test_tokens.py b/tempest/api/identity/admin/v2/test_tokens.py
index 5d89f9d..78a2aad 100644
--- a/tempest/api/identity/admin/v2/test_tokens.py
+++ b/tempest/api/identity/admin/v2/test_tokens.py
@@ -29,7 +29,8 @@
     def test_create_check_get_delete_token(self):
         """Test getting create/check/get/delete token for user via v2 API"""
         # get a token by username and password
-        user_name = data_utils.rand_name(name='user')
+        user_name = data_utils.rand_name(
+            name='user', prefix=CONF.resource_name_prefix)
         user_password = data_utils.rand_password()
         # first:create a tenant
         tenant = self.setup_test_tenant()
@@ -67,7 +68,8 @@
         """
 
         # Create a user.
-        user_name = data_utils.rand_name(name='user')
+        user_name = data_utils.rand_name(
+            name='user', prefix=CONF.resource_name_prefix)
         user_password = data_utils.rand_password()
         tenant_id = None  # No default tenant so will get unscoped token.
         user = self.create_test_user(name=user_name,
@@ -76,10 +78,12 @@
                                      email='')
 
         # Create a couple tenants.
-        tenant1_name = data_utils.rand_name(name='tenant')
+        tenant1_name = data_utils.rand_name(
+            name='tenant', prefix=CONF.resource_name_prefix)
         tenant1 = self.setup_test_tenant(name=tenant1_name)
 
-        tenant2_name = data_utils.rand_name(name='tenant')
+        tenant2_name = data_utils.rand_name(
+            name='tenant', prefix=CONF.resource_name_prefix)
         tenant2 = self.setup_test_tenant(name=tenant2_name)
 
         # Create a role
diff --git a/tempest/api/identity/admin/v2/test_users.py b/tempest/api/identity/admin/v2/test_users.py
index 57a321a..011419e 100644
--- a/tempest/api/identity/admin/v2/test_users.py
+++ b/tempest/api/identity/admin/v2/test_users.py
@@ -18,9 +18,12 @@
 from testtools import matchers
 
 from tempest.api.identity import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 
+CONF = config.CONF
+
 
 class UsersTestJSON(base.BaseIdentityV2AdminTest):
     """Test keystone users via v2 API"""
@@ -28,7 +31,8 @@
     @classmethod
     def resource_setup(cls):
         super(UsersTestJSON, cls).resource_setup()
-        cls.alt_user = data_utils.rand_name('test_user')
+        cls.alt_user = data_utils.rand_name(
+            name='test_user', prefix=CONF.resource_name_prefix)
         cls.alt_email = cls.alt_user + '@testmail.tm'
 
     @decorators.attr(type='smoke')
@@ -43,7 +47,8 @@
     def test_create_user_with_enabled(self):
         """Test creating a user with enabled : False via v2 API"""
         tenant = self.setup_test_tenant()
-        name = data_utils.rand_name('test_user')
+        name = data_utils.rand_name(
+            name='test_user', prefix=CONF.resource_name_prefix)
         user = self.create_test_user(name=name,
                                      tenantId=tenant['id'],
                                      email=self.alt_email,
@@ -59,7 +64,8 @@
         user = self.create_test_user(tenantId=tenant['id'])
 
         # Updating user details with new values
-        u_name2 = data_utils.rand_name('user2')
+        u_name2 = data_utils.rand_name(
+            name='user2', prefix=CONF.resource_name_prefix)
         u_email2 = u_name2 + '@testmail.tm'
         update_user = self.users_client.update_user(user['id'], name=u_name2,
                                                     email=u_email2,
diff --git a/tempest/api/identity/admin/v2/test_users_negative.py b/tempest/api/identity/admin/v2/test_users_negative.py
index eda1fdd..7ccd75c 100644
--- a/tempest/api/identity/admin/v2/test_users_negative.py
+++ b/tempest/api/identity/admin/v2/test_users_negative.py
@@ -14,10 +14,13 @@
 #    under the License.
 
 from tempest.api.identity import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
 
+CONF = config.CONF
+
 
 class UsersNegativeTestJSON(base.BaseIdentityV2AdminTest):
     """Negative tests of identity users via v2 API"""
@@ -25,7 +28,8 @@
     @classmethod
     def resource_setup(cls):
         super(UsersNegativeTestJSON, cls).resource_setup()
-        cls.alt_user = data_utils.rand_name('test_user')
+        cls.alt_user = data_utils.rand_name(
+            'test_user', prefix=CONF.resource_name_prefix)
         cls.alt_password = data_utils.rand_password()
         cls.alt_email = cls.alt_user + '@testmail.tm'
 
@@ -106,7 +110,8 @@
     def test_create_user_with_enabled_non_bool(self):
         """Creating a user with invalid enabled para via v2 API should fail"""
         tenant = self.setup_test_tenant()
-        name = data_utils.rand_name('test_user')
+        name = data_utils.rand_name(
+            'test_user', prefix=CONF.resource_name_prefix)
         self.assertRaises(lib_exc.BadRequest, self.users_client.create_user,
                           name=name, password=self.alt_password,
                           tenantId=tenant['id'],
@@ -116,7 +121,8 @@
     @decorators.idempotent_id('3d07e294-27a0-4144-b780-a2a1bf6fee19')
     def test_update_user_for_non_existent_user(self):
         """Updating a non-existent user via v2 API should fail"""
-        user_name = data_utils.rand_name('user')
+        user_name = data_utils.rand_name(
+            'user', prefix=CONF.resource_name_prefix)
         non_existent_id = data_utils.rand_uuid()
         self.assertRaises(lib_exc.NotFound, self.users_client.update_user,
                           non_existent_id, name=user_name)
diff --git a/tempest/api/identity/admin/v3/test_credentials.py b/tempest/api/identity/admin/v3/test_credentials.py
index 441f10f..1213cfc 100644
--- a/tempest/api/identity/admin/v3/test_credentials.py
+++ b/tempest/api/identity/admin/v3/test_credentials.py
@@ -15,9 +15,12 @@
 from oslo_serialization import jsonutils as json
 
 from tempest.api.identity import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 
+CONF = config.CONF
+
 
 class CredentialsTestJSON(base.BaseIdentityV3AdminTest):
     """Test keystone credentials"""
@@ -35,8 +38,11 @@
                           ['access', 'secret']]
         for _ in range(2):
             project = cls.projects_client.create_project(
-                data_utils.rand_name('project'),
-                description=data_utils.rand_name('project-desc'))['project']
+                data_utils.rand_name(
+                    name='project', prefix=CONF.resource_name_prefix),
+                description=data_utils.rand_name(
+                    name='project-desc',
+                    prefix=CONF.resource_name_prefix))['project']
             cls.addClassResourceCleanup(
                 cls.projects_client.delete_project, project['id'])
             cls.projects.append(project['id'])
@@ -50,8 +56,10 @@
     @decorators.idempotent_id('7cd59bf9-bda4-4c72-9467-d21cab278355')
     def test_credentials_create_get_update_delete(self):
         """Test creating, getting, updating, deleting of credentials"""
+        prefix = CONF.resource_name_prefix
         blob = '{"access": "%s", "secret": "%s"}' % (
-            data_utils.rand_name('Access'), data_utils.rand_name('Secret'))
+            data_utils.rand_name(name='Access', prefix=prefix),
+            data_utils.rand_name(name='Secret', prefix=prefix))
         cred = self.creds_client.create_credential(
             user_id=self.user_body['id'], project_id=self.projects[0],
             blob=blob, type='ec2')['credential']
@@ -61,8 +69,8 @@
         for value2 in self.creds_list[1]:
             self.assertIn(value2, cred['blob'])
 
-        new_keys = [data_utils.rand_name('NewAccess'),
-                    data_utils.rand_name('NewSecret')]
+        new_keys = [data_utils.rand_name(name='NewAccess', prefix=prefix),
+                    data_utils.rand_name(name='NewSecret', prefix=prefix)]
         blob = '{"access": "%s", "secret": "%s"}' % (new_keys[0], new_keys[1])
         update_body = self.creds_client.update_credential(
             cred['id'], blob=blob, project_id=self.projects[1],
@@ -88,10 +96,12 @@
         """Test listing credentials"""
         created_cred_ids = list()
         fetched_cred_ids = list()
+        prefix = CONF.resource_name_prefix
 
         for _ in range(2):
             blob = '{"access": "%s", "secret": "%s"}' % (
-                data_utils.rand_name('Access'), data_utils.rand_name('Secret'))
+                data_utils.rand_name(name='Access', prefix=prefix),
+                data_utils.rand_name(name='Secret', prefix=prefix))
             cred = self.creds_client.create_credential(
                 user_id=self.user_body['id'], project_id=self.projects[0],
                 blob=blob, type='ec2')['credential']
diff --git a/tempest/api/identity/admin/v3/test_default_project_id.py b/tempest/api/identity/admin/v3/test_default_project_id.py
index 7c3a6cc..64550d1 100644
--- a/tempest/api/identity/admin/v3/test_default_project_id.py
+++ b/tempest/api/identity/admin/v3/test_default_project_id.py
@@ -42,7 +42,8 @@
     def test_default_project_id(self):
         """Creating a token without project will default to user's project"""
         # create a domain
-        dom_name = data_utils.rand_name('dom')
+        dom_name = data_utils.rand_name(
+            name='dom', prefix=CONF.resource_name_prefix)
         domain_body = self.domains_client.create_domain(
             name=dom_name)['domain']
         dom_id = domain_body['id']
@@ -57,7 +58,8 @@
 
         # create a user in the domain, with the previous project as his
         # default project
-        user_name = data_utils.rand_name('user')
+        user_name = data_utils.rand_name(
+            name='user', prefix=CONF.resource_name_prefix)
         user_pass = data_utils.rand_password()
         user_body = self.users_client.create_user(
             name=user_name,
diff --git a/tempest/api/identity/admin/v3/test_domain_configuration.py b/tempest/api/identity/admin/v3/test_domain_configuration.py
index a246a36..e195dd9 100644
--- a/tempest/api/identity/admin/v3/test_domain_configuration.py
+++ b/tempest/api/identity/admin/v3/test_domain_configuration.py
@@ -14,11 +14,14 @@
 #    under the License.
 
 from tempest.api.identity import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib.common.utils import test_utils
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
 
+CONF = config.CONF
+
 
 class DomainConfigurationTestJSON(base.BaseIdentityV3AdminTest):
     """Test domain configuration"""
@@ -150,7 +153,8 @@
         domain, _ = self._create_domain_and_config(self.custom_config)
 
         # Check that updating configuration groups work.
-        new_driver = data_utils.rand_name('driver')
+        new_driver = data_utils.rand_name(
+            name='driver', prefix=CONF.resource_name_prefix)
         new_limit = data_utils.rand_int_id(0, 100)
         new_group_config = {'identity': {'driver': new_driver,
                                          'list_limit': new_limit}}
@@ -162,7 +166,8 @@
         self.assertEqual(new_limit, updated_config['identity']['list_limit'])
 
         # Check that updating individual configuration group options work.
-        new_driver = data_utils.rand_name('driver')
+        new_driver = data_utils.rand_name(
+            name='driver', prefix=CONF.resource_name_prefix)
 
         updated_config = self.client.update_domain_group_option_config(
             domain['id'], 'identity', 'driver', driver=new_driver)['config']
diff --git a/tempest/api/identity/admin/v3/test_domains.py b/tempest/api/identity/admin/v3/test_domains.py
index 419c6c7..80c4d1c 100644
--- a/tempest/api/identity/admin/v3/test_domains.py
+++ b/tempest/api/identity/admin/v3/test_domains.py
@@ -76,9 +76,10 @@
     @decorators.idempotent_id('f2f5b44a-82e8-4dad-8084-0661ea3b18cf')
     def test_create_update_delete_domain(self):
         """Test creating, updating and deleting domain"""
+        prefix = CONF.resource_name_prefix
         # Create domain
-        d_name = data_utils.rand_name('domain')
-        d_desc = data_utils.rand_name('domain-desc')
+        d_name = data_utils.rand_name(name='domain', prefix=prefix)
+        d_desc = data_utils.rand_name(name='domain-desc', prefix=prefix)
         domain = self.domains_client.create_domain(
             name=d_name, description=d_desc)['domain']
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
@@ -92,8 +93,8 @@
         self.assertEqual(d_desc, domain['description'])
         self.assertEqual(True, domain['enabled'])
         # Update domain
-        new_desc = data_utils.rand_name('new-desc')
-        new_name = data_utils.rand_name('new-name')
+        new_desc = data_utils.rand_name(name='new-desc', prefix=prefix)
+        new_name = data_utils.rand_name(name='new-name', prefix=prefix)
         updated_domain = self.domains_client.update_domain(
             domain['id'], name=new_name, description=new_desc,
             enabled=False)['domain']
@@ -139,8 +140,10 @@
     def test_create_domain_with_disabled_status(self):
         """Test creating domain with disabled status"""
         # Create domain with enabled status as false
-        d_name = data_utils.rand_name('domain')
-        d_desc = data_utils.rand_name('domain-desc')
+        d_name = data_utils.rand_name(
+            name='domain', prefix=CONF.resource_name_prefix)
+        d_desc = data_utils.rand_name(
+            name='domain-desc', prefix=CONF.resource_name_prefix)
         domain = self.domains_client.create_domain(
             name=d_name, description=d_desc, enabled=False)['domain']
         self.addCleanup(self.domains_client.delete_domain, domain['id'])
@@ -152,7 +155,8 @@
     def test_create_domain_without_description(self):
         """Test creating domain without description"""
         # Create domain only with name
-        d_name = data_utils.rand_name('domain')
+        d_name = data_utils.rand_name(
+            name='domain', prefix=CONF.resource_name_prefix)
         domain = self.domains_client.create_domain(name=d_name)['domain']
         self.addCleanup(self.delete_domain, domain['id'])
         expected_data = {'name': d_name, 'enabled': True}
diff --git a/tempest/api/identity/admin/v3/test_domains_negative.py b/tempest/api/identity/admin/v3/test_domains_negative.py
index c90206d..1087b63 100644
--- a/tempest/api/identity/admin/v3/test_domains_negative.py
+++ b/tempest/api/identity/admin/v3/test_domains_negative.py
@@ -14,10 +14,13 @@
 #    under the License.
 
 from tempest.api.identity import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
 
+CONF = config.CONF
+
 
 class DomainsNegativeTestJSON(base.BaseIdentityV3AdminTest):
     """Negative tests of identity domains"""
@@ -73,7 +76,8 @@
     @decorators.idempotent_id('e6f9e4a2-4f36-4be8-bdbc-4e199ae29427')
     def test_domain_create_duplicate(self):
         """Test creating domain with duplicate name should fail"""
-        domain_name = data_utils.rand_name('domain-dup')
+        domain_name = data_utils.rand_name(
+            name='domain-dup', prefix=CONF.resource_name_prefix)
         domain = self.domains_client.create_domain(name=domain_name)['domain']
         domain_id = domain['id']
         self.addCleanup(self.delete_domain, domain_id)
diff --git a/tempest/api/identity/admin/v3/test_endpoint_groups.py b/tempest/api/identity/admin/v3/test_endpoint_groups.py
index 2fa92e3..591a83b 100644
--- a/tempest/api/identity/admin/v3/test_endpoint_groups.py
+++ b/tempest/api/identity/admin/v3/test_endpoint_groups.py
@@ -14,10 +14,13 @@
 #    under the License.
 
 from tempest.api.identity import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib.common.utils import test_utils
 from tempest.lib import decorators
 
+CONF = config.CONF
+
 
 class EndPointGroupsTest(base.BaseIdentityV3AdminTest):
     """Test endpoint groups"""
@@ -42,8 +45,10 @@
         cls.addClassResourceCleanup(
             cls.services_client.delete_service, service_id)
 
-        name = data_utils.rand_name('service_group')
-        description = data_utils.rand_name('description')
+        name = data_utils.rand_name(
+            name='service_group', prefix=CONF.resource_name_prefix)
+        description = data_utils.rand_name(
+            name='description', prefix=CONF.resource_name_prefix)
         filters = {'service_id': service_id}
 
         endpoint_group = cls.client.create_endpoint_group(
@@ -57,9 +62,10 @@
 
     @classmethod
     def _create_service(cls):
-        s_name = data_utils.rand_name('service')
-        s_type = data_utils.rand_name('type')
-        s_description = data_utils.rand_name('description')
+        prefix = CONF.resource_name_prefix
+        s_name = data_utils.rand_name(name='service', prefix=prefix)
+        s_type = data_utils.rand_name(name='type', prefix=prefix)
+        s_description = data_utils.rand_name(name='description', prefix=prefix)
         service_data = (
             cls.services_client.create_service(name=s_name,
                                                type=s_type,
@@ -73,8 +79,10 @@
         """Test create/list/show/check/delete of endpoint group"""
         service_id = self._create_service()
         self.addCleanup(self.services_client.delete_service, service_id)
-        name = data_utils.rand_name('service_group')
-        description = data_utils.rand_name('description')
+        name = data_utils.rand_name(
+            name='service_group', prefix=CONF.resource_name_prefix)
+        description = data_utils.rand_name(
+            name='description', prefix=CONF.resource_name_prefix)
         filters = {'service_id': service_id}
 
         endpoint_group = self.client.create_endpoint_group(
@@ -135,8 +143,10 @@
         # with new values
         service1_id = self._create_service()
         self.addCleanup(self.services_client.delete_service, service1_id)
-        name = data_utils.rand_name('service_group')
-        description = data_utils.rand_name('description')
+        name = data_utils.rand_name(
+            name='service_group', prefix=CONF.resource_name_prefix)
+        description = data_utils.rand_name(
+            name='description', prefix=CONF.resource_name_prefix)
         filters = {'service_id': service1_id}
 
         endpoint_group = self.client.create_endpoint_group(
@@ -149,8 +159,10 @@
         # Creating new attr values to update endpoint group
         service2_id = self._create_service()
         self.addCleanup(self.services_client.delete_service, service2_id)
-        name2 = data_utils.rand_name('service_group2')
-        description2 = data_utils.rand_name('description2')
+        name2 = data_utils.rand_name(
+            name='service_group2', prefix=CONF.resource_name_prefix)
+        description2 = data_utils.rand_name(
+            name='description2', prefix=CONF.resource_name_prefix)
         filters = {'service_id': service2_id}
 
         # Updating endpoint group with new attr values
diff --git a/tempest/api/identity/admin/v3/test_endpoints.py b/tempest/api/identity/admin/v3/test_endpoints.py
index 0199d73..f9f3e72 100644
--- a/tempest/api/identity/admin/v3/test_endpoints.py
+++ b/tempest/api/identity/admin/v3/test_endpoints.py
@@ -14,10 +14,13 @@
 #    under the License.
 
 from tempest.api.identity import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib.common.utils import test_utils
 from tempest.lib import decorators
 
+CONF = config.CONF
+
 
 class EndPointsTestJSON(base.BaseIdentityV3AdminTest):
     """Test keystone endpoints"""
@@ -46,7 +49,8 @@
             cls.addClassResourceCleanup(
                 cls.services_client.delete_service, service['id'])
 
-            region_name = data_utils.rand_name('region')
+            region_name = data_utils.rand_name(
+                'region', prefix=CONF.resource_name_prefix)
             url = data_utils.rand_url()
             endpoint = cls.client.create_endpoint(
                 service_id=cls.service_ids[i], interface=interfaces[i],
@@ -60,12 +64,14 @@
 
     @classmethod
     def _create_service(cls, s_name=None, s_type=None, s_description=None):
+        prefix = CONF.resource_name_prefix
         if s_name is None:
-            s_name = data_utils.rand_name('service')
+            s_name = data_utils.rand_name(name='service', prefix=prefix)
         if s_type is None:
-            s_type = data_utils.rand_name('type')
+            s_type = data_utils.rand_name(name='type', prefix=prefix)
         if s_description is None:
-            s_description = data_utils.rand_name('description')
+            s_description = data_utils.rand_name(
+                name='description', prefix=prefix)
         service_data = (
             cls.services_client.create_service(name=s_name, type=s_type,
                                                description=s_description))
@@ -115,7 +121,8 @@
     @decorators.idempotent_id('0e2446d2-c1fd-461b-a729-b9e73e3e3b37')
     def test_create_list_show_delete_endpoint(self):
         """Test creating, listing, showing and deleting keystone endpoint"""
-        region_name = data_utils.rand_name('region')
+        region_name = data_utils.rand_name(
+            name='region', prefix=CONF.resource_name_prefix)
         url = data_utils.rand_url()
         interface = 'public'
         endpoint = self.client.create_endpoint(service_id=self.service_ids[0],
@@ -162,16 +169,17 @@
         # endpoint_for_update is deleted, otherwise we will get a 404 error
         # when deleting endpoint_for_update if endpoint's service is deleted.
 
+        prefix = CONF.resource_name_prefix
         # Creating service for updating endpoint with new service ID
-        s_name = data_utils.rand_name('service')
-        s_type = data_utils.rand_name('type')
-        s_description = data_utils.rand_name('description')
+        s_name = data_utils.rand_name(name='service', prefix=prefix)
+        s_type = data_utils.rand_name(name='type', prefix=prefix)
+        s_description = data_utils.rand_name(name='description', prefix=prefix)
         service2 = self._create_service(s_name=s_name, s_type=s_type,
                                         s_description=s_description)
         self.addCleanup(self.services_client.delete_service, service2['id'])
 
         # Creating an endpoint so as to check update endpoint with new values
-        region1_name = data_utils.rand_name('region')
+        region1_name = data_utils.rand_name(name='region', prefix=prefix)
         url1 = data_utils.rand_url()
         interface1 = 'public'
         endpoint_for_update = (
@@ -183,7 +191,7 @@
         self.addCleanup(self.regions_client.delete_region, region1['id'])
 
         # Updating endpoint with new values
-        region2_name = data_utils.rand_name('region')
+        region2_name = data_utils.rand_name(name='region', prefix=prefix)
         url2 = data_utils.rand_url()
         interface2 = 'internal'
         endpoint = self.client.update_endpoint(endpoint_for_update['id'],
diff --git a/tempest/api/identity/admin/v3/test_endpoints_negative.py b/tempest/api/identity/admin/v3/test_endpoints_negative.py
index 9689d87..2d47eb8 100644
--- a/tempest/api/identity/admin/v3/test_endpoints_negative.py
+++ b/tempest/api/identity/admin/v3/test_endpoints_negative.py
@@ -14,10 +14,13 @@
 #    under the License.
 
 from tempest.api.identity import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
 
+CONF = config.CONF
+
 
 class EndpointsNegativeTestJSON(base.BaseIdentityV3AdminTest):
     """Negative tests of endpoint"""
@@ -34,10 +37,11 @@
 
     @classmethod
     def resource_setup(cls):
+        prefix = CONF.resource_name_prefix
         super(EndpointsNegativeTestJSON, cls).resource_setup()
-        s_name = data_utils.rand_name('service')
-        s_type = data_utils.rand_name('type')
-        s_description = data_utils.rand_name('description')
+        s_name = data_utils.rand_name(name='service', prefix=prefix)
+        s_type = data_utils.rand_name(name='type', prefix=prefix)
+        s_description = data_utils.rand_name(name='description', prefix=prefix)
         service_data = (
             cls.services_client.create_service(name=s_name, type=s_type,
                                                description=s_description)
@@ -56,7 +60,8 @@
         """
         interface = 'public'
         url = data_utils.rand_url()
-        region = data_utils.rand_name('region')
+        region = data_utils.rand_name(
+            name='region', prefix=CONF.resource_name_prefix)
         self.assertRaises(lib_exc.BadRequest, self.client.create_endpoint,
                           service_id=self.service_id, interface=interface,
                           url=url, region=region, enabled='False')
@@ -70,7 +75,8 @@
         """
         interface = 'public'
         url = data_utils.rand_url()
-        region = data_utils.rand_name('region')
+        region = data_utils.rand_name(
+            name='region', prefix=CONF.resource_name_prefix)
         self.assertRaises(lib_exc.BadRequest, self.client.create_endpoint,
                           service_id=self.service_id, interface=interface,
                           url=url, region=region, enabled='True')
@@ -78,7 +84,8 @@
     def _assert_update_raises_bad_request(self, enabled):
 
         # Create an endpoint
-        region1_name = data_utils.rand_name('region')
+        region1_name = data_utils.rand_name(
+            name='region', prefix=CONF.resource_name_prefix)
         url1 = data_utils.rand_url()
         interface1 = 'public'
         endpoint_for_update = (
diff --git a/tempest/api/identity/admin/v3/test_groups.py b/tempest/api/identity/admin/v3/test_groups.py
index b2e3775..b5b3c5d 100644
--- a/tempest/api/identity/admin/v3/test_groups.py
+++ b/tempest/api/identity/admin/v3/test_groups.py
@@ -38,9 +38,10 @@
     @decorators.idempotent_id('2e80343b-6c81-4ac3-88c7-452f3e9d5129')
     def test_group_create_update_get(self):
         """Test creating, updating and getting keystone group"""
+        prefix = CONF.resource_name_prefix
         # Verify group creation works.
-        name = data_utils.rand_name('Group')
-        description = data_utils.rand_name('Description')
+        name = data_utils.rand_name(name='Group', prefix=prefix)
+        description = data_utils.rand_name(name='Description', prefix=prefix)
         group = self.setup_test_group(name=name, domain_id=self.domain['id'],
                                       description=description)
         self.assertEqual(group['name'], name)
@@ -48,8 +49,10 @@
         self.assertEqual(self.domain['id'], group['domain_id'])
 
         # Verify updating name and description works.
-        first_name_update = data_utils.rand_name('UpdateGroup')
-        first_desc_update = data_utils.rand_name('UpdateDescription')
+        first_name_update = data_utils.rand_name(
+            name='UpdateGroup', prefix=prefix)
+        first_desc_update = data_utils.rand_name(
+            name='UpdateDescription', prefix=prefix)
         updated_group = self.groups_client.update_group(
             group['id'], name=first_name_update,
             description=first_desc_update)['group']
@@ -65,7 +68,7 @@
         # Verify that updating a single field for a group (name) leaves the
         # other fields (description, domain_id) unchanged.
         second_name_update = data_utils.rand_name(
-            self.__class__.__name__ + 'UpdateGroup')
+            self.__class__.__name__ + 'UpdateGroup', prefix=prefix)
         updated_group = self.groups_client.update_group(
             group['id'], name=second_name_update)['group']
         self.assertEqual(second_name_update, updated_group['name'])
diff --git a/tempest/api/identity/admin/v3/test_inherits.py b/tempest/api/identity/admin/v3/test_inherits.py
index cababc6..48bde2b 100644
--- a/tempest/api/identity/admin/v3/test_inherits.py
+++ b/tempest/api/identity/admin/v3/test_inherits.py
@@ -37,20 +37,21 @@
     @classmethod
     def resource_setup(cls):
         super(InheritsV3TestJSON, cls).resource_setup()
-        u_name = data_utils.rand_name('user-')
+        prefix = CONF.resource_name_prefix
+        u_name = data_utils.rand_name(name='user-', prefix=prefix)
         u_desc = '%s description' % u_name
         u_email = '%s@testmail.tm' % u_name
         u_password = data_utils.rand_password()
         cls.domain = cls.create_domain()
         cls.project = cls.projects_client.create_project(
-            data_utils.rand_name('project-'),
-            description=data_utils.rand_name('project-desc-'),
+            data_utils.rand_name(name='project-', prefix=prefix),
+            description=data_utils.rand_name('project-desc-', prefix=prefix),
             domain_id=cls.domain['id'])['project']
         cls.addClassResourceCleanup(cls.projects_client.delete_project,
                                     cls.project['id'])
         cls.group = cls.groups_client.create_group(
-            name=data_utils.rand_name('group-'), project_id=cls.project['id'],
-            domain_id=cls.domain['id'])['group']
+            name=data_utils.rand_name(name='group-', prefix=prefix),
+            project_id=cls.project['id'], domain_id=cls.domain['id'])['group']
         cls.addClassResourceCleanup(cls.groups_client.delete_group,
                                     cls.group['id'])
         if not CONF.identity_feature_enabled.immutable_user_source:
diff --git a/tempest/api/identity/admin/v3/test_list_projects.py b/tempest/api/identity/admin/v3/test_list_projects.py
index b33d8bd..2135fcc 100644
--- a/tempest/api/identity/admin/v3/test_list_projects.py
+++ b/tempest/api/identity/admin/v3/test_list_projects.py
@@ -45,20 +45,21 @@
     @classmethod
     def resource_setup(cls):
         super(ListProjectsTestJSON, cls).resource_setup()
+        prefix = CONF.resource_name_prefix
         domain_id = cls.os_admin.credentials.domain_id
         # Create project with domain
-        p1_name = data_utils.rand_name(cls.__name__)
+        p1_name = data_utils.rand_name(cls.__name__, prefix=prefix)
         cls.p1 = cls.projects_client.create_project(
             p1_name, enabled=False, domain_id=domain_id)['project']
         cls.addClassResourceCleanup(cls.projects_client.delete_project,
                                     cls.p1['id'])
         # Create default project
-        p2_name = data_utils.rand_name(cls.__name__)
+        p2_name = data_utils.rand_name(cls.__name__, prefix=prefix)
         cls.p2 = cls.projects_client.create_project(p2_name)['project']
         cls.addClassResourceCleanup(cls.projects_client.delete_project,
                                     cls.p2['id'])
         # Create a new project (p3) using p2 as parent project
-        p3_name = data_utils.rand_name(cls.__name__)
+        p3_name = data_utils.rand_name(cls.__name__, prefix=prefix)
         cls.p3 = cls.projects_client.create_project(
             p3_name, parent_id=cls.p2['id'])['project']
         cls.addClassResourceCleanup(cls.projects_client.delete_project,
@@ -99,7 +100,8 @@
         cls.p1 = cls.projects_client.show_project(
             cls.os_primary.credentials.project_id)['project']
         # Create a test project
-        p2_name = data_utils.rand_name(cls.__name__)
+        p2_name = data_utils.rand_name(
+            cls.__name__, prefix=CONF.resource_name_prefix)
         p2_domain_id = CONF.identity.default_domain_id
         cls.p2 = cls.projects_client.create_project(
             p2_name, domain_id=p2_domain_id)['project']
diff --git a/tempest/api/identity/admin/v3/test_list_users.py b/tempest/api/identity/admin/v3/test_list_users.py
index 7bd0bcf..3884989 100644
--- a/tempest/api/identity/admin/v3/test_list_users.py
+++ b/tempest/api/identity/admin/v3/test_list_users.py
@@ -45,14 +45,15 @@
     @classmethod
     def resource_setup(cls):
         super(UsersV3TestJSON, cls).resource_setup()
-        alt_user = data_utils.rand_name('test_user')
+        prefix = CONF.resource_name_prefix
+        alt_user = data_utils.rand_name(name='test_user', prefix=prefix)
         alt_password = data_utils.rand_password()
         cls.alt_email = alt_user + '@testmail.tm'
         # Create a domain
         cls.domain = cls.create_domain()
         # Create user with Domain
         cls.users = list()
-        u1_name = data_utils.rand_name('test_user')
+        u1_name = data_utils.rand_name(name='test_user', prefix=prefix)
         cls.domain_enabled_user = cls.users_client.create_user(
             name=u1_name, password=alt_password,
             email=cls.alt_email, domain_id=cls.domain['id'])['user']
@@ -60,7 +61,7 @@
                                     cls.domain_enabled_user['id'])
         cls.users.append(cls.domain_enabled_user)
         # Create default not enabled user
-        u2_name = data_utils.rand_name('test_user')
+        u2_name = data_utils.rand_name(name='test_user', prefix=prefix)
         cls.non_domain_enabled_user = cls.users_client.create_user(
             name=u2_name, password=alt_password,
             email=cls.alt_email, enabled=False)['user']
diff --git a/tempest/api/identity/admin/v3/test_oauth_consumers.py b/tempest/api/identity/admin/v3/test_oauth_consumers.py
index 7a85f84..0c474c0 100644
--- a/tempest/api/identity/admin/v3/test_oauth_consumers.py
+++ b/tempest/api/identity/admin/v3/test_oauth_consumers.py
@@ -14,11 +14,14 @@
 #    under the License.
 
 from tempest.api.identity import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib.common.utils import test_utils
 from tempest.lib import decorators
 from tempest.lib import exceptions
 
+CONF = config.CONF
+
 
 class OAUTHConsumersV3Test(base.BaseIdentityV3AdminTest):
     # NOTE: force_tenant_isolation is true in the base class by default but
@@ -28,7 +31,8 @@
 
     def _create_consumer(self):
         """Creates a consumer with a random description."""
-        description = data_utils.rand_name('test_create_consumer')
+        description = data_utils.rand_name(
+            name='test_create_consumer', prefix=CONF.resource_name_prefix)
         consumer = self.oauth_consumers_client.create_consumer(
             description)['consumer']
         # cleans up created consumers after tests
@@ -70,7 +74,8 @@
         # create a new consumer to update
         consumer = self._create_consumer()
         # create new description
-        new_description = data_utils.rand_name('test_update_consumer')
+        new_description = data_utils.rand_name(
+            name='test_update_consumer', prefix=CONF.resource_name_prefix)
         # update consumer
         self.oauth_consumers_client.update_consumer(consumer['id'],
                                                     new_description)
diff --git a/tempest/api/identity/admin/v3/test_policies.py b/tempest/api/identity/admin/v3/test_policies.py
index fb81d0a..2d3775a 100644
--- a/tempest/api/identity/admin/v3/test_policies.py
+++ b/tempest/api/identity/admin/v3/test_policies.py
@@ -14,9 +14,12 @@
 #    under the License.
 
 from tempest.api.identity import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 
+CONF = config.CONF
+
 
 class PoliciesTestJSON(base.BaseIdentityV3AdminTest):
     """Test keystone policies"""
@@ -30,8 +33,10 @@
         policy_ids = list()
         fetched_ids = list()
         for _ in range(3):
-            blob = data_utils.rand_name('BlobName')
-            policy_type = data_utils.rand_name('PolicyType')
+            blob = data_utils.rand_name(
+                name='BlobName', prefix=CONF.resource_name_prefix)
+            policy_type = data_utils.rand_name(
+                name='PolicyType', prefix=CONF.resource_name_prefix)
             policy = self.policies_client.create_policy(
                 blob=blob, type=policy_type)['policy']
             # Delete the Policy at the end of this method
@@ -48,8 +53,9 @@
     @decorators.idempotent_id('e544703a-2f03-4cf2-9b0f-350782fdb0d3')
     def test_create_update_delete_policy(self):
         """Test to update keystone policy"""
-        blob = data_utils.rand_name('BlobName')
-        policy_type = data_utils.rand_name('PolicyType')
+        prefix = CONF.resource_name_prefix
+        blob = data_utils.rand_name(name='BlobName', prefix=prefix)
+        policy_type = data_utils.rand_name(name='PolicyType', prefix=prefix)
         policy = self.policies_client.create_policy(blob=blob,
                                                     type=policy_type)['policy']
         self.addCleanup(self._delete_policy, policy['id'])
@@ -59,7 +65,7 @@
         self.assertEqual(blob, policy['blob'])
         self.assertEqual(policy_type, policy['type'])
         # Update policy
-        update_type = data_utils.rand_name('UpdatedPolicyType')
+        update_type = data_utils.rand_name('UpdatedPolicyType', prefix=prefix)
         data = self.policies_client.update_policy(
             policy['id'], type=update_type)['policy']
         self.assertIn('type', data)
diff --git a/tempest/api/identity/admin/v3/test_project_tags.py b/tempest/api/identity/admin/v3/test_project_tags.py
index eed60af..2004cbc 100644
--- a/tempest/api/identity/admin/v3/test_project_tags.py
+++ b/tempest/api/identity/admin/v3/test_project_tags.py
@@ -13,8 +13,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import testtools
-
 from tempest.api.identity import base
 from tempest import config
 from tempest.lib.common.utils import data_utils
@@ -33,14 +31,12 @@
     force_tenant_isolation = False
 
     @decorators.idempotent_id('7c123aac-999d-416a-a0fb-84b915ab10de')
-    @testtools.skipUnless(CONF.identity_feature_enabled.project_tags,
-                          'Project tags not available.')
     def test_list_update_delete_project_tags(self):
         """Test listing, updating and deleting of project tags"""
         project = self.setup_test_project()
 
         # Create a tag for testing.
-        tag = data_utils.rand_name('tag')
+        tag = data_utils.rand_name('tag', prefix=CONF.resource_name_prefix)
         # NOTE(felipemonteiro): The response body for create is empty.
         self.project_tags_client.update_project_tag(project['id'], tag)
 
@@ -49,7 +45,8 @@
             project['id'], tag)
 
         # Verify that updating the project tags works.
-        tags_to_update = [data_utils.rand_name('tag') for _ in range(3)]
+        tags_to_update = [data_utils.rand_name(
+            'tag', prefix=CONF.resource_name_prefix) for _ in range(3)]
         updated_tags = self.project_tags_client.update_all_project_tags(
             project['id'], tags_to_update)['tags']
         self.assertEqual(sorted(tags_to_update), sorted(updated_tags))
diff --git a/tempest/api/identity/admin/v3/test_projects.py b/tempest/api/identity/admin/v3/test_projects.py
index be1216a..3b0052c 100644
--- a/tempest/api/identity/admin/v3/test_projects.py
+++ b/tempest/api/identity/admin/v3/test_projects.py
@@ -33,7 +33,8 @@
     @decorators.idempotent_id('0ecf465c-0dc4-4532-ab53-91ffeb74d12d')
     def test_project_create_with_description(self):
         """Test creating project with a description"""
-        project_desc = data_utils.rand_name('desc')
+        project_desc = data_utils.rand_name(
+            name='desc', prefix=CONF.resource_name_prefix)
         project = self.setup_test_project(description=project_desc)
         project_id = project['id']
         desc1 = project['description']
@@ -48,7 +49,8 @@
     def test_project_create_with_domain(self):
         """Test creating project with a domain"""
         domain = self.setup_test_domain()
-        project_name = data_utils.rand_name('project')
+        project_name = data_utils.rand_name(
+            name='project', prefix=CONF.resource_name_prefix)
         project = self.setup_test_project(
             name=project_name, domain_id=domain['id'])
         project_id = project['id']
@@ -64,7 +66,8 @@
         domain = self.setup_test_domain()
         domain_id = domain['id']
 
-        root_project_name = data_utils.rand_name('root_project')
+        root_project_name = data_utils.rand_name(
+            name='root_project', prefix=CONF.resource_name_prefix)
         root_project = self.setup_test_project(
             name=root_project_name, domain_id=domain_id)
 
@@ -76,7 +79,8 @@
         self.assertEqual(domain_id, parent_id)
 
         # Create a project using root_project_id as parent_id
-        project_name = data_utils.rand_name('project')
+        project_name = data_utils.rand_name(
+            name='project', prefix=CONF.resource_name_prefix)
         project = self.setup_test_project(
             name=project_name, domain_id=domain_id, parent_id=root_project_id)
         parent_id = project['parent_id']
@@ -127,12 +131,14 @@
     @decorators.idempotent_id('f608f368-048c-496b-ad63-d286c26dab6b')
     def test_project_update_name(self):
         """Test updating name attribute of a project"""
-        p_name1 = data_utils.rand_name('project')
+        p_name1 = data_utils.rand_name(
+            name='project', prefix=CONF.resource_name_prefix)
         project = self.setup_test_project(name=p_name1)
 
         resp1_name = project['name']
 
-        p_name2 = data_utils.rand_name('project2')
+        p_name2 = data_utils.rand_name(
+            name='project2', prefix=CONF.resource_name_prefix)
         body = self.projects_client.update_project(project['id'],
                                                    name=p_name2)['project']
         resp2_name = body['name']
@@ -148,11 +154,13 @@
     @decorators.idempotent_id('f138b715-255e-4a7d-871d-351e1ef2e153')
     def test_project_update_desc(self):
         """Test updating description attribute of a project"""
-        p_desc = data_utils.rand_name('desc')
+        p_desc = data_utils.rand_name(
+            name='desc', prefix=CONF.resource_name_prefix)
         project = self.setup_test_project(description=p_desc)
         resp1_desc = project['description']
 
-        p_desc2 = data_utils.rand_name('desc2')
+        p_desc2 = data_utils.rand_name(
+            name='desc2', prefix=CONF.resource_name_prefix)
         body = self.projects_client.update_project(
             project['id'], description=p_desc2)['project']
         resp2_desc = body['description']
@@ -197,7 +205,8 @@
         project = self.setup_test_project()
 
         # Create a User
-        u_name = data_utils.rand_name('user')
+        u_name = data_utils.rand_name(
+            name='user', prefix=CONF.resource_name_prefix)
         u_desc = u_name + 'description'
         u_email = u_name + '@testmail.tm'
         u_password = data_utils.rand_password()
diff --git a/tempest/api/identity/admin/v3/test_projects_negative.py b/tempest/api/identity/admin/v3/test_projects_negative.py
index 79e3d29..68dd5cb 100644
--- a/tempest/api/identity/admin/v3/test_projects_negative.py
+++ b/tempest/api/identity/admin/v3/test_projects_negative.py
@@ -14,10 +14,13 @@
 #    under the License.
 
 from tempest.api.identity import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
 
+CONF = config.CONF
+
 
 class ProjectsNegativeTestJSON(base.BaseIdentityV3AdminTest):
     """Negative tests of projects"""
@@ -54,7 +57,8 @@
     @decorators.idempotent_id('874c3e84-d174-4348-a16b-8c01f599561b')
     def test_project_create_duplicate(self):
         """Project names should be unique"""
-        project_name = data_utils.rand_name('project-dup')
+        project_name = data_utils.rand_name(
+            name='project-dup', prefix=CONF.resource_name_prefix)
         self.setup_test_project(name=project_name)
 
         self.assertRaises(lib_exc.Conflict,
@@ -64,7 +68,8 @@
     @decorators.idempotent_id('8fba9de2-3e1f-4e77-812a-60cb68f8df13')
     def test_create_project_by_unauthorized_user(self):
         """Non-admin user should not be authorized to create a project"""
-        project_name = data_utils.rand_name('project')
+        project_name = data_utils.rand_name(
+            name='project', prefix=CONF.resource_name_prefix)
         self.assertRaises(
             lib_exc.Forbidden, self.non_admin_projects_client.create_project,
             project_name)
diff --git a/tempest/api/identity/admin/v3/test_regions.py b/tempest/api/identity/admin/v3/test_regions.py
index 63e456e..870a406 100644
--- a/tempest/api/identity/admin/v3/test_regions.py
+++ b/tempest/api/identity/admin/v3/test_regions.py
@@ -14,10 +14,13 @@
 #    under the License.
 
 from tempest.api.identity import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib.common.utils import test_utils
 from tempest.lib import decorators
 
+CONF = config.CONF
+
 
 class RegionsTestJSON(base.BaseIdentityV3AdminTest):
     """Test regions"""
@@ -37,7 +40,8 @@
         super(RegionsTestJSON, cls).resource_setup()
         cls.setup_regions = list()
         for _ in range(2):
-            r_description = data_utils.rand_name('description')
+            r_description = data_utils.rand_name(
+                name='description', prefix=CONF.resource_name_prefix)
             region = cls.client.create_region(
                 description=r_description)['region']
             cls.addClassResourceCleanup(
@@ -48,7 +52,8 @@
     def test_create_update_get_delete_region(self):
         """Test creating, updating, getting and updating region"""
         # Create region
-        r_description = data_utils.rand_name('description')
+        r_description = data_utils.rand_name(
+            name='description', prefix=CONF.resource_name_prefix)
         region = self.client.create_region(
             description=r_description,
             parent_region_id=self.setup_regions[0]['id'])['region']
@@ -62,7 +67,8 @@
         self.assertEqual(self.setup_regions[0]['id'],
                          region['parent_region_id'])
         # Update region with new description and parent ID
-        r_alt_description = data_utils.rand_name('description')
+        r_alt_description = data_utils.rand_name(
+            name='description', prefix=CONF.resource_name_prefix)
         region = self.client.update_region(
             region['id'],
             description=r_alt_description,
@@ -86,7 +92,8 @@
     def test_create_region_with_specific_id(self):
         """Test creating region with specific id"""
         r_region_id = data_utils.rand_uuid()
-        r_description = data_utils.rand_name('description')
+        r_description = data_utils.rand_name(
+            name='description', prefix=CONF.resource_name_prefix)
         region = self.client.create_region(
             region_id=r_region_id, description=r_description)['region']
         self.addCleanup(self.client.delete_region, region['id'])
@@ -109,7 +116,8 @@
     def test_list_regions_filter_by_parent_region_id(self):
         """Test listing regions filtered by parent region id"""
         # Add a sub-region to one of the existing test regions
-        r_description = data_utils.rand_name('description')
+        r_description = data_utils.rand_name(
+            name='description', prefix=CONF.resource_name_prefix)
         region = self.client.create_region(
             description=r_description,
             parent_region_id=self.setup_regions[0]['id'])['region']
diff --git a/tempest/api/identity/admin/v3/test_roles.py b/tempest/api/identity/admin/v3/test_roles.py
index e5137f4..ab96027 100644
--- a/tempest/api/identity/admin/v3/test_roles.py
+++ b/tempest/api/identity/admin/v3/test_roles.py
@@ -35,31 +35,34 @@
     @classmethod
     def resource_setup(cls):
         super(RolesV3TestJSON, cls).resource_setup()
+        prefix = CONF.resource_name_prefix
         cls.roles = list()
         for _ in range(3):
-            role_name = data_utils.rand_name(name='role')
+            role_name = data_utils.rand_name(name='role', prefix=prefix)
             role = cls.roles_client.create_role(name=role_name)['role']
             cls.addClassResourceCleanup(cls.roles_client.delete_role,
                                         role['id'])
             cls.roles.append(role)
-        u_name = data_utils.rand_name('user')
+        u_name = data_utils.rand_name(name='user', prefix=prefix)
         u_desc = '%s description' % u_name
         u_email = '%s@testmail.tm' % u_name
         cls.u_password = data_utils.rand_password()
         cls.domain = cls.create_domain()
         cls.project = cls.projects_client.create_project(
-            data_utils.rand_name('project'),
-            description=data_utils.rand_name('project-desc'),
+            data_utils.rand_name(name='project', prefix=prefix),
+            description=data_utils.rand_name(
+                name='project-desc', prefix=prefix),
             domain_id=cls.domain['id'])['project']
         cls.addClassResourceCleanup(cls.projects_client.delete_project,
                                     cls.project['id'])
         cls.group_body = cls.groups_client.create_group(
-            name=data_utils.rand_name('Group'), project_id=cls.project['id'],
+            name=data_utils.rand_name(name='Group', prefix=prefix),
+            project_id=cls.project['id'],
             domain_id=cls.domain['id'])['group']
         cls.addClassResourceCleanup(cls.groups_client.delete_group,
                                     cls.group_body['id'])
         cls.role = cls.roles_client.create_role(
-            name=data_utils.rand_name('Role'))['role']
+            name=data_utils.rand_name(name='Role', prefix=prefix))['role']
         cls.addClassResourceCleanup(cls.roles_client.delete_role,
                                     cls.role['id'])
         if not CONF.identity_feature_enabled.immutable_user_source:
@@ -78,13 +81,15 @@
     @decorators.idempotent_id('18afc6c0-46cf-4911-824e-9989cc056c3a')
     def test_role_create_update_show_list(self):
         """Test creating, updating, showing and listing a role"""
-        r_name = data_utils.rand_name('Role')
+        r_name = data_utils.rand_name(
+            name='Role', prefix=CONF.resource_name_prefix)
         role = self.roles_client.create_role(name=r_name)['role']
         self.addCleanup(self.roles_client.delete_role, role['id'])
         self.assertIn('name', role)
         self.assertEqual(role['name'], r_name)
 
-        new_name = data_utils.rand_name('NewRole')
+        new_name = data_utils.rand_name(
+            name='NewRole', prefix=CONF.resource_name_prefix)
         updated_role = self.roles_client.update_role(role['id'],
                                                      name=new_name)['role']
         self.assertIn('name', updated_role)
@@ -371,7 +376,8 @@
     def test_domain_roles_create_delete(self):
         """Test creating, listing and deleting domain roles"""
         domain_role = self.roles_client.create_role(
-            name=data_utils.rand_name('domain_role'),
+            name=data_utils.rand_name(
+                name='domain_role', prefix=CONF.resource_name_prefix),
             domain_id=self.domain['id'])['role']
         self.addCleanup(
             test_utils.call_and_ignore_notfound_exc,
diff --git a/tempest/api/identity/admin/v3/test_services.py b/tempest/api/identity/admin/v3/test_services.py
index fb3b03e..b67e175 100644
--- a/tempest/api/identity/admin/v3/test_services.py
+++ b/tempest/api/identity/admin/v3/test_services.py
@@ -14,10 +14,13 @@
 #    under the License.
 
 from tempest.api.identity import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
 
+CONF = config.CONF
+
 
 class ServicesTestJSON(base.BaseIdentityV3AdminTest):
     """Test keystone services"""
@@ -33,10 +36,11 @@
     @decorators.idempotent_id('5193aad5-bcb7-411d-85b0-b3b61b96ef06')
     def test_create_update_get_service(self):
         """Test creating, updating and getting of keystone service"""
+        prefix = CONF.resource_name_prefix
         # Creating a Service
-        name = data_utils.rand_name('service')
-        serv_type = data_utils.rand_name('type')
-        desc = data_utils.rand_name('description')
+        name = data_utils.rand_name(name='service', prefix=prefix)
+        serv_type = data_utils.rand_name(name='type', prefix=prefix)
+        desc = data_utils.rand_name(name='description', prefix=prefix)
         create_service = self.services_client.create_service(
             type=serv_type, name=name, description=desc)['service']
         self.addCleanup(self._del_service, create_service['id'])
@@ -49,7 +53,7 @@
         # Update description
         s_id = create_service['id']
         resp1_desc = create_service['description']
-        s_desc2 = data_utils.rand_name('desc2')
+        s_desc2 = data_utils.rand_name(name='desc2', prefix=prefix)
         update_service = self.services_client.update_service(
             s_id, description=s_desc2)['service']
         resp2_desc = update_service['description']
@@ -66,8 +70,10 @@
     @decorators.idempotent_id('d1dcb1a1-2b6b-4da8-bbb8-5532ef6e8269')
     def test_create_service_without_description(self):
         """Create a keystone service only with name and type"""
-        name = data_utils.rand_name('service')
-        serv_type = data_utils.rand_name('type')
+        name = data_utils.rand_name(
+            name='service', prefix=CONF.resource_name_prefix)
+        serv_type = data_utils.rand_name(
+            name='type', prefix=CONF.resource_name_prefix)
         service = self.services_client.create_service(
             type=serv_type, name=name)['service']
         self.addCleanup(self.services_client.delete_service, service['id'])
@@ -80,8 +86,12 @@
         service_ids = list()
         service_types = list()
         for _ in range(3):
-            name = data_utils.rand_name(self.__class__.__name__ + '-Service')
-            serv_type = data_utils.rand_name(self.__class__.__name__ + '-Type')
+            name = data_utils.rand_name(
+                self.__class__.__name__ + '-Service',
+                prefix=CONF.resource_name_prefix)
+            serv_type = data_utils.rand_name(
+                self.__class__.__name__ + '-Type',
+                prefix=CONF.resource_name_prefix)
             create_service = self.services_client.create_service(
                 type=serv_type, name=name)['service']
             self.addCleanup(self.services_client.delete_service,
diff --git a/tempest/api/identity/admin/v3/test_tokens.py b/tempest/api/identity/admin/v3/test_tokens.py
index e191979..d0a8748 100644
--- a/tempest/api/identity/admin/v3/test_tokens.py
+++ b/tempest/api/identity/admin/v3/test_tokens.py
@@ -42,11 +42,13 @@
                                      domain_id=CONF.identity.default_domain_id)
 
         # Create a couple projects
-        project1_name = data_utils.rand_name(name=self.__class__.__name__)
+        project1_name = data_utils.rand_name(
+            name=self.__class__.__name__, prefix=CONF.resource_name_prefix)
         project1 = self.setup_test_project(
             name=project1_name, domain_id=CONF.identity.default_domain_id)
 
-        project2_name = data_utils.rand_name(name=self.__class__.__name__)
+        project2_name = data_utils.rand_name(
+            name=self.__class__.__name__, prefix=CONF.resource_name_prefix)
         project2 = self.setup_test_project(
             name=project2_name, domain_id=CONF.identity.default_domain_id)
         self.addCleanup(self.projects_client.delete_project, project2['id'])
diff --git a/tempest/api/identity/admin/v3/test_trusts.py b/tempest/api/identity/admin/v3/test_trusts.py
index 580e304..5bd6756 100644
--- a/tempest/api/identity/admin/v3/test_trusts.py
+++ b/tempest/api/identity/admin/v3/test_trusts.py
@@ -53,9 +53,10 @@
         super(TrustsV3TestJSON, self).tearDown()
 
     def create_trustor_and_roles(self):
+        prefix = CONF.resource_name_prefix
         # create a project that trusts will be granted on
         trustor_project_name = data_utils.rand_name(
-            name=self.__class__.__name__)
+            name=self.__class__.__name__, prefix=prefix)
         project = self.projects_client.create_project(
             trustor_project_name,
             domain_id=CONF.identity.default_domain_id)['project']
@@ -64,7 +65,7 @@
         self.assertIsNotNone(self.trustor_project_id)
 
         # Create a trustor User
-        trustor_username = data_utils.rand_name('user')
+        trustor_username = data_utils.rand_name(name='user', prefix=prefix)
         u_desc = trustor_username + 'description'
         u_email = trustor_username + '@testmail.xx'
         trustor_password = data_utils.rand_password()
@@ -79,8 +80,10 @@
         self.trustor_user_id = user['id']
 
         # And two roles, one we'll delegate and one we won't
-        self.delegated_role = data_utils.rand_name('DelegatedRole')
-        self.not_delegated_role = data_utils.rand_name('NotDelegatedRole')
+        self.delegated_role = data_utils.rand_name(
+            name='DelegatedRole', prefix=prefix)
+        self.not_delegated_role = data_utils.rand_name(
+            name='NotDelegatedRole', prefix=prefix)
 
         role = self.roles_client.create_role(name=self.delegated_role)['role']
         self.addCleanup(self.roles_client.delete_role, role['id'])
diff --git a/tempest/api/identity/admin/v3/test_users.py b/tempest/api/identity/admin/v3/test_users.py
index 31cbbac..9bcbba5 100644
--- a/tempest/api/identity/admin/v3/test_users.py
+++ b/tempest/api/identity/admin/v3/test_users.py
@@ -40,8 +40,9 @@
     @decorators.idempotent_id('b537d090-afb9-4519-b95d-270b0708e87e')
     def test_user_update(self):
         """Test case to check if updating of user attributes is successful"""
+        prefix = CONF.resource_name_prefix
         # Creating first user
-        u_name = data_utils.rand_name('user')
+        u_name = data_utils.rand_name(name='user', prefix=prefix)
         u_desc = u_name + 'description'
         u_email = u_name + '@testmail.tm'
         u_password = data_utils.rand_password()
@@ -55,7 +56,7 @@
         project = self.setup_test_project()
 
         # Updating user details with new values
-        update_kwargs = {'name': data_utils.rand_name('user2'),
+        update_kwargs = {'name': data_utils.rand_name('user2', prefix=prefix),
                          'description': data_utils.rand_name('desc2'),
                          'project_id': project['id'],
                          'email': 'user2@testmail.tm',
@@ -75,7 +76,8 @@
     def test_update_user_password(self):
         """Test updating user password"""
         # Creating User to check password updation
-        u_name = data_utils.rand_name('user')
+        u_name = data_utils.rand_name(
+            name='user', prefix=CONF.resource_name_prefix)
         original_password = data_utils.rand_password()
         user = self.users_client.create_user(
             name=u_name, password=original_password)['user']
@@ -105,7 +107,8 @@
         fetched_project_ids = list()
         u_project = self.setup_test_project()
         # Create a user.
-        u_name = data_utils.rand_name('user')
+        u_name = data_utils.rand_name(
+            name='user', prefix=CONF.resource_name_prefix)
         u_desc = u_name + 'description'
         u_email = u_name + '@testmail.tm'
         u_password = data_utils.rand_password()
diff --git a/tempest/api/identity/admin/v3/test_users_negative.py b/tempest/api/identity/admin/v3/test_users_negative.py
index 1cba945..f55d2d4 100644
--- a/tempest/api/identity/admin/v3/test_users_negative.py
+++ b/tempest/api/identity/admin/v3/test_users_negative.py
@@ -29,7 +29,8 @@
     @decorators.idempotent_id('e75f006c-89cc-477b-874d-588e4eab4b17')
     def test_create_user_for_non_existent_domain(self):
         """Attempt to create a user in a non-existent domain should fail"""
-        u_name = data_utils.rand_name('user')
+        u_name = data_utils.rand_name(
+            name='user', prefix=CONF.resource_name_prefix)
         u_email = u_name + '@testmail.tm'
         u_password = data_utils.rand_password()
         self.assertRaises(lib_exc.NotFound, self.users_client.create_user,
diff --git a/tempest/api/identity/base.py b/tempest/api/identity/base.py
index 5722f0e..9cdd917 100644
--- a/tempest/api/identity/base.py
+++ b/tempest/api/identity/base.py
@@ -71,7 +71,8 @@
         if kwargs.get('password', None) is None:
             kwargs['password'] = data_utils.rand_password()
         if 'name' not in kwargs:
-            kwargs['name'] = data_utils.rand_name('test_user')
+            kwargs['name'] = data_utils.rand_name(
+                name='test_user', prefix=CONF.resource_name_prefix)
         if 'email' not in kwargs:
             kwargs['email'] = kwargs['name'] + '@testmail.tm'
 
@@ -84,7 +85,8 @@
 
     def setup_test_role(self, name=None, domain_id=None):
         """Set up a test role."""
-        params = {'name': name or data_utils.rand_name('test_role')}
+        params = {'name': name or data_utils.rand_name(
+            name='test_role', prefix=CONF.resource_name_prefix)}
         if domain_id:
             params['domain_id'] = domain_id
 
@@ -161,9 +163,12 @@
     def setup_test_tenant(self, **kwargs):
         """Set up a test tenant."""
         if 'name' not in kwargs:
-            kwargs['name'] = data_utils.rand_name('test_tenant')
+            kwargs['name'] = data_utils.rand_name(
+                name='test_tenant',
+                prefix=CONF.resource_name_prefix)
         if 'description' not in kwargs:
-            kwargs['description'] = data_utils.rand_name('desc')
+            kwargs['description'] = data_utils.rand_name(
+                name='desc', prefix=CONF.resource_name_prefix)
         tenant = self.projects_client.create_tenant(**kwargs)['tenant']
         # Delete the tenant at the end of the test
         self.addCleanup(
@@ -249,9 +254,11 @@
     def create_domain(cls, **kwargs):
         """Create a domain."""
         if 'name' not in kwargs:
-            kwargs['name'] = data_utils.rand_name('test_domain')
+            kwargs['name'] = data_utils.rand_name(
+                name='test_domain', prefix=CONF.resource_name_prefix)
         if 'description' not in kwargs:
-            kwargs['description'] = data_utils.rand_name('desc')
+            kwargs['description'] = data_utils.rand_name(
+                name='desc', prefix=CONF.resource_name_prefix)
         domain = cls.domains_client.create_domain(**kwargs)['domain']
         cls.addClassResourceCleanup(test_utils.call_and_ignore_notfound_exc,
                                     cls.delete_domain, domain['id'])
@@ -274,9 +281,11 @@
     def setup_test_project(self, **kwargs):
         """Set up a test project."""
         if 'name' not in kwargs:
-            kwargs['name'] = data_utils.rand_name('test_project')
+            kwargs['name'] = data_utils.rand_name(
+                name='test_project', prefix=CONF.resource_name_prefix)
         if 'description' not in kwargs:
-            kwargs['description'] = data_utils.rand_name('test_description')
+            kwargs['description'] = data_utils.rand_name(
+                name='test_description', prefix=CONF.resource_name_prefix)
         project = self.projects_client.create_project(**kwargs)['project']
         # Delete the project at the end of the test
         self.addCleanup(
@@ -297,10 +306,12 @@
         """Set up a test group."""
         if 'name' not in kwargs:
             kwargs['name'] = data_utils.rand_name(
-                self.__class__.__name__ + '_test_project')
+                self.__class__.__name__ + '_test_project',
+                prefix=CONF.resource_name_prefix)
         if 'description' not in kwargs:
             kwargs['description'] = data_utils.rand_name(
-                self.__class__.__name__ + '_test_description')
+                self.__class__.__name__ + '_test_description',
+                prefix=CONF.resource_name_prefix)
         group = self.groups_client.create_group(**kwargs)['group']
         self.addCleanup(
             test_utils.call_and_ignore_notfound_exc,
@@ -311,20 +322,14 @@
 class BaseApplicationCredentialsV3Test(BaseIdentityV3Test):
 
     @classmethod
-    def skip_checks(cls):
-        super(BaseApplicationCredentialsV3Test, cls).skip_checks()
-        if not CONF.identity_feature_enabled.application_credentials:
-            raise cls.skipException("Application credentials are not available"
-                                    " in this environment")
-
-    @classmethod
     def resource_setup(cls):
         super(BaseApplicationCredentialsV3Test, cls).resource_setup()
         cls.user_id = cls.os_primary.credentials.user_id
         cls.project_id = cls.os_primary.credentials.project_id
 
     def create_application_credential(self, name=None, **kwargs):
-        name = name or data_utils.rand_name('application_credential')
+        name = name or data_utils.rand_name(
+            name='application_credential', prefix=CONF.resource_name_prefix)
         application_credential = (
             self.non_admin_app_creds_client.create_application_credential(
                 self.user_id, name=name, **kwargs))['application_credential']
diff --git a/tempest/api/identity/v3/test_access_rules.py b/tempest/api/identity/v3/test_access_rules.py
index 64a6959..f816a09 100644
--- a/tempest/api/identity/v3/test_access_rules.py
+++ b/tempest/api/identity/v3/test_access_rules.py
@@ -48,7 +48,9 @@
         cls.ac = cls.non_admin_app_creds_client
         cls.app_cred = cls.ac.create_application_credential(
             cls.user_id,
-            name=data_utils.rand_name('application_credential'),
+            name=data_utils.rand_name(
+                name='application_credential',
+                prefix=CONF.resource_name_prefix),
             access_rules=access_rules
         )['application_credential']
         cls.addClassResourceCleanup(
@@ -77,7 +79,9 @@
         ]
         app_cred = self.ac.create_application_credential(
             self.user_id,
-            name=data_utils.rand_name('application_credential'),
+            name=data_utils.rand_name(
+                name='application_credential',
+                prefix=CONF.resource_name_prefix),
             access_rules=access_rules
         )['application_credential']
         self.addCleanup(
diff --git a/tempest/api/image/base.py b/tempest/api/image/base.py
index 7bae712..89d5f91 100644
--- a/tempest/api/image/base.py
+++ b/tempest/api/image/base.py
@@ -12,6 +12,7 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+import io
 import time
 
 from tempest import config
@@ -51,7 +52,9 @@
         """Wrapper that returns a test image."""
 
         if 'name' not in kwargs:
-            name = data_utils.rand_name(cls.__name__ + "-image")
+            name = data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name=cls.__name__ + "-image")
             kwargs['name'] = name
 
         image = cls.client.create_image(**kwargs)
@@ -83,7 +86,8 @@
                          description='Tempest', protected=False,
                          **kwargs):
         if not namespace_name:
-            namespace_name = data_utils.rand_name('test-ns')
+            namespace_name = data_utils.rand_name(
+                prefix=CONF.resource_name_prefix, name='test-ns')
         kwargs.setdefault('display_name', namespace_name)
         namespace = self.namespaces_client.create_namespace(
             namespace=namespace_name, visibility=visibility,
@@ -92,6 +96,36 @@
                         namespace_name)
         return namespace
 
+    def create_and_stage_image(self, all_stores=False):
+        """Create Image & stage image file for glance-direct import method."""
+        image_name = data_utils.rand_name('test-image')
+        container_format = CONF.image.container_formats[0]
+        disk_format = CONF.image.disk_formats[0]
+        image = self.create_image(name=image_name,
+                                  container_format=container_format,
+                                  disk_format=disk_format,
+                                  visibility='private')
+        self.assertEqual('queued', image['status'])
+
+        self.client.stage_image_file(
+            image['id'],
+            io.BytesIO(data_utils.random_bytes()))
+        # Check image status is 'uploading'
+        body = self.client.show_image(image['id'])
+        self.assertEqual(image['id'], body['id'])
+        self.assertEqual('uploading', body['status'])
+
+        if all_stores:
+            stores_list = ','.join([store['id']
+                                    for store in self.available_stores
+                                    if store.get('read-only') != 'true'])
+        else:
+            stores = [store['id'] for store in self.available_stores
+                      if store.get('read-only') != 'true']
+            stores_list = stores[::max(1, len(stores) - 1)]
+
+        return body, stores_list
+
     @classmethod
     def get_available_stores(cls):
         stores = []
@@ -200,7 +234,9 @@
         return image_ids
 
     def _create_image(self):
-        name = data_utils.rand_name(self.__class__.__name__ + '-image')
+        name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-image')
         image = self.client.create_image(name=name,
                                          container_format='bare',
                                          disk_format='raw')
diff --git a/tempest/api/image/v2/admin/test_image_caching.py b/tempest/api/image/v2/admin/test_image_caching.py
index 11dcc80..333f946 100644
--- a/tempest/api/image/v2/admin/test_image_caching.py
+++ b/tempest/api/image/v2/admin/test_image_caching.py
@@ -37,13 +37,17 @@
         # NOTE(abhishekk): As caching is enabled instance boot or volume
         # boot or image download can also cache image, so we are going to
         # maintain our caching information to avoid disturbing other tests
-        self.cached_info = {}
+        self.cached_info = []
+        self.cached_info_remote = []
 
     def tearDown(self):
         # Delete all from cache/queue if we exit abruptly
         for image_id in self.cached_info:
-            self.os_admin.image_cache_client.cache_delete(
-                image_id)
+            self.os_admin.image_cache_client.cache_delete(image_id)
+
+        for image_id in self.cached_info_remote:
+            self.os_admin.image_cache_client.cache_delete(image_id)
+
         super(ImageCachingTest, self).tearDown()
 
     @classmethod
@@ -57,7 +61,9 @@
     def image_create_and_upload(self, upload=True, **kwargs):
         """Wrapper that returns a test image."""
         if 'name' not in kwargs:
-            name = data_utils.rand_name(self.__name__ + "-image")
+            name = data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name=self.__name__ + "-image")
             kwargs['name'] = name
 
         params = dict(kwargs)
@@ -73,19 +79,13 @@
         image = self.client.show_image(image['id'])
         return image
 
-    def _assertCheckQueues(self, queued_images):
-        for image in self.cached_info:
-            if self.cached_info[image] == 'queued':
-                self.assertIn(image, queued_images)
-
-    def _assertCheckCache(self, cached_images):
+    def _assertCheckCache(self, cached_images, cached):
         cached_list = []
         for image in cached_images:
             cached_list.append(image['image_id'])
 
-        for image in self.cached_info:
-            if self.cached_info[image] == 'cached':
-                self.assertIn(image, cached_list)
+        for image in cached:
+            self.assertIn(image, cached_list)
 
     @decorators.idempotent_id('4bf6adba-2f9f-47e9-a6d5-37f21ad4387c')
     def test_image_caching_cycle(self):
@@ -95,10 +95,9 @@
         self.assertRaises(lib_exc.Forbidden,
                           self.os_primary.image_cache_client.list_cache)
 
-        # Check there is nothing is queued for cached by us
+        # Check there is nothing cached by us
         output = self.os_admin.image_cache_client.list_cache()
-        self._assertCheckQueues(output['queued_images'])
-        self._assertCheckCache(output['cached_images'])
+        self._assertCheckCache(output['cached_images'], self.cached_info)
 
         # Non-existing image should raise NotFound exception
         self.assertRaises(lib_exc.NotFound,
@@ -120,12 +119,6 @@
 
         # Queue image for caching
         self.os_admin.image_cache_client.cache_queue(image['id'])
-        self.cached_info[image['id']] = 'queued'
-        # Verify that we have 1 image for queueing and 0 for caching
-        output = self.os_admin.image_cache_client.list_cache()
-        self._assertCheckQueues(output['queued_images'])
-        self._assertCheckCache(output['cached_images'])
-
         # Wait for image caching
         LOG.info("Waiting for image %s to get cached", image['id'])
         caching = waiters.wait_for_caching(
@@ -133,10 +126,9 @@
             self.os_admin.image_cache_client,
             image['id'])
 
-        self.cached_info[image['id']] = 'cached'
-        # verify that we have image in cache and not in queued
-        self._assertCheckQueues(caching['queued_images'])
-        self._assertCheckCache(caching['cached_images'])
+        self.cached_info.append(image['id'])
+        # verify that we have image cached
+        self._assertCheckCache(caching['cached_images'], self.cached_info)
 
         # Verify that we can delete images from caching and queueing with
         # api call.
@@ -150,4 +142,78 @@
                           self.os_admin.image_cache_client.cache_clear,
                           target="invalid")
         # Remove all data from local information
-        self.cached_info = {}
+        self.cached_info = []
+
+    @decorators.idempotent_id('0a6b7e10-bc30-4a41-91ff-69fb4f5e65f2')
+    def test_remote_and_self_cache(self):
+        """Test image cache works with self and remote glance service"""
+        if not CONF.image.alternate_image_endpoint:
+            raise self.skipException('No image_remote service to test '
+                                     'against')
+
+        # Check there is nothing is cached by us on current and
+        # remote node
+        output = self.os_admin.image_cache_client.list_cache()
+        self._assertCheckCache(output['cached_images'], self.cached_info)
+
+        output = self.os_admin.cache_client_remote.list_cache()
+        self._assertCheckCache(output['cached_images'],
+                               self.cached_info_remote)
+
+        # Create one image
+        image = self.image_create_and_upload(name='first',
+                                             container_format='bare',
+                                             disk_format='raw',
+                                             visibility='private')
+        self.assertEqual('active', image['status'])
+
+        # Queue image for caching on local node
+        self.os_admin.image_cache_client.cache_queue(image['id'])
+        # Wait for image caching
+        LOG.info("Waiting for image %s to get cached", image['id'])
+        caching = waiters.wait_for_caching(
+            self.client,
+            self.os_admin.image_cache_client,
+            image['id'])
+        self.cached_info.append(image['id'])
+        # verify that we have image in cache on local node
+        self._assertCheckCache(caching['cached_images'], self.cached_info)
+        # verify that we don't have anything cached on remote node
+        output = self.os_admin.cache_client_remote.list_cache()
+        self._assertCheckCache(output['cached_images'],
+                               self.cached_info_remote)
+
+        # cache same image on remote node
+        self.os_admin.cache_client_remote.cache_queue(image['id'])
+        # Wait for image caching
+        LOG.info("Waiting for image %s to get cached", image['id'])
+        caching = waiters.wait_for_caching(
+            self.client,
+            self.os_admin.cache_client_remote,
+            image['id'])
+        self.cached_info_remote.append(image['id'])
+
+        # verify that we have image cached on remote node
+        output = self.os_admin.cache_client_remote.list_cache()
+        self._assertCheckCache(output['cached_images'],
+                               self.cached_info_remote)
+
+        # Verify that we can delete image from remote cache and it
+        # still present in local cache
+        self.os_admin.cache_client_remote.cache_clear()
+        output = self.os_admin.cache_client_remote.list_cache()
+        self.assertEqual(0, len(output['queued_images']))
+        self.assertEqual(0, len(output['cached_images']))
+
+        output = self.os_admin.image_cache_client.list_cache()
+        self._assertCheckCache(output['cached_images'], self.cached_info)
+
+        # Delete image from local cache as well
+        self.os_admin.image_cache_client.cache_clear()
+        output = self.os_admin.image_cache_client.list_cache()
+        self.assertEqual(0, len(output['queued_images']))
+        self.assertEqual(0, len(output['cached_images']))
+
+        # Remove all data from local and remote information
+        self.cached_info = []
+        self.cached_info_remote = []
diff --git a/tempest/api/image/v2/admin/test_image_task.py b/tempest/api/image/v2/admin/test_image_task.py
index 9439e91..6437a3c 100644
--- a/tempest/api/image/v2/admin/test_image_task.py
+++ b/tempest/api/image/v2/admin/test_image_task.py
@@ -61,7 +61,8 @@
         i = 0
         tasks = list()
         while i < len(disk_format):
-            image_name = data_utils.rand_name("task_image")
+            image_name = data_utils.rand_name(
+                prefix=CONF.resource_name_prefix, name="task_image")
             image_property = {"container_format": "bare",
                               "disk_format": disk_format[0],
                               "visibility": "public",
@@ -126,8 +127,12 @@
     @decorators.idempotent_id("ad6450c6-7060-4ee7-a2d1-41c2604b446c")
     @decorators.attr(type=['negative'])
     def test_task_create_fake_image_location(self):
+        kwargs = {
+            'prefix': CONF.resource_name_prefix,
+            'name': 'dummy-img-file'
+        }
         http_fake_url = ''.join(
-            ["http://", data_utils.rand_name('dummy-img-file'), ".qcow2"])
+            ["http://", data_utils.rand_name(**kwargs), ".qcow2"])
         task = self._prepare_image_tasks_param(
             image_from_format=['qcow2'],
             disk_format=['qcow2'],
diff --git a/tempest/api/image/v2/admin/test_images.py b/tempest/api/image/v2/admin/test_images.py
index ce50c5d..2b1c4fb 100644
--- a/tempest/api/image/v2/admin/test_images.py
+++ b/tempest/api/image/v2/admin/test_images.py
@@ -63,7 +63,9 @@
     @decorators.idempotent_id('f6ab4aa0-035e-4664-9f2d-c57c6df50605')
     def test_list_public_image(self):
         """Test create image as admin and list public image as none admin"""
-        name = data_utils.rand_name(self.__class__.__name__ + '-Image')
+        name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-Image')
         image = self.admin_client.create_image(
             name=name,
             container_format='bare',
@@ -107,7 +109,8 @@
             raise self.skipException('Either copy-image import method or '
                                      'multistore is not available')
         uuid = data_utils.rand_uuid()
-        image_name = data_utils.rand_name('copy-image')
+        image_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='copy-image')
         container_format = CONF.image.container_formats[0]
         disk_format = CONF.image.disk_formats[0]
         image = self.create_image(name=image_name,
@@ -176,3 +179,59 @@
         self.assertRaises(lib_exc.Forbidden,
                           self.admin_client.update_image, image['id'], [
                               dict(remove='/locations/0')])
+
+
+class MultiStoresImagesTest(base.BaseV2ImageAdminTest, base.BaseV2ImageTest):
+    """Test importing and deleting image in multiple stores"""
+    @classmethod
+    def skip_checks(cls):
+        super(MultiStoresImagesTest, cls).skip_checks()
+        if not CONF.image_feature_enabled.import_image:
+            skip_msg = (
+                "%s skipped as image import is not available" % cls.__name__)
+            raise cls.skipException(skip_msg)
+
+    @classmethod
+    def resource_setup(cls):
+        super(MultiStoresImagesTest, cls).resource_setup()
+        cls.available_import_methods = \
+            cls.client.info_import()['import-methods']['value']
+        if not cls.available_import_methods:
+            raise cls.skipException('Server does not support '
+                                    'any import method')
+
+        # NOTE(pdeore): Skip if glance-direct import method and mutlistore
+        # are not enabled/configured, or only one store is configured in
+        # multiple stores setup.
+        cls.available_stores = cls.get_available_stores()
+        if ('glance-direct' not in cls.available_import_methods or
+                not len(cls.available_stores) > 1):
+            raise cls.skipException(
+                'Either glance-direct import method not present in %s or '
+                'None or only one store is '
+                'configured %s' % (cls.available_import_methods,
+                                   cls.available_stores))
+
+    @decorators.idempotent_id('1ecec683-41d4-4470-a0df-54969ec74514')
+    def test_delete_image_from_specific_store(self):
+        """Test delete image from specific store"""
+        # Import image to available stores
+        image, stores = self.create_and_stage_image(all_stores=True)
+        self.client.image_import(image['id'],
+                                 method='glance-direct',
+                                 all_stores=True)
+        self.addCleanup(self.admin_client.delete_image, image['id'])
+        waiters.wait_for_image_imported_to_stores(
+            self.client,
+            image['id'], stores)
+        observed_image = self.client.show_image(image['id'])
+
+        # Image will be deleted from first store
+        first_image_store_deleted = (observed_image['stores'].split(","))[0]
+        self.admin_client.delete_image_from_store(
+            observed_image['id'], first_image_store_deleted)
+        waiters.wait_for_image_deleted_from_store(
+            self.admin_client,
+            observed_image,
+            stores,
+            first_image_store_deleted)
diff --git a/tempest/api/image/v2/admin/test_images_metadefs_namespace_objects.py b/tempest/api/image/v2/admin/test_images_metadefs_namespace_objects.py
index 9222920..f244ebc 100644
--- a/tempest/api/image/v2/admin/test_images_metadefs_namespace_objects.py
+++ b/tempest/api/image/v2/admin/test_images_metadefs_namespace_objects.py
@@ -11,16 +11,21 @@
 #    under the License.
 
 from tempest.api.image import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib.common.utils import test_utils
 from tempest.lib import decorators
 
+CONF = config.CONF
+
 
 class MetadataNamespaceObjectsTest(base.BaseV2ImageAdminTest):
     """Test the Metadata definition namespace objects basic functionality"""
 
     def _create_namespace_object(self, namespace):
-        object_name = data_utils.rand_name(self.__class__.__name__ + '-object')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-object')
         namespace_object = self.namespace_objects_client.\
             create_namespace_object(namespace['namespace'], name=object_name)
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
@@ -36,7 +41,8 @@
         # Create a namespace object
         body = self._create_namespace_object(namespace)
         # Update a namespace object
-        up_object_name = data_utils.rand_name('update-object')
+        up_object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='update-object')
         body = self.namespace_objects_client.update_namespace_object(
             namespace['namespace'], body['name'],
             name=up_object_name)
diff --git a/tempest/api/image/v2/admin/test_images_metadefs_namespace_properties.py b/tempest/api/image/v2/admin/test_images_metadefs_namespace_properties.py
index 10dfba1..5e0d28d 100644
--- a/tempest/api/image/v2/admin/test_images_metadefs_namespace_properties.py
+++ b/tempest/api/image/v2/admin/test_images_metadefs_namespace_properties.py
@@ -11,9 +11,12 @@
 #    under the License.
 
 from tempest.api.image import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 
+CONF = config.CONF
+
 
 class MetadataNamespacePropertiesTest(base.BaseV2ImageAdminTest):
     """Test the Metadata definition namespace property basic functionality"""
@@ -31,7 +34,8 @@
         body = self.resource_types_client.create_resource_type_association(
             namespace['namespace'], name=resource_name)
         # Create a property
-        property_title = data_utils.rand_name('property')
+        property_title = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='property')
         body = self.namespace_properties_client.create_namespace_property(
             namespace=namespace['namespace'], title=property_title,
             name=resource_name, type="string", enum=enum)
@@ -41,7 +45,9 @@
             namespace['namespace'], resource_name)
         self.assertEqual(resource_name, body['name'])
         # Update namespace property
-        update_property_title = data_utils.rand_name('update-property')
+        update_property_title = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name='update-property')
         body = self.namespace_properties_client.update_namespace_properties(
             namespace['namespace'], resource_name,
             title=update_property_title, type="string",
diff --git a/tempest/api/image/v2/admin/test_images_metadefs_namespace_tags.py b/tempest/api/image/v2/admin/test_images_metadefs_namespace_tags.py
index 9e88e03..361bb60 100644
--- a/tempest/api/image/v2/admin/test_images_metadefs_namespace_tags.py
+++ b/tempest/api/image/v2/admin/test_images_metadefs_namespace_tags.py
@@ -11,10 +11,13 @@
 #    under the License.
 
 from tempest.api.image import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib.common.utils import test_utils
 from tempest.lib import decorators
 
+CONF = config.CONF
+
 
 class MetadataNamespaceTagsTest(base.BaseV2ImageAdminTest):
     """Test the Metadata definition namespace tags basic functionality"""
@@ -68,7 +71,8 @@
         namespace = self.create_namespace()
         self._create_namespace_tags(namespace)
         # Create a tag
-        tag_name = data_utils.rand_name('tag_name')
+        tag_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='tag_name')
         self.namespace_tags_client.create_namespace_tag(
             namespace=namespace['namespace'], tag_name=tag_name)
 
@@ -76,7 +80,8 @@
             namespace['namespace'], tag_name)
         self.assertEqual(tag_name, body['name'])
         # Update tag definition
-        update_tag_definition = data_utils.rand_name('update-tag')
+        update_tag_definition = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='update-tag')
         body = self.namespace_tags_client.update_namespace_tag(
             namespace['namespace'], tag_name=tag_name,
             name=update_tag_definition)
diff --git a/tempest/api/image/v2/admin/test_images_metadefs_namespaces.py b/tempest/api/image/v2/admin/test_images_metadefs_namespaces.py
index c411aa9..be6d01a 100644
--- a/tempest/api/image/v2/admin/test_images_metadefs_namespaces.py
+++ b/tempest/api/image/v2/admin/test_images_metadefs_namespaces.py
@@ -14,11 +14,14 @@
 #    under the License.
 
 from tempest.api.image import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib.common.utils import test_utils
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
 
+CONF = config.CONF
+
 
 class MetadataNamespacesTest(base.BaseV2ImageAdminTest):
     """Test the Metadata definition Namespaces basic functionality"""
@@ -30,7 +33,8 @@
         body = self.resource_types_client.list_resource_types()
         resource_name = body['resource_types'][0]['name']
         name = [{'name': resource_name}]
-        namespace_name = data_utils.rand_name('namespace')
+        namespace_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='namespace')
         # create the metadef namespace
         body = self.namespaces_client.create_namespace(
             namespace=namespace_name,
diff --git a/tempest/api/image/v2/test_images.py b/tempest/api/image/v2/test_images.py
index 977ad82..e468e32 100644
--- a/tempest/api/image/v2/test_images.py
+++ b/tempest/api/image/v2/test_images.py
@@ -53,7 +53,8 @@
     def _create_image(self, disk_format=None, container_format=None):
         # Create image
         uuid = '00000000-1111-2222-3333-444455556666'
-        image_name = data_utils.rand_name('image')
+        image_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='image')
         container_format = container_format or CONF.image.container_formats[0]
         disk_format = disk_format or CONF.image.disk_formats[0]
         image = self.create_image(name=image_name,
@@ -343,36 +344,6 @@
                 'configured %s' % (cls.available_import_methods,
                                    cls.available_stores))
 
-    def _create_and_stage_image(self, all_stores=False):
-        """Create Image & stage image file for glance-direct import method."""
-        image_name = data_utils.rand_name('test-image')
-        container_format = CONF.image.container_formats[0]
-        disk_format = CONF.image.disk_formats[0]
-        image = self.create_image(name=image_name,
-                                  container_format=container_format,
-                                  disk_format=disk_format,
-                                  visibility='private')
-        self.assertEqual('queued', image['status'])
-
-        self.client.stage_image_file(
-            image['id'],
-            io.BytesIO(data_utils.random_bytes()))
-        # Check image status is 'uploading'
-        body = self.client.show_image(image['id'])
-        self.assertEqual(image['id'], body['id'])
-        self.assertEqual('uploading', body['status'])
-
-        if all_stores:
-            stores_list = ','.join([store['id']
-                                    for store in self.available_stores
-                                    if store.get('read-only') != 'true'])
-        else:
-            stores = [store['id'] for store in self.available_stores
-                      if store.get('read-only') != 'true']
-            stores_list = stores[::max(1, len(stores) - 1)]
-
-        return body, stores_list
-
     @decorators.idempotent_id('bf04ff00-3182-47cb-833a-f1c6767b47fd')
     def test_glance_direct_import_image_to_all_stores(self):
         """Test image is imported in all available stores
@@ -380,7 +351,7 @@
         Create image, import image to all available stores using glance-direct
         import method and verify that import succeeded.
         """
-        image, stores = self._create_and_stage_image(all_stores=True)
+        image, stores = self.create_and_stage_image(all_stores=True)
 
         self.client.image_import(
             image['id'], method='glance-direct', all_stores=True)
@@ -395,7 +366,7 @@
         Create image, import image to specified store(s) using glance-direct
         import method and verify that import succeeded.
         """
-        image, stores = self._create_and_stage_image()
+        image, stores = self.create_and_stage_image()
         self.client.image_import(image['id'], method='glance-direct',
                                  stores=stores)
 
@@ -416,7 +387,8 @@
         """
 
         uuid = '00000000-1111-2222-3333-444455556666'
-        image_name = data_utils.rand_name('image')
+        image_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='image')
         container_format = CONF.image.container_formats[0]
         disk_format = CONF.image.disk_formats[0]
         image = self.create_image(name=image_name,
@@ -464,7 +436,8 @@
     def test_delete_image(self):
         """Test deleting an image by image_id"""
         # Create image
-        image_name = data_utils.rand_name('image')
+        image_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='image')
         container_format = CONF.image.container_formats[0]
         disk_format = CONF.image.disk_formats[0]
         image = self.create_image(name=image_name,
@@ -485,7 +458,8 @@
     def test_update_image(self):
         """Test updating an image by image_id"""
         # Create image
-        image_name = data_utils.rand_name('image')
+        image_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='image')
         container_format = CONF.image.container_formats[0]
         disk_format = CONF.image.disk_formats[0]
         image = self.create_image(name=image_name,
@@ -495,7 +469,8 @@
         self.assertEqual('queued', image['status'])
 
         # Update Image
-        new_image_name = data_utils.rand_name('new-image')
+        new_image_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='new-image')
         self.client.update_image(image['id'], [
             dict(replace='/name', value=new_image_name)])
 
@@ -509,7 +484,8 @@
     def test_deactivate_reactivate_image(self):
         """Test deactivating and reactivating an image"""
         # Create image
-        image_name = data_utils.rand_name('image')
+        image_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='image')
         image = self.create_image(name=image_name,
                                   container_format='bare',
                                   disk_format='raw',
@@ -568,7 +544,9 @@
         """
         size = random.randint(1024, 4096)
         image_file = io.BytesIO(data_utils.random_bytes(size))
-        tags = [data_utils.rand_name('tag'), data_utils.rand_name('tag')]
+        prefix = CONF.resource_name_prefix
+        tags = [data_utils.rand_name(prefix=prefix, name='tag'),
+                data_utils.rand_name(prefix=prefix, name='tag')]
         image = cls.create_image(container_format=container_format,
                                  disk_format=disk_format,
                                  visibility='private',
diff --git a/tempest/api/image/v2/test_images_negative.py b/tempest/api/image/v2/test_images_negative.py
index 80c01a5..f0b891f 100644
--- a/tempest/api/image/v2/test_images_negative.py
+++ b/tempest/api/image/v2/test_images_negative.py
@@ -58,7 +58,10 @@
     def test_get_delete_deleted_image(self):
         """Get and delete the deleted image"""
         # create and delete image
-        image = self.client.create_image(name='test',
+        image_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name="test")
+        image = self.client.create_image(name=image_name,
                                          container_format='bare',
                                          disk_format='raw')
         self.client.delete_image(image['id'])
@@ -111,7 +114,10 @@
     @decorators.idempotent_id('ab980a34-8410-40eb-872b-f264752f46e5')
     def test_delete_protected_image(self):
         """Create a protected image"""
-        image = self.create_image(protected=True)
+        image_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name="test")
+        image = self.create_image(name=image_name, protected=True)
         self.addCleanup(self.client.update_image, image['id'],
                         [dict(replace="/protected", value=False)])
 
@@ -132,7 +138,10 @@
         if not CONF.image_feature_enabled.os_glance_reserved:
             raise self.skipException('os_glance_reserved is not enabled')
 
-        image = self.create_image(name='test',
+        image_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name="test")
+        image = self.create_image(name=image_name,
                                   container_format='bare',
                                   disk_format='raw')
         self.assertRaises(lib_exc.Forbidden,
@@ -152,9 +161,12 @@
         if not CONF.image_feature_enabled.os_glance_reserved:
             raise self.skipException('os_glance_reserved is not enabled')
 
+        image_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name="test")
         self.assertRaises(lib_exc.Forbidden,
                           self.create_image,
-                          name='test',
+                          name=image_name,
                           container_format='bare',
                           disk_format='raw',
                           os_glance_foo='bar')
@@ -195,7 +207,10 @@
         if 'web-download' not in self.available_import_methods:
             raise self.skipException('Server does not support '
                                      'web-download import method')
-        image = self.client.create_image(name='test',
+        image_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name="test")
+        image = self.client.create_image(name=image_name,
                                          container_format='bare',
                                          disk_format='raw')
         # Now try to get image details
diff --git a/tempest/api/image/v2/test_images_tags.py b/tempest/api/image/v2/test_images_tags.py
index 163063c..12e6c8e 100644
--- a/tempest/api/image/v2/test_images_tags.py
+++ b/tempest/api/image/v2/test_images_tags.py
@@ -13,9 +13,12 @@
 # under the License.
 
 from tempest.api.image import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 
+CONF = config.CONF
+
 
 class ImagesTagsTest(base.BaseV2ImageTest):
     """Test image tags"""
@@ -26,7 +29,8 @@
         image = self.create_image(container_format='bare',
                                   disk_format='raw',
                                   visibility='private')
-        tag = data_utils.rand_name('tag')
+        tag = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='tag')
         self.addCleanup(self.client.delete_image, image['id'])
 
         # Creating image tag and verify it.
diff --git a/tempest/api/image/v2/test_images_tags_negative.py b/tempest/api/image/v2/test_images_tags_negative.py
index 2db4a74..9d74aa4 100644
--- a/tempest/api/image/v2/test_images_tags_negative.py
+++ b/tempest/api/image/v2/test_images_tags_negative.py
@@ -13,10 +13,13 @@
 # under the License.
 
 from tempest.api.image import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
 
+CONF = config.CONF
+
 
 class ImagesTagsNegativeTest(base.BaseV2ImageTest):
     """Negative tests of image tags"""
@@ -25,7 +28,8 @@
     @decorators.idempotent_id('8cd30f82-6f9a-4c6e-8034-c1b51fba43d9')
     def test_update_tags_for_non_existing_image(self):
         """Update image tag with non existing image"""
-        tag = data_utils.rand_name('tag')
+        tag = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='tag')
         non_exist_image = data_utils.rand_uuid()
         self.assertRaises(lib_exc.NotFound, self.client.add_image_tag,
                           non_exist_image, tag)
@@ -38,7 +42,8 @@
                                   disk_format='raw',
                                   visibility='private'
                                   )
-        tag = data_utils.rand_name('non-exist-tag')
+        tag = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='non-exist-tag')
         self.addCleanup(self.client.delete_image, image['id'])
         self.assertRaises(lib_exc.NotFound, self.client.delete_image_tag,
                           image['id'], tag)
diff --git a/tempest/api/network/admin/test_dhcp_agent_scheduler.py b/tempest/api/network/admin/test_dhcp_agent_scheduler.py
index 3c0efee..b4bfc61 100644
--- a/tempest/api/network/admin/test_dhcp_agent_scheduler.py
+++ b/tempest/api/network/admin/test_dhcp_agent_scheduler.py
@@ -31,6 +31,15 @@
     @classmethod
     def resource_setup(cls):
         super(DHCPAgentSchedulersTestJSON, cls).resource_setup()
+        # NOTE(slaweq): In some cases (like default ML2/OVN deployment)
+        # extension is enabled but there may not be any DHCP agent available.
+        # In such case those tests should be also skipped.
+        dhcp_agents = cls.admin_agents_client.list_agents(
+            agent_type="DHCP Agent")['agents']
+        if not dhcp_agents:
+            msg = ("At least one DHCP agent is required to be running in "
+                   "the environment for those tests.")
+            raise cls.skipException(msg)
         # Create a network and make sure it will be hosted by a
         # dhcp agent: this is done by creating a regular port
         cls.network = cls.create_network()
diff --git a/tempest/api/network/admin/test_external_network_extension.py b/tempest/api/network/admin/test_external_network_extension.py
index 0cec316..8d71a27 100644
--- a/tempest/api/network/admin/test_external_network_extension.py
+++ b/tempest/api/network/admin/test_external_network_extension.py
@@ -31,7 +31,8 @@
         cls.network = cls.create_network()
 
     def _create_network(self, external=True):
-        post_body = {'name': data_utils.rand_name('network-')}
+        post_body = {'name': data_utils.rand_name(
+            name='network-', prefix=CONF.resource_name_prefix)}
         if external:
             post_body['router:external'] = external
         body = self.admin_networks_client.create_network(**post_body)
diff --git a/tempest/api/network/admin/test_external_networks_negative.py b/tempest/api/network/admin/test_external_networks_negative.py
index 92731f6..ef10ee0 100644
--- a/tempest/api/network/admin/test_external_networks_negative.py
+++ b/tempest/api/network/admin/test_external_networks_negative.py
@@ -54,6 +54,8 @@
         # create a port which will internally create an instance-ip
         self.assertRaises(lib_exc.Conflict,
                           self.admin_ports_client.create_port,
-                          name=data_utils.rand_name(self.__class__.__name__),
+                          name=data_utils.rand_name(
+                              self.__class__.__name__,
+                              prefix=CONF.resource_name_prefix),
                           network_id=CONF.network.public_network_id,
                           fixed_ips=fixed_ips)
diff --git a/tempest/api/network/admin/test_metering_extensions.py b/tempest/api/network/admin/test_metering_extensions.py
index a60cd48..919aaf2 100644
--- a/tempest/api/network/admin/test_metering_extensions.py
+++ b/tempest/api/network/admin/test_metering_extensions.py
@@ -14,10 +14,13 @@
 
 from tempest.api.network import base
 from tempest.common import utils
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib.common.utils import test_utils
 from tempest.lib import decorators
 
+CONF = config.CONF
+
 
 class MeteringTestJSON(base.BaseAdminNetworkTest):
     """Tests the following operations in the Neutron API:
@@ -37,7 +40,8 @@
     def resource_setup(cls):
         super(MeteringTestJSON, cls).resource_setup()
         description = "metering label created by tempest"
-        name = data_utils.rand_name("metering-label")
+        name = data_utils.rand_name(
+            name="metering-label", prefix=CONF.resource_name_prefix)
         cls.metering_label = cls.create_metering_label(name, description)
         remote_ip_prefix = ("10.0.0.0/24" if cls._ip_version == 4
                             else "fd02::/64")
@@ -101,7 +105,8 @@
     def test_create_delete_metering_label_with_filters(self):
         """Verifies creating and deleting metering label with filters"""
         # Creates a label
-        name = data_utils.rand_name('metering-label-')
+        name = data_utils.rand_name(
+            name='metering-label-', prefix=CONF.resource_name_prefix)
         description = "label created by tempest"
         body = self.admin_metering_labels_client.create_metering_label(
             name=name, description=description)
diff --git a/tempest/api/network/admin/test_ports.py b/tempest/api/network/admin/test_ports.py
index 5f9f29f..3158749 100644
--- a/tempest/api/network/admin/test_ports.py
+++ b/tempest/api/network/admin/test_ports.py
@@ -45,7 +45,9 @@
         """Test creating port with extended attribute"""
         post_body = {"network_id": self.network['id'],
                      "binding:host_id": self.host_id,
-                     "name": data_utils.rand_name(self.__class__.__name__)}
+                     "name": data_utils.rand_name(
+            self.__class__.__name__,
+            prefix=CONF.resource_name_prefix)}
         body = self.admin_ports_client.create_port(**post_body)
         port = body['port']
         self.addCleanup(self.admin_ports_client.wait_for_resource_deletion,
@@ -62,7 +64,9 @@
     def test_update_port_binding_ext_attr(self):
         """Test updating port's extended attribute"""
         post_body = {"network_id": self.network['id'],
-                     "name": data_utils.rand_name(self.__class__.__name__)}
+                     "name": data_utils.rand_name(
+            self.__class__.__name__,
+            prefix=CONF.resource_name_prefix)}
         body = self.admin_ports_client.create_port(**post_body)
         port = body['port']
         self.addCleanup(self.admin_ports_client.wait_for_resource_deletion,
@@ -83,7 +87,9 @@
         """Test updating and listing port's extended attribute"""
         # Create a new port
         post_body = {"network_id": self.network['id'],
-                     "name": data_utils.rand_name(self.__class__.__name__)}
+                     "name": data_utils.rand_name(
+            self.__class__.__name__,
+            prefix=CONF.resource_name_prefix)}
         body = self.admin_ports_client.create_port(**post_body)
         port = body['port']
         self.addCleanup(self.admin_ports_client.wait_for_resource_deletion,
@@ -113,7 +119,8 @@
     def test_show_port_binding_ext_attr(self):
         """Test showing port's extended attribute"""
         body = self.admin_ports_client.create_port(
-            name=data_utils.rand_name(self.__class__.__name__),
+            name=data_utils.rand_name(
+                self.__class__.__name__, prefix=CONF.resource_name_prefix),
             network_id=self.network['id'])
         port = body['port']
         self.addCleanup(self.admin_ports_client.wait_for_resource_deletion,
diff --git a/tempest/api/network/admin/test_routers.py b/tempest/api/network/admin/test_routers.py
index 90e0917..216b15d 100644
--- a/tempest/api/network/admin/test_routers.py
+++ b/tempest/api/network/admin/test_routers.py
@@ -54,16 +54,17 @@
 
     @decorators.idempotent_id('e54dd3a3-4352-4921-b09d-44369ae17397')
     def test_create_router_setting_project_id(self):
+        prefix = CONF.resource_name_prefix
         """Test creating router from admin user setting project_id."""
-        project = data_utils.rand_name('test_tenant_')
-        description = data_utils.rand_name('desc_')
+        project = data_utils.rand_name(name='test_tenant_', prefix=prefix)
+        description = data_utils.rand_name(name='desc_', prefix=prefix)
         project = identity.identity_utils(self.os_admin).create_project(
             name=project, description=description)
         project_id = project['id']
         self.addCleanup(identity.identity_utils(self.os_admin).delete_project,
                         project_id)
 
-        name = data_utils.rand_name('router-')
+        name = data_utils.rand_name(name='router-', prefix=prefix)
         create_body = self.admin_routers_client.create_router(
             name=name, project_id=project_id)
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
@@ -89,7 +90,8 @@
                           'The public_network_id option must be specified.')
     def test_create_router_with_snat_explicit(self):
         """Test creating router with specified enable_snat value"""
-        name = data_utils.rand_name('snat-router')
+        name = data_utils.rand_name(
+            'snat-router', prefix=CONF.resource_name_prefix)
         # Create a router enabling snat attributes
         enable_snat_states = [False, True]
         for enable_snat in enable_snat_states:
@@ -226,7 +228,8 @@
         """Test creating router setting gateway with fixed ip"""
         # At first create an external network and then use that
         # to create address and delete
-        network_name = data_utils.rand_name(self.__class__.__name__)
+        network_name = data_utils.rand_name(
+            self.__class__.__name__, prefix=CONF.resource_name_prefix)
         network_1 = self.admin_networks_client.create_network(
             name=network_name, **{'router:external': True})['network']
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
@@ -237,7 +240,8 @@
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
                         self.admin_subnets_client.delete_subnet, subnet['id'])
         port = self.admin_ports_client.create_port(
-            name=data_utils.rand_name(self.__class__.__name__),
+            name=data_utils.rand_name(
+                self.__class__.__name__, prefix=CONF.resource_name_prefix),
             network_id=network_1['id'])['port']
         self.admin_ports_client.delete_port(port_id=port['id'])
         fixed_ip = {
diff --git a/tempest/api/network/admin/test_routers_dvr.py b/tempest/api/network/admin/test_routers_dvr.py
index 291581c..f19857d 100644
--- a/tempest/api/network/admin/test_routers_dvr.py
+++ b/tempest/api/network/admin/test_routers_dvr.py
@@ -17,10 +17,13 @@
 
 from tempest.api.network import base
 from tempest.common import utils
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib.common.utils import test_utils
 from tempest.lib import decorators
 
+CONF = config.CONF
+
 
 class RoutersTestDVR(base.BaseAdminNetworkTest):
 
@@ -41,7 +44,8 @@
     @classmethod
     def resource_setup(cls):
         super(RoutersTestDVR, cls).resource_setup()
-        name = data_utils.rand_name('pretest-check')
+        name = data_utils.rand_name(
+            name='pretest-check', prefix=CONF.resource_name_prefix)
         router = cls.admin_routers_client.create_router(name=name)
         cls.admin_routers_client.delete_router(router['router']['id'])
         if 'distributed' not in router['router']:
@@ -60,7 +64,8 @@
         The router is created and the "distributed" attribute is
         set to True
         """
-        name = data_utils.rand_name('router')
+        name = data_utils.rand_name(
+            name='router', prefix=CONF.resource_name_prefix)
         router = self.admin_routers_client.create_router(name=name,
                                                          distributed=True)
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
@@ -81,7 +86,8 @@
         set to False, thus making it a "Centralized Virtual Router"
         as opposed to a "Distributed Virtual Router"
         """
-        name = data_utils.rand_name('router')
+        name = data_utils.rand_name(
+            name='router', prefix=CONF.resource_name_prefix)
         router = self.admin_routers_client.create_router(name=name,
                                                          distributed=False)
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
@@ -105,7 +111,8 @@
         set to False. Once the router is updated, the distributed
         attribute will be set to True
         """
-        name = data_utils.rand_name('router')
+        name = data_utils.rand_name(
+            name='router', prefix=CONF.resource_name_prefix)
         project_id = self.routers_client.project_id
         # router needs to be in admin state down in order to be upgraded to DVR
         # l3ha routers are not upgradable to dvr, make it explicitly non ha
diff --git a/tempest/api/network/admin/test_routers_negative.py b/tempest/api/network/admin/test_routers_negative.py
index 914c046..2a07f16 100644
--- a/tempest/api/network/admin/test_routers_negative.py
+++ b/tempest/api/network/admin/test_routers_negative.py
@@ -45,7 +45,8 @@
         """Test creating router with gateway set to used ip should fail"""
         # At first create a address from public_network_id
         port = self.admin_ports_client.create_port(
-            name=data_utils.rand_name(self.__class__.__name__),
+            name=data_utils.rand_name(
+                self.__class__.__name__, prefix=CONF.resource_name_prefix),
             network_id=CONF.network.public_network_id)['port']
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
                         self.admin_ports_client.delete_port,
diff --git a/tempest/api/network/base.py b/tempest/api/network/base.py
index 696d68d..99742cc 100644
--- a/tempest/api/network/base.py
+++ b/tempest/api/network/base.py
@@ -104,7 +104,7 @@
     def create_network(cls, network_name=None, **kwargs):
         """Wrapper utility that returns a test network."""
         network_name = network_name or data_utils.rand_name(
-            cls.__name__ + '-test-network')
+            cls.__name__ + '-test-network', prefix=CONF.resource_name_prefix)
 
         body = cls.networks_client.create_network(name=network_name, **kwargs)
         network = body['network']
@@ -161,7 +161,8 @@
     @classmethod
     def create_port(cls, network, **kwargs):
         if 'name' not in kwargs:
-            kwargs['name'] = data_utils.rand_name(cls.__name__)
+            kwargs['name'] = data_utils.rand_name(
+                cls.__name__, prefix=CONF.resource_name_prefix)
         """Wrapper utility that returns a test port."""
         body = cls.ports_client.create_port(network_id=network['id'],
                                             **kwargs)
@@ -182,7 +183,7 @@
                       external_network_id=None, enable_snat=None,
                       **kwargs):
         router_name = router_name or data_utils.rand_name(
-            cls.__name__ + "-router")
+            cls.__name__ + "-router", prefix=CONF.resource_name_prefix)
 
         ext_gw_info = {}
         if external_network_id:
diff --git a/tempest/api/network/base_security_groups.py b/tempest/api/network/base_security_groups.py
index 32f2cdd..a1bb68d 100644
--- a/tempest/api/network/base_security_groups.py
+++ b/tempest/api/network/base_security_groups.py
@@ -14,15 +14,19 @@
 #    under the License.
 
 from tempest.api.network import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib.common.utils import test_utils
 
+CONF = config.CONF
+
 
 class BaseSecGroupTest(base.BaseNetworkTest):
 
     def _create_security_group(self):
         # Create a security group
-        name = data_utils.rand_name('secgroup-')
+        name = data_utils.rand_name(
+            name='secgroup-', prefix=CONF.resource_name_prefix)
         group_create_body = (
             self.security_groups_client.create_security_group(name=name))
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
diff --git a/tempest/api/network/test_allowed_address_pair.py b/tempest/api/network/test_allowed_address_pair.py
index bf9eae6..5c28e96 100644
--- a/tempest/api/network/test_allowed_address_pair.py
+++ b/tempest/api/network/test_allowed_address_pair.py
@@ -15,10 +15,13 @@
 
 from tempest.api.network import base
 from tempest.common import utils
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib.common.utils import test_utils
 from tempest.lib import decorators
 
+CONF = config.CONF
+
 
 class AllowedAddressPairTestJSON(base.BaseNetworkTest):
     """Tests the Neutron Allowed Address Pair API extension
@@ -60,7 +63,8 @@
                                   'mac_address': self.mac_address}]
         body = self.ports_client.create_port(
             network_id=self.network['id'],
-            name=data_utils.rand_name(self.__class__.__name__),
+            name=data_utils.rand_name(
+                self.__class__.__name__, prefix=CONF.resource_name_prefix),
             allowed_address_pairs=allowed_address_pairs)
         port_id = body['port']['id']
         self.addCleanup(self.ports_client.wait_for_resource_deletion,
@@ -80,7 +84,8 @@
         # Create a port without allowed address pair
         body = self.ports_client.create_port(
             network_id=self.network['id'],
-            name=data_utils.rand_name(self.__class__.__name__))
+            name=data_utils.rand_name(
+                self.__class__.__name__, prefix=CONF.resource_name_prefix))
         port_id = body['port']['id']
         self.addCleanup(self.ports_client.wait_for_resource_deletion,
                         port_id)
@@ -126,7 +131,8 @@
         """Update allowed address pair port with multiple ip and mac"""
         resp = self.ports_client.create_port(
             network_id=self.network['id'],
-            name=data_utils.rand_name(self.__class__.__name__))
+            name=data_utils.rand_name(
+                self.__class__.__name__, prefix=CONF.resource_name_prefix))
         newportid = resp['port']['id']
         self.addCleanup(self.ports_client.wait_for_resource_deletion,
                         newportid)
diff --git a/tempest/api/network/test_extra_dhcp_options.py b/tempest/api/network/test_extra_dhcp_options.py
index bc6418a..36578b1 100644
--- a/tempest/api/network/test_extra_dhcp_options.py
+++ b/tempest/api/network/test_extra_dhcp_options.py
@@ -15,10 +15,13 @@
 
 from tempest.api.network import base
 from tempest.common import utils
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib.common.utils import test_utils
 from tempest.lib import decorators
 
+CONF = config.CONF
+
 
 class ExtraDHCPOptionsTestJSON(base.BaseNetworkTest):
     """Tests the following operations with the Extra DHCP Options:
@@ -61,7 +64,8 @@
         """Test creating a port with Extra DHCP Options and list those"""
         body = self.ports_client.create_port(
             network_id=self.network['id'],
-            name=data_utils.rand_name(self.__class__.__name__),
+            name=data_utils.rand_name(
+                self.__class__.__name__, prefix=CONF.resource_name_prefix),
             extra_dhcp_opts=self.extra_dhcp_opts)
         port_id = body['port']['id']
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
@@ -77,7 +81,8 @@
     @decorators.idempotent_id('9a6aebf4-86ee-4f47-b07a-7f7232c55607')
     def test_update_show_port_with_extra_dhcp_options(self):
         """Test updating port with extra DHCP options and show that port"""
-        name = data_utils.rand_name('new-port-name')
+        name = data_utils.rand_name(
+            name='new-port-name', prefix=CONF.resource_name_prefix)
         self.ports_client.update_port(
             self.port['id'],
             name=name,
diff --git a/tempest/api/network/test_floating_ips.py b/tempest/api/network/test_floating_ips.py
index 64f6e80..e39ad08 100644
--- a/tempest/api/network/test_floating_ips.py
+++ b/tempest/api/network/test_floating_ips.py
@@ -153,7 +153,8 @@
         # Create a port
         port = self.ports_client.create_port(
             network_id=self.network['id'],
-            name=data_utils.rand_name(self.__class__.__name__))
+            name=data_utils.rand_name(
+                self.__class__.__name__, prefix=CONF.resource_name_prefix))
         created_port = port['port']
         floating_ip = self.floating_ips_client.update_floatingip(
             created_floating_ip['id'],
@@ -183,7 +184,8 @@
             self.floating_ips_client.delete_floatingip,
             created_floating_ip['id'])
         self.assertEqual(created_floating_ip['router_id'], self.router['id'])
-        network_name = data_utils.rand_name(self.__class__.__name__)
+        network_name = data_utils.rand_name(
+            self.__class__.__name__, prefix=CONF.resource_name_prefix)
         network2 = self.networks_client.create_network(
             name=network_name)['network']
         self.addCleanup(
@@ -258,7 +260,8 @@
         # Create port
         body = self.ports_client.create_port(
             network_id=self.network['id'],
-            name=data_utils.rand_name(self.__class__.__name__),
+            name=data_utils.rand_name(
+                self.__class__.__name__, prefix=CONF.resource_name_prefix),
             fixed_ips=fixed_ips)
         port = body['port']
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
diff --git a/tempest/api/network/test_networks.py b/tempest/api/network/test_networks.py
index caaf964..fd93779 100644
--- a/tempest/api/network/test_networks.py
+++ b/tempest/api/network/test_networks.py
@@ -468,8 +468,11 @@
     def test_bulk_create_delete_network(self):
         """Verify creating and deleting multiple networks in one request"""
         # Creates 2 networks in one request
-        network_list = [{'name': data_utils.rand_name('network-')},
-                        {'name': data_utils.rand_name('network-')}]
+        network_list = [
+            {'name': data_utils.rand_name(
+                'network-', prefix=CONF.resource_name_prefix)},
+            {'name': data_utils.rand_name(
+                'network-', prefix=CONF.resource_name_prefix)}]
         body = self.networks_client.create_bulk_networks(networks=network_list)
         created_networks = body['networks']
         self.addCleanup(self._delete_networks, created_networks)
@@ -489,7 +492,9 @@
         cidrs = [subnet_cidr
                  for subnet_cidr in self.cidr.subnet(self.mask_bits)]
 
-        names = [data_utils.rand_name('subnet-') for i in range(len(networks))]
+        names = [data_utils.rand_name(
+            name='subnet-', prefix=CONF.resource_name_prefix)
+            for i in range(len(networks))]
         subnets_list = []
         for i in range(len(names)):
             p1 = {
@@ -516,7 +521,9 @@
         """Verify creating and deleting multiple ports in one request"""
         networks = [self.create_network(), self.create_network()]
         # Creates 2 ports in one request
-        names = [data_utils.rand_name('port-') for i in range(len(networks))]
+        names = [data_utils.rand_name(
+            name='port-', prefix=CONF.resource_name_prefix)
+            for i in range(len(networks))]
         port_list = []
         state = [True, False]
         for i in range(len(names)):
diff --git a/tempest/api/network/test_networks_negative.py b/tempest/api/network/test_networks_negative.py
index 0525484..6c91df0 100644
--- a/tempest/api/network/test_networks_negative.py
+++ b/tempest/api/network/test_networks_negative.py
@@ -15,10 +15,13 @@
 #    under the License.
 
 from tempest.api.network import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
 
+CONF = config.CONF
+
 
 class NetworksNegativeTestJSON(base.BaseNetworkTest):
     """Negative tests of network"""
@@ -89,7 +92,9 @@
         self.assertRaises(lib_exc.NotFound,
                           self.ports_client.create_port,
                           network_id=non_exist_net_id,
-                          name=data_utils.rand_name(self.__class__.__name__))
+                          name=data_utils.rand_name(
+                              self.__class__.__name__,
+                              prefix=CONF.resource_name_prefix))
 
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('cf8eef21-4351-4f53-adcd-cc5cb1e76b92')
diff --git a/tempest/api/network/test_ports.py b/tempest/api/network/test_ports.py
index 190f7e0..02faa59 100644
--- a/tempest/api/network/test_ports.py
+++ b/tempest/api/network/test_ports.py
@@ -21,11 +21,14 @@
 from tempest.api.network import base_security_groups as sec_base
 from tempest.common import custom_matchers
 from tempest.common import utils
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib.common.utils import test_utils
 from tempest.lib import decorators
 from tempest.lib import exceptions
 
+CONF = config.CONF
+
 
 class PortsTestJSON(sec_base.BaseSecGroupTest):
     """Test the following operations for ports:
@@ -59,7 +62,7 @@
 
     def _create_network(self, network_name=None, **kwargs):
         network_name = network_name or data_utils.rand_name(
-            self.__class__.__name__)
+            self.__class__.__name__, prefix=CONF.resource_name_prefix)
         network = self.networks_client.create_network(
             name=network_name, **kwargs)['network']
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
@@ -74,7 +77,8 @@
         # Verify port creation
         body = self.ports_client.create_port(
             network_id=self.network['id'],
-            name=data_utils.rand_name(self.__class__.__name__))
+            name=data_utils.rand_name(
+                self.__class__.__name__, prefix=CONF.resource_name_prefix))
         port = body['port']
         # Schedule port deletion with verification upon test completion
         self.addCleanup(self.ports_client.wait_for_resource_deletion,
@@ -131,7 +135,8 @@
                             **allocation_pools)
         body = self.ports_client.create_port(
             network_id=net_id,
-            name=data_utils.rand_name(self.__class__.__name__))
+            name=data_utils.rand_name(
+                self.__class__.__name__, prefix=CONF.resource_name_prefix))
         self.addCleanup(self.ports_client.wait_for_resource_deletion,
                         body['port']['id'])
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
@@ -190,14 +195,16 @@
         # Create two ports
         port_1 = self.ports_client.create_port(
             network_id=network['id'],
-            name=data_utils.rand_name(self.__class__.__name__))
+            name=data_utils.rand_name(
+                self.__class__.__name__, prefix=CONF.resource_name_prefix))
         self.addCleanup(self.ports_client.wait_for_resource_deletion,
                         port_1['port']['id'])
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
                         self.ports_client.delete_port, port_1['port']['id'])
         port_2 = self.ports_client.create_port(
             network_id=network['id'],
-            name=data_utils.rand_name(self.__class__.__name__))
+            name=data_utils.rand_name(
+                self.__class__.__name__, prefix=CONF.resource_name_prefix))
         self.addCleanup(self.ports_client.wait_for_resource_deletion,
                         port_2['port']['id'])
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
@@ -251,7 +258,8 @@
         fixed_ips = [{'subnet_id': subnet['id'], 'ip_address': ip_address_1}]
         port_1 = self.ports_client.create_port(
             network_id=network['id'],
-            name=data_utils.rand_name(self.__class__.__name__),
+            name=data_utils.rand_name(
+                self.__class__.__name__, prefix=CONF.resource_name_prefix),
             fixed_ips=fixed_ips)
         self.addCleanup(self.ports_client.wait_for_resource_deletion,
                         port_1['port']['id'])
@@ -260,7 +268,8 @@
         fixed_ips = [{'subnet_id': subnet['id'], 'ip_address': ip_address_2}]
         port_2 = self.ports_client.create_port(
             network_id=network['id'],
-            name=data_utils.rand_name(self.__class__.__name__),
+            name=data_utils.rand_name(
+                self.__class__.__name__, prefix=CONF.resource_name_prefix),
             fixed_ips=fixed_ips)
         self.addCleanup(self.ports_client.wait_for_resource_deletion,
                         port_2['port']['id'])
@@ -319,7 +328,8 @@
                         self.routers_client.delete_router, router['id'])
         port = self.ports_client.create_port(
             network_id=network['id'],
-            name=data_utils.rand_name(self.__class__.__name__))
+            name=data_utils.rand_name(
+                self.__class__.__name__, prefix=CONF.resource_name_prefix))
         # Add router interface to port created above
         self.routers_client.add_router_interface(router['id'],
                                                  port_id=port['port']['id'])
@@ -393,14 +403,16 @@
             security_groups_list.append(group_create_body['security_group']
                                         ['id'])
         # Create a port
-        sec_grp_name = data_utils.rand_name('secgroup')
+        sec_grp_name = data_utils.rand_name(
+            name='secgroup', prefix=CONF.resource_name_prefix)
         security_group = sec_grps_client.create_security_group(
             name=sec_grp_name)
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
                         self.security_groups_client.delete_security_group,
                         security_group['security_group']['id'])
         post_body = {
-            "name": data_utils.rand_name(self.__class__.__name__),
+            "name": data_utils.rand_name(
+                self.__class__.__name__, prefix=CONF.resource_name_prefix),
             "security_groups": [security_group['security_group']['id']],
             "network_id": self.network['id'],
             "admin_state_up": True,
@@ -416,7 +428,8 @@
         subnet_2 = self.create_subnet(self.network)
         fixed_ip_2 = [{'subnet_id': subnet_2['id']}]
         update_body = {
-            "name": data_utils.rand_name(self.__class__.__name__),
+            "name": data_utils.rand_name(
+                self.__class__.__name__, prefix=CONF.resource_name_prefix),
             "admin_state_up": False,
             "fixed_ips": fixed_ip_2,
             "security_groups": security_groups_list}
@@ -446,7 +459,8 @@
         the port's fixed ips.
         """
         self._update_port_with_security_groups(
-            [data_utils.rand_name('secgroup')])
+            [data_utils.rand_name('secgroup',
+                                  prefix=CONF.resource_name_prefix)])
 
     @decorators.idempotent_id('edf6766d-3d40-4621-bc6e-2521a44c257d')
     @testtools.skipUnless(
@@ -460,8 +474,10 @@
         the port's fixed ips.
         """
         self._update_port_with_security_groups(
-            [data_utils.rand_name('secgroup'),
-             data_utils.rand_name('secgroup')])
+            [data_utils.rand_name('secgroup',
+                                  prefix=CONF.resource_name_prefix),
+             data_utils.rand_name('secgroup',
+                                  prefix=CONF.resource_name_prefix)])
 
     @decorators.idempotent_id('13e95171-6cbd-489c-9d7c-3f9c58215c18')
     def test_create_show_delete_port_user_defined_mac(self):
@@ -469,7 +485,8 @@
         # Create a port for a legal mac
         body = self.ports_client.create_port(
             network_id=self.network['id'],
-            name=data_utils.rand_name(self.__class__.__name__))
+            name=data_utils.rand_name(
+                self.__class__.__name__, prefix=CONF.resource_name_prefix))
         old_port = body['port']
         free_mac_address = old_port['mac_address']
         self.ports_client.delete_port(old_port['id'])
@@ -477,7 +494,8 @@
         body = self.ports_client.create_port(
             network_id=self.network['id'],
             mac_address=free_mac_address,
-            name=data_utils.rand_name(self.__class__.__name__))
+            name=data_utils.rand_name(
+                self.__class__.__name__, prefix=CONF.resource_name_prefix))
         self.addCleanup(self.ports_client.wait_for_resource_deletion,
                         body['port']['id'])
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
diff --git a/tempest/api/network/test_routers.py b/tempest/api/network/test_routers.py
index c03a8a2..0dd7c70 100644
--- a/tempest/api/network/test_routers.py
+++ b/tempest/api/network/test_routers.py
@@ -56,7 +56,9 @@
     def test_create_show_list_update_delete_router(self):
         """Test create/show/list/update/delete of a router"""
         # Create a router
-        router_name = data_utils.rand_name(self.__class__.__name__ + '-router')
+        router_name = data_utils.rand_name(
+            self.__class__.__name__ + '-router',
+            prefix=CONF.resource_name_prefix)
         router = self.create_router(
             router_name,
             admin_state_up=False,
@@ -90,7 +92,8 @@
     @decorators.idempotent_id('b42e6e39-2e37-49cc-a6f4-8467e940900a')
     def test_add_remove_router_interface_with_subnet_id(self):
         """Test adding and removing router interface with subnet id"""
-        network_name = data_utils.rand_name(self.__class__.__name__)
+        network_name = data_utils.rand_name(
+            self.__class__.__name__, prefix=CONF.resource_name_prefix)
         network = self.networks_client.create_network(
             name=network_name)['network']
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
@@ -117,7 +120,8 @@
     @decorators.idempotent_id('2b7d2f37-6748-4d78-92e5-1d590234f0d5')
     def test_add_remove_router_interface_with_port_id(self):
         """Test adding and removing router interface with port id"""
-        network_name = data_utils.rand_name(self.__class__.__name__)
+        network_name = data_utils.rand_name(
+            self.__class__.__name__, prefix=CONF.resource_name_prefix)
         network = self.networks_client.create_network(
             name=network_name)['network']
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
@@ -128,7 +132,8 @@
         self.addCleanup(self.delete_router, router)
         port_body = self.ports_client.create_port(
             network_id=network['id'],
-            name=data_utils.rand_name(self.__class__.__name__))
+            name=data_utils.rand_name(
+                self.__class__.__name__, prefix=CONF.resource_name_prefix))
         # add router interface to port created above
         interface = self.routers_client.add_router_interface(
             router['id'],
@@ -165,7 +170,8 @@
         # Update router extra route, second ip of the range is
         # used as next hop
         for i in range(routes_num):
-            network_name = data_utils.rand_name(self.__class__.__name__)
+            network_name = data_utils.rand_name(
+                self.__class__.__name__, prefix=CONF.resource_name_prefix)
             network = self.networks_client.create_network(
                 name=network_name)['network']
             self.addCleanup(test_utils.call_and_ignore_notfound_exc,
@@ -235,12 +241,14 @@
     @decorators.idempotent_id('802c73c9-c937-4cef-824b-2191e24a6aab')
     def test_add_multiple_router_interfaces(self):
         """Test adding multiple router interfaces"""
-        network_name = data_utils.rand_name(self.__class__.__name__)
+        network_name = data_utils.rand_name(
+            self.__class__.__name__, prefix=CONF.resource_name_prefix)
         network01 = self.networks_client.create_network(
             name=network_name)['network']
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
                         self.networks_client.delete_network, network01['id'])
-        network_name = data_utils.rand_name(self.__class__.__name__)
+        network_name = data_utils.rand_name(
+            self.__class__.__name__, prefix=CONF.resource_name_prefix)
         network02 = self.networks_client.create_network(
             name=network_name)['network']
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
@@ -266,7 +274,8 @@
     @decorators.idempotent_id('96522edf-b4b5-45d9-8443-fa11c26e6eff')
     def test_router_interface_port_update_with_fixed_ip(self):
         """Test updating router interface port's fixed ip"""
-        network_name = data_utils.rand_name(self.__class__.__name__)
+        network_name = data_utils.rand_name(
+            self.__class__.__name__, prefix=CONF.resource_name_prefix)
         network = self.networks_client.create_network(
             name=network_name)['network']
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
diff --git a/tempest/api/network/test_routers_negative.py b/tempest/api/network/test_routers_negative.py
index 10a2706..50ba977 100644
--- a/tempest/api/network/test_routers_negative.py
+++ b/tempest/api/network/test_routers_negative.py
@@ -15,10 +15,13 @@
 
 from tempest.api.network import base
 from tempest.common import utils
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
 
+CONF = config.CONF
+
 
 class RoutersNegativeTest(base.BaseNetworkTest):
     """Negative tests of routers"""
@@ -65,9 +68,11 @@
     def test_add_router_interfaces_on_overlapping_subnets_returns_400(self):
         """Test adding router interface which is on overlapping subnets"""
         network01 = self.create_network(
-            network_name=data_utils.rand_name('router-network01-'))
+            network_name=data_utils.rand_name(
+                name='router-network01-', prefix=CONF.resource_name_prefix))
         network02 = self.create_network(
-            network_name=data_utils.rand_name('router-network02-'))
+            network_name=data_utils.rand_name(
+                name='router-network02-', prefix=CONF.resource_name_prefix))
         subnet01 = self.create_subnet(network01)
         subnet02 = self.create_subnet(network02)
         interface = self.routers_client.add_router_interface(
@@ -96,7 +101,8 @@
     @decorators.idempotent_id('c2a70d72-8826-43a7-8208-0209e6360c47')
     def test_show_non_existent_router_returns_404(self):
         """Test showing non existent router"""
-        router = data_utils.rand_name('non_exist_router')
+        router = data_utils.rand_name(
+            name='non_exist_router', prefix=CONF.resource_name_prefix)
         self.assertRaises(lib_exc.NotFound, self.routers_client.show_router,
                           router)
 
@@ -104,7 +110,8 @@
     @decorators.idempotent_id('b23d1569-8b0c-4169-8d4b-6abd34fad5c7')
     def test_update_non_existent_router_returns_404(self):
         """Test updating non existent router"""
-        router = data_utils.rand_name('non_exist_router')
+        router = data_utils.rand_name(
+            name='non_exist_router', prefix=CONF.resource_name_prefix)
         self.assertRaises(lib_exc.NotFound, self.routers_client.update_router,
                           router, name="new_name")
 
@@ -112,7 +119,8 @@
     @decorators.idempotent_id('c7edc5ad-d09d-41e6-a344-5c0c31e2e3e4')
     def test_delete_non_existent_router_returns_404(self):
         """Test deleting non existent router"""
-        router = data_utils.rand_name('non_exist_router')
+        router = data_utils.rand_name(
+            name='non_exist_router', prefix=CONF.resource_name_prefix)
         self.assertRaises(lib_exc.NotFound, self.routers_client.delete_router,
                           router)
 
diff --git a/tempest/api/network/test_security_groups.py b/tempest/api/network/test_security_groups.py
index 532ef65..c7f6b8f 100644
--- a/tempest/api/network/test_security_groups.py
+++ b/tempest/api/network/test_security_groups.py
@@ -15,10 +15,13 @@
 
 from tempest.api.network import base_security_groups as base
 from tempest.common import utils
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib.common.utils import test_utils
 from tempest.lib import decorators
 
+CONF = config.CONF
+
 
 class SecGroupTest(base.BaseSecGroupTest):
     """Test security groups"""
@@ -91,7 +94,8 @@
             secgroup_list.append(secgroup['id'])
         self.assertIn(group_create_body['security_group']['id'], secgroup_list)
         # Update the security group
-        new_name = data_utils.rand_name('security-')
+        new_name = data_utils.rand_name(
+            'security-', prefix=CONF.resource_name_prefix)
         new_description = data_utils.rand_name('security-description')
         update_body = self.security_groups_client.update_security_group(
             group_create_body['security_group']['id'],
diff --git a/tempest/api/network/test_subnetpools_extensions.py b/tempest/api/network/test_subnetpools_extensions.py
index 48603ed..689844b 100644
--- a/tempest/api/network/test_subnetpools_extensions.py
+++ b/tempest/api/network/test_subnetpools_extensions.py
@@ -50,7 +50,8 @@
     @decorators.idempotent_id('62595970-ab1c-4b7f-8fcc-fddfe55e9811')
     def test_create_list_show_update_delete_subnetpools(self):
         """Test create/list/show/update/delete of subnet pools"""
-        subnetpool_name = data_utils.rand_name('subnetpools')
+        subnetpool_name = data_utils.rand_name(
+            name='subnetpools', prefix=CONF.resource_name_prefix)
         # create subnet pool
         prefix = CONF.network.default_network
         body = self.subnetpools_client.create_subnetpool(name=subnetpool_name,
@@ -64,7 +65,8 @@
         body = self.subnetpools_client.show_subnetpool(subnetpool_id)
         self.assertEqual(subnetpool_name, body["subnetpool"]["name"])
         # update the subnet pool
-        subnetpool_name = data_utils.rand_name('subnetpools_update')
+        subnetpool_name = data_utils.rand_name(
+            name='subnetpools_update', prefix=CONF.resource_name_prefix)
         body = self.subnetpools_client.update_subnetpool(subnetpool_id,
                                                          name=subnetpool_name)
         self.assertEqual(subnetpool_name, body["subnetpool"]["name"])
diff --git a/tempest/api/network/test_tags.py b/tempest/api/network/test_tags.py
index 5219c34..bd3e360 100644
--- a/tempest/api/network/test_tags.py
+++ b/tempest/api/network/test_tags.py
@@ -52,7 +52,8 @@
     @decorators.idempotent_id('ee76bfaf-ac94-4d74-9ecc-4bbd4c583cb1')
     def test_create_list_show_update_delete_tags(self):
         """Validate that creating a tag on a network resource works"""
-        tag_name = data_utils.rand_name(self.__class__.__name__ + '-Tag')
+        tag_name = data_utils.rand_name(
+            self.__class__.__name__ + '-Tag', prefix=CONF.resource_name_prefix)
         self.tags_client.create_tag('networks', self.network['id'], tag_name)
         self.addCleanup(self.tags_client.delete_all_tags, 'networks',
                         self.network['id'])
@@ -66,7 +67,8 @@
 
         # Generate 3 new tag names.
         replace_tags = [data_utils.rand_name(
-            self.__class__.__name__ + '-Tag') for _ in range(3)]
+            self.__class__.__name__ + '-Tag',
+            prefix=CONF.resource_name_prefix) for _ in range(3)]
 
         # Replace the current tag with the 3 new tags and validate that the
         # network resource has the 3 new tags.
@@ -132,7 +134,8 @@
         cls.port = cls.create_port(cls.network)
         cls.router = cls.create_router()
 
-        subnetpool_name = data_utils.rand_name(cls.__name__ + '-Subnetpool')
+        subnetpool_name = data_utils.rand_name(
+            cls.__name__ + '-Subnetpool', prefix=CONF.resource_name_prefix)
         prefix = CONF.network.default_network
         cls.subnetpool = cls.subnetpools_client.create_subnetpool(
             name=subnetpool_name, prefixes=prefix)['subnetpool']
@@ -145,7 +148,9 @@
         tag_names = []
 
         for resource in self.SUPPORTED_RESOURCES:
-            tag_name = data_utils.rand_name(self.__class__.__name__ + '-Tag')
+            tag_name = data_utils.rand_name(
+                self.__class__.__name__ + '-Tag',
+                prefix=CONF.resource_name_prefix)
             tag_names.append(tag_name)
             resource_object = getattr(self, resource[:-1])
 
@@ -188,7 +193,8 @@
         for resource in self.SUPPORTED_RESOURCES:
             # Generate 3 new tag names.
             replace_tags = [data_utils.rand_name(
-                self.__class__.__name__ + '-Tag') for _ in range(3)]
+                self.__class__.__name__ + '-Tag',
+                prefix=CONF.resource_name_prefix) for _ in range(3)]
 
             # Replace the current tag with the 3 new tags and validate that the
             # current resource has the 3 new tags.
diff --git a/tempest/api/object_storage/base.py b/tempest/api/object_storage/base.py
index 58ad9d4..58e71a5 100644
--- a/tempest/api/object_storage/base.py
+++ b/tempest/api/object_storage/base.py
@@ -18,6 +18,7 @@
 from oslo_log import log
 
 from tempest.common import custom_matchers
+from tempest.common import object_storage
 from tempest.common import waiters
 from tempest import config
 from tempest.lib.common.utils import data_utils
@@ -28,51 +29,6 @@
 LOG = log.getLogger(__name__)
 
 
-def delete_containers(containers, container_client, object_client):
-    """Remove containers and all objects in them.
-
-    The containers should be visible from the container_client given.
-    Will not throw any error if the containers don't exist.
-
-    :param containers: List of containers(or string of a container)
-                       to be deleted
-    :param container_client: Client to be used to delete containers
-    :param object_client: Client to be used to delete objects
-    """
-    if isinstance(containers, str):
-        containers = [containers]
-
-    for cont in containers:
-        try:
-            delete_objects(cont, container_client, object_client)
-            container_client.delete_container(cont)
-            container_client.wait_for_resource_deletion(cont)
-        except lib_exc.NotFound:
-            LOG.warning(f"Container {cont} wasn't deleted as it wasn't found.")
-
-
-def delete_objects(container, container_client, object_client):
-    """Remove all objects from container.
-
-    Will not throw any error if the objects do not exist
-
-    :param container: Name of the container that contains the objects to be
-                      deleted
-    :param container_client: Client to be used to list objects in
-                             the container
-    :param object_client: Client to be used to delete objects
-    """
-    params = {'limit': 9999, 'format': 'json'}
-    _, objlist = container_client.list_container_objects(container, params)
-
-    for obj in objlist:
-        try:
-            object_client.delete_object(container, obj['name'])
-            object_client.wait_for_resource_deletion(obj['name'], container)
-        except lib_exc.NotFound:
-            LOG.warning(f"Object {obj} wasn't deleted as it wasn't found.")
-
-
 class BaseObjectTest(tempest.test.BaseTestCase):
 
     credentials = [['operator', CONF.object_storage.operator_role]]
@@ -122,7 +78,8 @@
     @classmethod
     def create_container(cls):
         # wrapper that returns a test container
-        container_name = data_utils.rand_name(name='TestContainer')
+        container_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestContainer')
         cls.container_client.update_container(container_name)
         cls.containers.append(container_name)
 
@@ -133,7 +90,8 @@
                       data=None, metadata=None):
         # wrapper that returns a test object
         if object_name is None:
-            object_name = data_utils.rand_name(name='TestObject')
+            object_name = data_utils.rand_name(
+                prefix=CONF.resource_name_prefix, name='TestObject')
         if data is None:
             data = data_utils.random_bytes()
 
@@ -160,7 +118,8 @@
             container_client = cls.container_client
         if object_client is None:
             object_client = cls.object_client
-        delete_containers(cls.containers, container_client, object_client)
+        object_storage.delete_containers(cls.containers, container_client,
+                                         object_client)
 
     def assertHeaders(self, resp, target, method):
         """Check the existence and the format of response headers"""
diff --git a/tempest/api/object_storage/test_account_bulk.py b/tempest/api/object_storage/test_account_bulk.py
index 687fe57..0ecae85 100644
--- a/tempest/api/object_storage/test_account_bulk.py
+++ b/tempest/api/object_storage/test_account_bulk.py
@@ -16,6 +16,7 @@
 import tempfile
 
 from tempest.api.object_storage import base
+from tempest.common import object_storage
 from tempest.common import utils
 from tempest.lib import decorators
 
@@ -30,8 +31,9 @@
     def tearDown(self):
         # NOTE(andreaf) BulkTests needs to cleanup containers after each
         # test is executed.
-        base.delete_containers(self.containers, self.container_client,
-                               self.object_client)
+        object_storage.delete_containers(self.containers,
+                                         self.container_client,
+                                         self.object_client)
         super(BulkTest, self).tearDown()
 
     def _create_archive(self):
diff --git a/tempest/api/object_storage/test_account_quotas.py b/tempest/api/object_storage/test_account_quotas.py
index 6854bbe..0a40237 100644
--- a/tempest/api/object_storage/test_account_quotas.py
+++ b/tempest/api/object_storage/test_account_quotas.py
@@ -81,7 +81,8 @@
     @utils.requires_ext(extension='account_quotas', service='object')
     def test_upload_valid_object(self):
         """Test uploading valid object"""
-        object_name = data_utils.rand_name(name="TestObject")
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name="TestObject")
         data = data_utils.arbitrary_string()
         resp, _ = self.object_client.create_object(self.container_name,
                                                    object_name, data)
diff --git a/tempest/api/object_storage/test_account_services.py b/tempest/api/object_storage/test_account_services.py
index 4966ec4..75414c0 100644
--- a/tempest/api/object_storage/test_account_services.py
+++ b/tempest/api/object_storage/test_account_services.py
@@ -18,6 +18,7 @@
 
 from tempest.api.object_storage import base
 from tempest.common import custom_matchers
+from tempest.common import object_storage
 from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
@@ -41,9 +42,11 @@
     def resource_setup(cls):
         super(AccountTest, cls).resource_setup()
         for i in range(ord('a'), ord('f') + 1):
-            name = data_utils.rand_name(name='%s-' % bytes((i,)))
+            name = data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name='%s-' % bytes((i,)))
             cls.container_client.update_container(name)
-            cls.addClassResourceCleanup(base.delete_containers,
+            cls.addClassResourceCleanup(object_storage.delete_containers,
                                         [name],
                                         cls.container_client,
                                         cls.object_client)
diff --git a/tempest/api/object_storage/test_container_acl.py b/tempest/api/object_storage/test_container_acl.py
index 0259373..9dafbf0 100644
--- a/tempest/api/object_storage/test_container_acl.py
+++ b/tempest/api/object_storage/test_container_acl.py
@@ -50,7 +50,8 @@
                 create_update_metadata_prefix=''))
         self.assertHeaders(resp_meta, 'Container', 'POST')
         # create object
-        object_name = data_utils.rand_name(name='Object')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='Object')
         resp, _ = self.os_roles_operator.object_client.create_object(
             self.container_name, object_name, 'data')
         self.assertHeaders(resp, 'Object', 'PUT')
@@ -84,7 +85,8 @@
             auth_data=self.os_roles_operator_alt.object_client.auth_provider.
             auth_data)
         # Trying to write the object with rights
-        object_name = data_utils.rand_name(name='Object')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='Object')
         resp, _ = self.os_roles_operator.object_client.create_object(
             self.container_name,
             object_name, 'data', headers={})
diff --git a/tempest/api/object_storage/test_container_acl_negative.py b/tempest/api/object_storage/test_container_acl_negative.py
index 347c79e..49c2ed0 100644
--- a/tempest/api/object_storage/test_container_acl_negative.py
+++ b/tempest/api/object_storage/test_container_acl_negative.py
@@ -39,7 +39,8 @@
 
     def setUp(self):
         super(ObjectACLsNegativeTest, self).setUp()
-        self.container_name = data_utils.rand_name(name='TestContainer')
+        self.container_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestContainer')
         self.container_client.update_container(self.container_name)
         self.containers.append(self.container_name)
 
@@ -54,7 +55,8 @@
         """Test writing object without using credentials"""
         # trying to create object with empty headers
         # X-Auth-Token is not provided
-        object_name = data_utils.rand_name(name='Object')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='Object')
         self.object_client.auth_provider.set_alt_auth_data(
             request_part='headers',
             auth_data=None
@@ -68,7 +70,8 @@
     def test_delete_object_without_using_creds(self):
         """Test deleting object without using credentials"""
         # create object
-        object_name = data_utils.rand_name(name='Object')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='Object')
         self.object_client.create_object(self.container_name, object_name,
                                          'data')
         # trying to delete object with empty headers
@@ -86,7 +89,8 @@
     def test_write_object_with_non_authorized_user(self):
         """Test writing object with non-authorized user"""
         # User provided token is forbidden. ACL are not set
-        object_name = data_utils.rand_name(name='Object')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='Object')
         # trying to create object with non-authorized user
         self.object_client.auth_provider.set_alt_auth_data(
             request_part='headers',
@@ -101,7 +105,8 @@
     def test_read_object_with_non_authorized_user(self):
         """Test reading object with non-authorized user"""
         # User provided token is forbidden. ACL are not set
-        object_name = data_utils.rand_name(name='Object')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='Object')
         resp, _ = self.object_client.create_object(
             self.container_name, object_name, 'data')
         self.assertHeaders(resp, 'Object', 'PUT')
@@ -119,7 +124,8 @@
     def test_delete_object_with_non_authorized_user(self):
         """Test deleting object with non-authorized user"""
         # User provided token is forbidden. ACL are not set
-        object_name = data_utils.rand_name(name='Object')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='Object')
         resp, _ = self.object_client.create_object(
             self.container_name, object_name, 'data')
         self.assertHeaders(resp, 'Object', 'PUT')
@@ -144,7 +150,8 @@
                 create_update_metadata_prefix=''))
         self.assertHeaders(resp_meta, 'Container', 'POST')
         # create object
-        object_name = data_utils.rand_name(name='Object')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='Object')
         resp, _ = self.object_client.create_object(self.container_name,
                                                    object_name, 'data')
         self.assertHeaders(resp, 'Object', 'PUT')
@@ -173,7 +180,8 @@
             request_part='headers',
             auth_data=self.test_auth_data
         )
-        object_name = data_utils.rand_name(name='Object')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='Object')
         self.assertRaises(lib_exc.Forbidden,
                           self.object_client.create_object,
                           self.container_name,
@@ -199,7 +207,8 @@
             request_part='headers',
             auth_data=self.test_auth_data
         )
-        object_name = data_utils.rand_name(name='Object')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='Object')
         self.assertRaises(lib_exc.Forbidden,
                           self.object_client.create_object,
                           self.container_name,
@@ -221,7 +230,8 @@
                 create_update_metadata_prefix=''))
         self.assertHeaders(resp_meta, 'Container', 'POST')
         # create object
-        object_name = data_utils.rand_name(name='Object')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='Object')
         resp, _ = self.object_client.create_object(self.container_name,
                                                    object_name, 'data')
         self.assertHeaders(resp, 'Object', 'PUT')
diff --git a/tempest/api/object_storage/test_container_quotas.py b/tempest/api/object_storage/test_container_quotas.py
index fb67fb4..f055d19 100644
--- a/tempest/api/object_storage/test_container_quotas.py
+++ b/tempest/api/object_storage/test_container_quotas.py
@@ -16,10 +16,12 @@
 from tempest.api.object_storage import base
 from tempest.common import utils
 from tempest.common import waiters
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
 
+CONF = config.CONF
 QUOTA_BYTES = 10
 QUOTA_COUNT = 3
 
@@ -55,7 +57,8 @@
     @decorators.attr(type="smoke")
     def test_upload_valid_object(self):
         """Attempts to uploads an object smaller than the bytes quota."""
-        object_name = data_utils.rand_name(name="TestObject")
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name="TestObject")
         data = data_utils.arbitrary_string(QUOTA_BYTES)
 
         nbefore = self._get_bytes_used()
@@ -72,7 +75,8 @@
     @decorators.attr(type="smoke")
     def test_upload_large_object(self):
         """Attempts to upload an object larger than the bytes quota."""
-        object_name = data_utils.rand_name(name="TestObject")
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name="TestObject")
         data = data_utils.arbitrary_string(QUOTA_BYTES + 1)
 
         nbefore = self._get_bytes_used()
@@ -90,7 +94,8 @@
     def test_upload_too_many_objects(self):
         """Attempts to upload many objects that exceeds the count limit."""
         for _ in range(QUOTA_COUNT):
-            name = data_utils.rand_name(name="TestObject")
+            name = data_utils.rand_name(
+                prefix=CONF.resource_name_prefix, name="TestObject")
             self.object_client.create_object(self.container_name, name, "")
             waiters.wait_for_object_create(self.object_client,
                                            self.container_name,
diff --git a/tempest/api/object_storage/test_container_services.py b/tempest/api/object_storage/test_container_services.py
index 085b8ab..e2bbc26 100644
--- a/tempest/api/object_storage/test_container_services.py
+++ b/tempest/api/object_storage/test_container_services.py
@@ -14,9 +14,12 @@
 #    under the License.
 
 from tempest.api.object_storage import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 
+CONF = config.CONF
+
 
 class ContainerTest(base.BaseObjectTest):
     """Test containers"""
@@ -30,7 +33,8 @@
     @decorators.idempotent_id('92139d73-7819-4db1-85f8-3f2f22a8d91f')
     def test_create_container(self):
         """Test creating container"""
-        container_name = data_utils.rand_name(name='TestContainer')
+        container_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestContainer')
         resp, _ = self.container_client.update_container(container_name)
         self.containers.append(container_name)
         self.assertHeaders(resp, 'Container', 'PUT')
@@ -38,7 +42,8 @@
     @decorators.idempotent_id('49f866ed-d6af-4395-93e7-4187eb56d322')
     def test_create_container_overwrite(self):
         """Test overwriting container with the same name"""
-        container_name = data_utils.rand_name(name='TestContainer')
+        container_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestContainer')
         self.container_client.update_container(container_name)
         self.containers.append(container_name)
 
@@ -48,7 +53,8 @@
     @decorators.idempotent_id('c2ac4d59-d0f5-40d5-ba19-0635056d48cd')
     def test_create_container_with_metadata_key(self):
         """Test creating container with the blank value of metadata"""
-        container_name = data_utils.rand_name(name='TestContainer')
+        container_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestContainer')
         headers = {'X-Container-Meta-test-container-meta': ''}
         resp, _ = self.container_client.update_container(
             container_name,
@@ -65,7 +71,8 @@
     @decorators.idempotent_id('e1e8df32-7b22-44e1-aa08-ccfd8d446b58')
     def test_create_container_with_metadata_value(self):
         """Test creating container with metadata value"""
-        container_name = data_utils.rand_name(name='TestContainer')
+        container_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestContainer')
 
         # metadata name using underscores should be converted to hyphens
         headers = {'X-Container-Meta-test_container_meta': 'Meta1'}
@@ -84,7 +91,8 @@
     @decorators.idempotent_id('24d16451-1c0c-4e4f-b59c-9840a3aba40e')
     def test_create_container_with_remove_metadata_key(self):
         """Test creating container with the blank value of remove metadata"""
-        container_name = data_utils.rand_name(name='TestContainer')
+        container_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestContainer')
         headers = {'X-Container-Meta-test-container-meta': 'Meta1'}
         self.container_client.update_container(container_name, **headers)
         self.containers.append(container_name)
@@ -102,7 +110,8 @@
     @decorators.idempotent_id('8a21ebad-a5c7-4e29-b428-384edc8cd156')
     def test_create_container_with_remove_metadata_value(self):
         """Test creating container with remove metadata"""
-        container_name = data_utils.rand_name(name='TestContainer')
+        container_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestContainer')
         headers = {'X-Container-Meta-test-container-meta': 'Meta1'}
         self.container_client.update_container(container_name, **headers)
         self.containers.append(container_name)
@@ -151,7 +160,8 @@
     def test_list_container_contents_with_delimiter(self):
         """Test getting container contents list using delimiter param"""
         container_name = self.create_container()
-        object_name = data_utils.rand_name(name='TestObject/')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestObject/')
         self.create_object(container_name, object_name)
 
         params = {'delimiter': '/'}
@@ -247,7 +257,8 @@
     def test_list_container_contents_with_path(self):
         """Test getting container contents list using path param"""
         container_name = self.create_container()
-        object_name = data_utils.rand_name(name='TestObject')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestObject')
         object_name = 'Swift/' + object_name
         self.create_object(container_name, object_name)
 
@@ -305,7 +316,8 @@
 
         Send one request of adding and deleting metadata.
         """
-        container_name = data_utils.rand_name(name='TestContainer')
+        container_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestContainer')
         metadata_1 = {'X-Container-Meta-test-container-meta1': 'Meta1'}
         self.container_client.update_container(container_name, **metadata_1)
         self.containers.append(container_name)
@@ -346,7 +358,8 @@
     @decorators.idempotent_id('3a5ce7d4-6e4b-47d0-9d87-7cd42c325094')
     def test_update_container_metadata_with_delete_metadata(self):
         """Test updating container metadata using delete metadata"""
-        container_name = data_utils.rand_name(name='TestContainer')
+        container_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestContainer')
         metadata = {'X-Container-Meta-test-container-meta1': 'Meta1'}
         self.container_client.update_container(container_name, **metadata)
         self.containers.append(container_name)
@@ -380,7 +393,8 @@
     @decorators.idempotent_id('a2e36378-6f1f-43f4-840a-ffd9cfd61914')
     def test_update_container_metadata_with_delete_metadata_key(self):
         """Test updating container metadata with a blank value of metadata"""
-        container_name = data_utils.rand_name(name='TestContainer')
+        container_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestContainer')
         headers = {'X-Container-Meta-test-container-meta1': 'Meta1'}
         self.container_client.update_container(container_name, **headers)
         self.containers.append(container_name)
diff --git a/tempest/api/object_storage/test_container_services_negative.py b/tempest/api/object_storage/test_container_services_negative.py
index 51c711f..63d97a3 100644
--- a/tempest/api/object_storage/test_container_services_negative.py
+++ b/tempest/api/object_storage/test_container_services_negative.py
@@ -66,7 +66,8 @@
     def test_create_container_metadata_name_exceeds_max_length(self):
         """Test creating container with metadata name longer than max"""
         max_length = self.constraints['max_meta_name_length']
-        container_name = data_utils.rand_name(name='TestContainer')
+        container_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestContainer')
         metadata_name = 'X-Container-Meta-' + data_utils.arbitrary_string(
             size=max_length + 1)
         metadata = {metadata_name: 'penguin'}
@@ -84,7 +85,8 @@
     def test_create_container_metadata_value_exceeds_max_length(self):
         """Test creating container with metadata value longer than max"""
         max_length = self.constraints['max_meta_value_length']
-        container_name = data_utils.rand_name(name='TestContainer')
+        container_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestContainer')
         metadata_value = data_utils.arbitrary_string(size=max_length + 1)
         metadata = {'X-Container-Meta-animal': metadata_value}
         ex = self.assertRaises(
@@ -101,7 +103,8 @@
     def test_create_container_metadata_exceeds_overall_metadata_count(self):
         """Test creating container with metadata exceeding default count"""
         max_count = self.constraints['max_meta_count']
-        container_name = data_utils.rand_name(name='TestContainer')
+        container_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestContainer')
         metadata = {}
         for i in range(max_count + 1):
             metadata['X-Container-Meta-animal-' + str(i)] = 'penguin'
diff --git a/tempest/api/object_storage/test_container_sync.py b/tempest/api/object_storage/test_container_sync.py
index b31ff76..e2c9d54 100644
--- a/tempest/api/object_storage/test_container_sync.py
+++ b/tempest/api/object_storage/test_container_sync.py
@@ -19,6 +19,7 @@
 import testtools
 
 from tempest.api.object_storage import base
+from tempest.common import object_storage
 from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
@@ -68,13 +69,17 @@
             int(container_sync_timeout / cls.container_sync_interval)
 
         # define container and object clients
-        cls.clients[data_utils.rand_name(name='TestContainerSync')] = \
+        cls.clients[data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name='TestContainerSync')] = \
             (cls.container_client, cls.object_client)
-        cls.clients[data_utils.rand_name(name='TestContainerSync')] = \
+        cls.clients[data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name='TestContainerSync')] = \
             (cls.container_client_alt, cls.object_client_alt)
         for cont_name, client in cls.clients.items():
             client[0].create_container(cont_name)
-            cls.addClassResourceCleanup(base.delete_containers,
+            cls.addClassResourceCleanup(object_storage.delete_containers,
                                         cont_name,
                                         client[0],
                                         client[1])
@@ -91,7 +96,9 @@
             headers = make_headers(cont[1], cont_client[1])
             cont_client[0].put(str(cont[0]), body=None, headers=headers)
             # create object in container
-            object_name = data_utils.rand_name(name='TestSyncObject')
+            object_name = data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name='TestSyncObject')
             data = object_name[::-1].encode()  # Raw data, we need bytes
             obj_client[0].create_object(cont[0], object_name, data)
             self.objects.append(object_name)
diff --git a/tempest/api/object_storage/test_object_formpost.py b/tempest/api/object_storage/test_object_formpost.py
index 39e895e..3231c0a 100644
--- a/tempest/api/object_storage/test_object_formpost.py
+++ b/tempest/api/object_storage/test_object_formpost.py
@@ -19,9 +19,12 @@
 
 from tempest.api.object_storage import base
 from tempest.common import utils
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 
+CONF = config.CONF
+
 
 class ObjectFormPostTest(base.BaseObjectTest):
     """Test object post with form"""
@@ -33,7 +36,8 @@
     def resource_setup(cls):
         super(ObjectFormPostTest, cls).resource_setup()
         cls.container_name = cls.create_container()
-        cls.object_name = data_utils.rand_name(name='ObjectTemp')
+        cls.object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='ObjectTemp')
 
         cls.key = 'Meta'
         cls.metadata = {'Temp-URL-Key': cls.key}
diff --git a/tempest/api/object_storage/test_object_formpost_negative.py b/tempest/api/object_storage/test_object_formpost_negative.py
index 971a223..c15ce1b 100644
--- a/tempest/api/object_storage/test_object_formpost_negative.py
+++ b/tempest/api/object_storage/test_object_formpost_negative.py
@@ -19,10 +19,13 @@
 
 from tempest.api.object_storage import base
 from tempest.common import utils
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
 
+CONF = config.CONF
+
 
 class ObjectFormPostNegativeTest(base.BaseObjectTest):
     """Negative tests of object post with form"""
@@ -34,7 +37,8 @@
     def resource_setup(cls):
         super(ObjectFormPostNegativeTest, cls).resource_setup()
         cls.container_name = cls.create_container()
-        cls.object_name = data_utils.rand_name(name='ObjectTemp')
+        cls.object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='ObjectTemp')
 
         cls.key = 'Meta'
         cls.metadata = {'Temp-URL-Key': cls.key}
diff --git a/tempest/api/object_storage/test_object_services.py b/tempest/api/object_storage/test_object_services.py
index 61b9136..8110915 100644
--- a/tempest/api/object_storage/test_object_services.py
+++ b/tempest/api/object_storage/test_object_services.py
@@ -43,7 +43,8 @@
 
     def _upload_segments(self):
         # create object
-        object_name = data_utils.rand_name(name='LObject')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='LObject')
         data = data_utils.arbitrary_string()
         segments = 10
         data_segments = [data + str(i) for i in range(segments)]
@@ -56,7 +57,8 @@
         return object_name, data_segments
 
     def _copy_object_2d(self, src_object_name, metadata=None):
-        dst_object_name = data_utils.rand_name(name='TestObject')
+        dst_object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestObject')
         resp, _ = self.object_client.copy_object_2d_way(self.container_name,
                                                         src_object_name,
                                                         dst_object_name,
@@ -81,12 +83,14 @@
     def test_create_object(self):
         """Test creating object and checking the object's uploaded content"""
         # create object
-        object_name = data_utils.rand_name(name='TestObject')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestObject')
         data = data_utils.random_bytes()
         resp, _ = self.object_client.create_object(self.container_name,
                                                    object_name, data)
         # create another object
-        object_name = data_utils.rand_name(name='TestObject')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestObject')
         data = data_utils.random_bytes()
         resp, _ = self.object_client.create_object(self.container_name,
                                                    object_name, data)
@@ -100,7 +104,8 @@
     @decorators.idempotent_id('5daebb1d-f0d5-4dc9-b541-69672eff00b0')
     def test_create_object_with_content_disposition(self):
         """Test creating object with content-disposition"""
-        object_name = data_utils.rand_name(name='TestObject')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestObject')
         data = data_utils.random_bytes()
         metadata = {}
         metadata['content-disposition'] = 'inline'
@@ -122,7 +127,8 @@
     @decorators.idempotent_id('605f8317-f945-4bee-ae91-013f1da8f0a0')
     def test_create_object_with_content_encoding(self):
         """Test creating object with content-encoding"""
-        object_name = data_utils.rand_name(name='TestObject')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestObject')
 
         # put compressed string
         data_before = b'x' * 2000
@@ -149,7 +155,8 @@
     @decorators.idempotent_id('73820093-0503-40b1-a478-edf0e69c7d1f')
     def test_create_object_with_etag(self):
         """Test creating object with Etag"""
-        object_name = data_utils.rand_name(name='TestObject')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestObject')
         data = data_utils.random_bytes()
         create_md5 = md5(data, usedforsecurity=False).hexdigest()
         metadata = {'Etag': create_md5}
@@ -168,7 +175,8 @@
     @decorators.idempotent_id('84dafe57-9666-4f6d-84c8-0814d37923b8')
     def test_create_object_with_expect_continue(self):
         """Test creating object with expect_continue"""
-        object_name = data_utils.rand_name(name='TestObject')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestObject')
         data = data_utils.random_bytes()
 
         status, _ = self.object_client.create_object_continue(
@@ -184,7 +192,8 @@
     @decorators.idempotent_id('4f84422a-e2f2-4403-b601-726a4220b54e')
     def test_create_object_with_transfer_encoding(self):
         """Test creating object with transfer_encoding"""
-        object_name = data_utils.rand_name(name='TestObject')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestObject')
         data = data_utils.random_bytes(1024)
         resp, _ = self.object_client.create_object(
             self.container_name,
@@ -205,14 +214,16 @@
 
         The previous added metadata will be cleared.
         """
-        object_name_base = data_utils.rand_name(name='TestObject')
+        object_name_base = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestObject')
         data = data_utils.random_bytes()
         metadata_1 = {'X-Object-Meta-test-meta': 'Meta'}
         self.object_client.create_object(self.container_name,
                                          object_name_base,
                                          data,
                                          metadata=metadata_1)
-        object_name = data_utils.rand_name(name='TestObject')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestObject')
         metadata_2 = {'X-Copy-From': '%s/%s' % (self.container_name,
                                                 object_name_base),
                       'X-Fresh-Metadata': 'true'}
@@ -231,7 +242,8 @@
     @decorators.idempotent_id('1c7ed3e4-2099-406b-b843-5301d4811baf')
     def test_create_object_with_x_object_meta(self):
         """Test creating object with x-object-meta"""
-        object_name = data_utils.rand_name(name='TestObject')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestObject')
         data = data_utils.random_bytes()
         metadata = {'X-Object-Meta-test-meta': 'Meta'}
         resp, _ = self.object_client.create_object(
@@ -250,7 +262,8 @@
     @decorators.idempotent_id('e4183917-33db-4153-85cc-4dacbb938865')
     def test_create_object_with_x_object_metakey(self):
         """Test creating object with the blank value of metadata"""
-        object_name = data_utils.rand_name(name='TestObject')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestObject')
         data = data_utils.random_bytes()
         metadata = {'X-Object-Meta-test-meta': ''}
         resp, _ = self.object_client.create_object(
@@ -272,7 +285,8 @@
 
         The metadata will be removed from the object.
         """
-        object_name = data_utils.rand_name(name='TestObject')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestObject')
         data = data_utils.random_bytes()
         metadata_add = {'X-Object-Meta-test-meta': 'Meta'}
         self.object_client.create_object(self.container_name,
@@ -299,7 +313,8 @@
         Creating object with blank metadata 'X-Remove-Object-Meta-test-meta',
         metadata 'x-object-meta-test-meta' will be removed from the object.
         """
-        object_name = data_utils.rand_name(name='TestObject')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestObject')
         data = data_utils.random_bytes()
         metadata_add = {'X-Object-Meta-test-meta': 'Meta'}
         self.object_client.create_object(self.container_name,
@@ -322,7 +337,8 @@
     @decorators.idempotent_id('17738d45-03bd-4d45-9e0b-7b2f58f98687')
     def test_delete_object(self):
         """Test deleting object"""
-        object_name = data_utils.rand_name(name='TestObject')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestObject')
         data = data_utils.random_bytes()
         resp, _ = self.object_client.create_object(self.container_name,
                                                    object_name, data)
@@ -353,7 +369,8 @@
     @decorators.idempotent_id('48650ed0-c189-4e1e-ad6b-1d4770c6e134')
     def test_update_object_metadata_with_remove_metadata(self):
         """Test updating object metadata with remove metadata"""
-        object_name = data_utils.rand_name(name='TestObject')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestObject')
         data = data_utils.random_bytes()
         create_metadata = {'X-Object-Meta-test-meta1': 'Meta1'}
         self.object_client.create_object(self.container_name,
@@ -381,7 +398,8 @@
         request, both operations will succeed.
         """
         # creation and deletion of metadata with one request
-        object_name = data_utils.rand_name(name='TestObject')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestObject')
         data = data_utils.random_bytes()
         create_metadata = {'X-Object-Meta-test-meta1': 'Meta1'}
         self.object_client.create_object(self.container_name,
@@ -450,7 +468,8 @@
     @decorators.idempotent_id('9a88dca4-b684-425b-806f-306cd0e57e42')
     def test_update_object_metadata_with_x_remove_object_metakey(self):
         """Test updating object metadata with blank remove metadata value"""
-        object_name = data_utils.rand_name(name='TestObject')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestObject')
         data = data_utils.arbitrary_string()
         create_metadata = {'X-Object-Meta-test-meta': 'Meta'}
         self.object_client.create_object(self.container_name,
@@ -474,7 +493,8 @@
     @decorators.idempotent_id('9a447cf6-de06-48de-8226-a8c6ed31caf2')
     def test_list_object_metadata(self):
         """Test listing object metadata"""
-        object_name = data_utils.rand_name(name='TestObject')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestObject')
         data = data_utils.random_bytes()
         metadata = {'X-Object-Meta-test-meta': 'Meta'}
         self.object_client.create_object(self.container_name,
@@ -556,7 +576,8 @@
     @decorators.idempotent_id('005f9bf6-e06d-41ec-968e-96c78e0b1d82')
     def test_get_object_with_metadata(self):
         """Test getting object with metadata"""
-        object_name = data_utils.rand_name(name='TestObject')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestObject')
         data = data_utils.random_bytes()
         metadata = {'X-Object-Meta-test-meta': 'Meta'}
         self.object_client.create_object(self.container_name,
@@ -575,7 +596,8 @@
     @decorators.idempotent_id('05a1890e-7db9-4a6c-90a8-ce998a2bddfa')
     def test_get_object_with_range(self):
         """Test getting object with range"""
-        object_name = data_utils.rand_name(name='TestObject')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestObject')
         data = data_utils.random_bytes(100)
         self.object_client.create_object(self.container_name,
                                          object_name,
@@ -636,7 +658,8 @@
     @decorators.idempotent_id('c05b4013-e4de-47af-be84-e598062b16fc')
     def test_get_object_with_if_match(self):
         """Test getting object with if_match"""
-        object_name = data_utils.rand_name(name='TestObject')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestObject')
         data = data_utils.random_bytes(10)
         create_md5 = md5(data, usedforsecurity=False).hexdigest()
         create_metadata = {'Etag': create_md5}
@@ -656,7 +679,8 @@
     @decorators.idempotent_id('be133639-e5d2-4313-9b1f-2d59fc054a16')
     def test_get_object_with_if_modified_since(self):
         """Test getting object with if_modified_since"""
-        object_name = data_utils.rand_name(name='TestObject')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestObject')
         data = data_utils.random_bytes()
         time_now = time.time()
         self.object_client.create_object(self.container_name,
@@ -676,7 +700,8 @@
     @decorators.idempotent_id('641500d5-1612-4042-a04d-01fc4528bc30')
     def test_get_object_with_if_none_match(self):
         """Test getting object with if_none_match"""
-        object_name = data_utils.rand_name(name='TestObject')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestObject')
         data = data_utils.random_bytes()
         create_md5 = md5(data, usedforsecurity=False).hexdigest()
         create_metadata = {'Etag': create_md5}
@@ -727,13 +752,15 @@
     def test_copy_object_in_same_container(self):
         """Test copying object to another object in same container"""
         # create source object
-        src_object_name = data_utils.rand_name(name='SrcObject')
+        src_object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='SrcObject')
         src_data = data_utils.random_bytes(size=len(src_object_name) * 2)
         resp, _ = self.object_client.create_object(self.container_name,
                                                    src_object_name,
                                                    src_data)
         # create destination object
-        dst_object_name = data_utils.rand_name(name='DstObject')
+        dst_object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='DstObject')
         dst_data = data_utils.random_bytes(size=len(dst_object_name) * 3)
         resp, _ = self.object_client.create_object(self.container_name,
                                                    dst_object_name,
@@ -784,12 +811,14 @@
     def test_copy_object_2d_way(self):
         """Test copying object's data to the new object using COPY"""
         # create source object
-        src_object_name = data_utils.rand_name(name='SrcObject')
+        src_object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='SrcObject')
         src_data = data_utils.random_bytes(size=len(src_object_name) * 2)
         resp, _ = self.object_client.create_object(self.container_name,
                                                    src_object_name, src_data)
         # create destination object
-        dst_object_name = data_utils.rand_name(name='DstObject')
+        dst_object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='DstObject')
         dst_data = data_utils.random_bytes(size=len(dst_object_name) * 3)
         resp, _ = self.object_client.create_object(self.container_name,
                                                    dst_object_name, dst_data)
@@ -809,22 +838,28 @@
     def test_copy_object_across_containers(self):
         """Test copying object to another container"""
         # create a container to use as a source container
-        src_container_name = data_utils.rand_name(name='TestSourceContainer')
+        src_container_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name='TestSourceContainer')
         self.container_client.update_container(src_container_name)
         self.containers.append(src_container_name)
         # create a container to use as a destination container
         dst_container_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
             name='TestDestinationContainer')
         self.container_client.update_container(dst_container_name)
         self.containers.append(dst_container_name)
         # create object in source container
-        object_name = data_utils.rand_name(name='Object')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='Object')
         data = data_utils.random_bytes(size=len(object_name) * 2)
         resp, _ = self.object_client.create_object(src_container_name,
                                                    object_name, data)
         # set object metadata
-        meta_key = data_utils.rand_name(name='test')
-        meta_value = data_utils.rand_name(name='MetaValue')
+        meta_key = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='test')
+        meta_value = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='MetaValue')
         orig_metadata = {'X-Object-Meta-' + meta_key: meta_value}
         resp, _ = self.object_client.create_or_update_object_metadata(
             src_container_name,
@@ -924,7 +959,8 @@
     def test_object_upload_in_segments(self):
         """Test uploading object in segments"""
         # create object
-        object_name = data_utils.rand_name(name='LObject')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='LObject')
         data = data_utils.arbitrary_string()
         segments = 10
         data_segments = [data + str(i) for i in range(segments)]
@@ -1014,7 +1050,8 @@
 
     def setUp(self):
         super(PublicObjectTest, self).setUp()
-        self.container_name = data_utils.rand_name(name='TestContainer')
+        self.container_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestContainer')
         self.container_client.update_container(self.container_name)
         self.containers.append(self.container_name)
 
@@ -1039,7 +1076,8 @@
         self.assertHeaders(resp_meta, 'Container', 'POST')
 
         # create object
-        object_name = data_utils.rand_name(name='Object')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='Object')
         data = data_utils.random_bytes(size=len(object_name))
         resp, _ = self.object_client.create_object(self.container_name,
                                                    object_name, data)
@@ -1079,7 +1117,8 @@
         self.assertHeaders(resp_meta, 'Container', 'POST')
 
         # create object
-        object_name = data_utils.rand_name(name='Object')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='Object')
         data = data_utils.random_bytes(size=len(object_name))
         resp, _ = self.object_client.create_object(self.container_name,
                                                    object_name, data)
diff --git a/tempest/api/object_storage/test_object_slo.py b/tempest/api/object_storage/test_object_slo.py
index 22d12ce..b8e0b55 100644
--- a/tempest/api/object_storage/test_object_slo.py
+++ b/tempest/api/object_storage/test_object_slo.py
@@ -17,9 +17,11 @@
 from oslo_utils.secretutils import md5
 from tempest.api.object_storage import base
 from tempest.common import utils
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 
+CONF = config.CONF
 # Each segment, except for the final one, must be at least 1 megabyte
 MIN_SEGMENT_SIZE = 1024 * 1024
 
@@ -47,7 +49,8 @@
 
     def _create_manifest(self):
         # Create a manifest file for SLO uploading
-        object_name = data_utils.rand_name(name='TestObject')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestObject')
         object_name_base_1 = object_name + '_01'
         object_name_base_2 = object_name + '_02'
         data_size = MIN_SEGMENT_SIZE
@@ -80,7 +83,8 @@
         manifest = self._create_manifest()
 
         params = {'multipart-manifest': 'put'}
-        object_name = data_utils.rand_name(name='TestObject')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestObject')
         self._create_object(self.container_name,
                             object_name,
                             manifest,
@@ -109,7 +113,8 @@
         manifest = self._create_manifest()
 
         params = {'multipart-manifest': 'put'}
-        object_name = data_utils.rand_name(name='TestObject')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestObject')
         resp = self._create_object(self.container_name,
                                    object_name,
                                    manifest,
diff --git a/tempest/api/object_storage/test_object_temp_url_negative.py b/tempest/api/object_storage/test_object_temp_url_negative.py
index 712697e..d63a3cb 100644
--- a/tempest/api/object_storage/test_object_temp_url_negative.py
+++ b/tempest/api/object_storage/test_object_temp_url_negative.py
@@ -67,7 +67,8 @@
             self.key)
 
         # create object
-        self.object_name = data_utils.rand_name(name='ObjectTemp')
+        self.object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='ObjectTemp')
         content = data_utils.arbitrary_string(size=len(self.object_name),
                                               base_text=self.object_name)
         self.object_client.create_object(self.container_name,
diff --git a/tempest/api/object_storage/test_object_version.py b/tempest/api/object_storage/test_object_version.py
index b64b172..02b3be7 100644
--- a/tempest/api/object_storage/test_object_version.py
+++ b/tempest/api/object_storage/test_object_version.py
@@ -16,6 +16,7 @@
 import testtools
 
 from tempest.api.object_storage import base
+from tempest.common import object_storage
 from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
@@ -51,28 +52,33 @@
         6. delete object version 1
         """
         # create container
-        vers_container_name = data_utils.rand_name(name='TestVersionContainer')
+        vers_container_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name='TestVersionContainer')
         resp, _ = self.container_client.update_container(vers_container_name)
-        self.addCleanup(base.delete_containers,
+        self.addCleanup(object_storage.delete_containers,
                         [vers_container_name],
                         self.container_client,
                         self.object_client)
         self.assertHeaders(resp, 'Container', 'PUT')
         self.assertContainer(vers_container_name, '0', '0', 'Missing Header')
 
-        base_container_name = data_utils.rand_name(name='TestBaseContainer')
+        base_container_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name='TestBaseContainer')
         headers = {'X-versions-Location': vers_container_name}
         resp, _ = self.container_client.update_container(
             base_container_name,
             **headers)
-        self.addCleanup(base.delete_containers,
+        self.addCleanup(object_storage.delete_containers,
                         [base_container_name],
                         self.container_client,
                         self.object_client)
         self.assertHeaders(resp, 'Container', 'PUT')
         self.assertContainer(base_container_name, '0', '0',
                              vers_container_name)
-        object_name = data_utils.rand_name(name='TestObject')
+        object_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='TestObject')
         # create object
         data_1 = data_utils.random_bytes()
         resp, _ = self.object_client.create_object(base_container_name,
diff --git a/tempest/api/volume/admin/test_group_snapshots.py b/tempest/api/volume/admin/test_group_snapshots.py
index 8af8435..d059926 100644
--- a/tempest/api/volume/admin/test_group_snapshots.py
+++ b/tempest/api/volume/admin/test_group_snapshots.py
@@ -35,7 +35,8 @@
     def _create_group_snapshot(self, **kwargs):
         if 'name' not in kwargs:
             kwargs['name'] = data_utils.rand_name(
-                self.__class__.__name__ + '-Group_Snapshot')
+                prefix=CONF.resource_name_prefix,
+                name=self.__class__.__name__ + '-Group_Snapshot')
 
         group_snapshot = self.group_snapshots_client.create_group_snapshot(
             **kwargs)['group_snapshot']
@@ -93,7 +94,8 @@
 
         # Create volume is instance level, can not be deleted before group.
         # Volume delete handled by delete_group method, cleanup method.
-        params = {'name': data_utils.rand_name("volume"),
+        prefix = CONF.resource_name_prefix
+        params = {'name': data_utils.rand_name(prefix=prefix, name="volume"),
                   'volume_type': volume_type['id'],
                   'group_id': grp['id'],
                   'size': CONF.volume.volume_size}
@@ -102,7 +104,8 @@
             self.volumes_client, vol['id'], 'available')
 
         # Create group snapshot
-        group_snapshot_name = data_utils.rand_name('group_snapshot')
+        group_snapshot_name = data_utils.rand_name(prefix=prefix,
+                                                   name='group_snapshot')
         group_snapshot = self._create_group_snapshot(
             group_id=grp['id'], name=group_snapshot_name)
         snapshots = self.snapshots_client.list_snapshots(
@@ -161,7 +164,8 @@
 
         # Create volume is instance level, can not be deleted before group.
         # Volume delete handled by delete_group method, cleanup method.
-        params = {'name': data_utils.rand_name("volume"),
+        prefix = CONF.resource_name_prefix
+        params = {'name': data_utils.rand_name(prefix=prefix, name="volume"),
                   'volume_type': volume_type['id'],
                   'group_id': grp['id'],
                   'size': CONF.volume.volume_size}
@@ -170,7 +174,8 @@
             self.volumes_client, vol['id'], 'available')
 
         # Create group_snapshot
-        group_snapshot_name = data_utils.rand_name('group_snapshot')
+        group_snapshot_name = data_utils.rand_name(prefix=prefix,
+                                                   name='group_snapshot')
         group_snapshot = self._create_group_snapshot(
             group_id=grp['id'], name=group_snapshot_name)
         self.assertEqual(group_snapshot_name, group_snapshot['name'])
@@ -182,7 +187,7 @@
                     self.snapshots_client, snap['id'], 'available')
 
         # Create Group from Group snapshot
-        grp_name2 = data_utils.rand_name('Group_from_snap')
+        grp_name2 = data_utils.rand_name(prefix=prefix, name='Group_from_snap')
         grp2 = self.groups_client.create_group_from_source(
             group_snapshot_id=group_snapshot['id'], name=grp_name2)['group']
         self.addCleanup(self.delete_group, grp2['id'])
@@ -219,7 +224,7 @@
         # Create a volume group
         grp = self.create_group(group_type=group_type['id'],
                                 volume_types=[volume_type['id']])
-
+        prefix = CONF.resource_name_prefix
         # Note: When dealing with consistency groups all volumes must
         # reside on the same backend. Adding volumes to the same consistency
         # group from multiple backends isn't supported. In order to ensure all
@@ -229,7 +234,8 @@
         for _ in range(2):
             # Create volume is instance level, can't be deleted before group.
             # Volume delete handled by delete_group method, cleanup method.
-            params = {'name': data_utils.rand_name("volume"),
+            params = {'name': data_utils.rand_name(prefix=prefix,
+                                                   name="volume"),
                       'volume_type': volume_type['id'],
                       'group_id': grp['id'],
                       'size': CONF.volume.volume_size}
@@ -287,9 +293,10 @@
         group = self.create_group(group_type=group_type['id'],
                                   volume_types=[volume_type['id']])
 
+        prefix = CONF.resource_name_prefix
         # Create volume is instance level, can not be deleted before group.
         # Volume delete handled by delete_group method, cleanup method.
-        params = {'name': data_utils.rand_name("volume"),
+        params = {'name': data_utils.rand_name(prefix=prefix, name="volume"),
                   'volume_type': volume_type['id'],
                   'group_id': group['id'],
                   'size': CONF.volume.volume_size}
diff --git a/tempest/api/volume/admin/test_group_types.py b/tempest/api/volume/admin/test_group_types.py
index 406af27..03ff340 100644
--- a/tempest/api/volume/admin/test_group_types.py
+++ b/tempest/api/volume/admin/test_group_types.py
@@ -14,9 +14,12 @@
 #    under the License.
 
 from tempest.api.volume import base
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 
+CONF = config.CONF
+
 
 class GroupTypesTest(base.BaseVolumeAdminTest):
     """Test group types"""
@@ -27,8 +30,12 @@
     @decorators.idempotent_id('dd71e5f9-393e-4d4f-90e9-fa1b8d278864')
     def test_group_type_create_list_update_show_delete(self):
         """Test create/list/update/show/delete group type"""
-        name = data_utils.rand_name(self.__class__.__name__ + '-group-type')
-        description = data_utils.rand_name("group-type-description")
+        name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-group-type')
+        description = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name="group-type-description")
         group_specs = {"consistent_group_snapshot_enabled": "<is> False"}
         params = {'name': name,
                   'description': description,
@@ -50,7 +57,8 @@
 
         update_params = {
             'name': data_utils.rand_name(
-                self.__class__.__name__ + '-updated-group-type'),
+                prefix=CONF.resource_name_prefix,
+                name=self.__class__.__name__ + '-updated-group-type'),
             'description': 'updated-group-type-desc'
         }
         updated_group_type = self.admin_group_types_client.update_group_type(
@@ -75,8 +83,10 @@
     @decorators.idempotent_id('3d5e5cec-72b4-4511-b135-7cc2b7a053ae')
     def test_group_type_list_by_optional_params(self):
         """Test list group type sort/public"""
-        type_a_name = "a_{}".format(data_utils.rand_name('group-type'))
-        type_b_name = "b_{}".format(data_utils.rand_name('group-type'))
+        type_a_name = "a_{}".format(data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='group-type'))
+        type_b_name = "b_{}".format(data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='group-type'))
         self.create_group_type(name=type_a_name, **{'is_public': True})
         self.create_group_type(name=type_b_name, **{'is_public': False})
 
diff --git a/tempest/api/volume/admin/test_groups.py b/tempest/api/volume/admin/test_groups.py
index 094f142..8f74769 100644
--- a/tempest/api/volume/admin/test_groups.py
+++ b/tempest/api/volume/admin/test_groups.py
@@ -38,20 +38,23 @@
         group_type = self.create_group_type()
 
         # Create group
-        grp1_name = data_utils.rand_name('Group1')
+        grp1_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='Group1')
         grp1 = self.create_group(group_type=group_type['id'],
                                  volume_types=[volume_type['id']],
                                  name=grp1_name)
         grp1_id = grp1['id']
 
-        grp2_name = data_utils.rand_name('Group2')
+        grp2_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='Group2')
         grp2 = self.create_group(group_type=group_type['id'],
                                  volume_types=[volume_type['id']],
                                  name=grp2_name)
         grp2_id = grp2['id']
 
         # Create volume
-        vol1_name = data_utils.rand_name("volume")
+        vol1_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name="volume")
         params = {'name': vol1_name,
                   'volume_type': volume_type['id'],
                   'group_id': grp1['id'],
@@ -108,11 +111,13 @@
         grp = self.create_group(group_type=group_type['id'],
                                 volume_types=[volume_type['id']])
 
+        prefix = CONF.resource_name_prefix
         # Create volume is instance level, can not be deleted before group.
         # Volume delete handled by delete_group method, cleanup method.
         grp_vols = []
         for _ in range(2):
-            params = {'name': data_utils.rand_name("volume"),
+            params = {'name': data_utils.rand_name(prefix=prefix,
+                                                   name="volume"),
                       'volume_type': volume_type['id'],
                       'group_id': grp['id'],
                       'size': CONF.volume.volume_size}
@@ -177,9 +182,10 @@
         grp = self.create_group(group_type=group_type['id'],
                                 volume_types=[volume_type['id']])
 
+        prefix = CONF.resource_name_prefix
         # Create volume is instance level, can not be deleted before group.
         # Volume delete handled by delete_group method, cleanup method.
-        params = {'name': data_utils.rand_name("volume"),
+        params = {'name': data_utils.rand_name(prefix=prefix, name="volume"),
                   'volume_type': volume_type['id'],
                   'group_id': grp['id'],
                   'size': CONF.volume.volume_size}
@@ -188,7 +194,7 @@
             self.volumes_client, vol['id'], 'available')
 
         # Create Group from Group
-        grp_name2 = data_utils.rand_name('Group_from_grp')
+        grp_name2 = data_utils.rand_name(prefix=prefix, name='Group_from_grp')
         grp2 = self.groups_client.create_group_from_source(
             source_group_id=grp['id'], name=grp_name2)['group']
         self.addCleanup(self.delete_group, grp2['id'])
diff --git a/tempest/api/volume/admin/test_multi_backend.py b/tempest/api/volume/admin/test_multi_backend.py
index 83733bd..028bf1a 100644
--- a/tempest/api/volume/admin/test_multi_backend.py
+++ b/tempest/api/volume/admin/test_multi_backend.py
@@ -54,8 +54,12 @@
     @classmethod
     def _create_type_and_volume(cls, backend_name_key, with_prefix):
         # Volume/Type creation
-        type_name = data_utils.rand_name(cls.__name__ + '-Type')
-        vol_name = data_utils.rand_name(cls.__name__ + '-Volume')
+        type_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=cls.__name__ + '-Type')
+        vol_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=cls.__name__ + '-Volume')
         spec_key_with_prefix = "capabilities:volume_backend_name"
         spec_key_without_prefix = "volume_backend_name"
         if with_prefix:
diff --git a/tempest/api/volume/admin/test_qos.py b/tempest/api/volume/admin/test_qos.py
index e31c0ef..83f7e21 100644
--- a/tempest/api/volume/admin/test_qos.py
+++ b/tempest/api/volume/admin/test_qos.py
@@ -14,9 +14,12 @@
 
 from tempest.api.volume import base
 from tempest.common import waiters
+from tempest import config
 from tempest.lib.common.utils import data_utils as utils
 from tempest.lib import decorators
 
+CONF = config.CONF
+
 
 class QosSpecsTestJSON(base.BaseVolumeAdminTest):
     """Test the Cinder QoS-specs.
@@ -30,7 +33,8 @@
         super(QosSpecsTestJSON, cls).resource_setup()
         # Create admin qos client
         # Create a test shared qos-specs for tests
-        cls.qos_name = utils.rand_name(cls.__name__ + '-QoS')
+        cls.qos_name = utils.rand_name(
+            cls.__name__ + '-QoS', prefix=CONF.resource_name_prefix)
         cls.qos_consumer = 'front-end'
 
         cls.created_qos = cls.create_test_qos_specs(cls.qos_name,
@@ -38,7 +42,8 @@
                                                     read_iops_sec='2000')
 
     def _create_delete_test_qos_with_given_consumer(self, consumer):
-        name = utils.rand_name(self.__class__.__name__ + '-qos')
+        name = utils.rand_name(
+            self.__class__.__name__ + '-qos', prefix=CONF.resource_name_prefix)
         qos = {'name': name, 'consumer': consumer}
         body = self.create_test_qos_specs(name, consumer)
         for key in ['name', 'consumer']:
diff --git a/tempest/api/volume/admin/test_snapshot_manage.py b/tempest/api/volume/admin/test_snapshot_manage.py
index 478bd16..aed1010 100644
--- a/tempest/api/volume/admin/test_snapshot_manage.py
+++ b/tempest/api/volume/admin/test_snapshot_manage.py
@@ -77,10 +77,12 @@
         self.assertNotIn(snapshot['id'], [v['id'] for v in all_snapshots])
 
         # Manage the snapshot
-        name = data_utils.rand_name(self.__class__.__name__ +
-                                    '-Managed-Snapshot')
-        description = data_utils.rand_name(self.__class__.__name__ +
-                                           '-Managed-Snapshot-Description')
+        name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-Managed-Snapshot')
+        description = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-Managed-Snapshot-Description')
         metadata = {"manage-snap-meta1": "value1",
                     "manage-snap-meta2": "value2",
                     "manage-snap-meta3": "value3"}
diff --git a/tempest/api/volume/admin/test_user_messages.py b/tempest/api/volume/admin/test_user_messages.py
index 00b7f3a..3443b87 100644
--- a/tempest/api/volume/admin/test_user_messages.py
+++ b/tempest/api/volume/admin/test_user_messages.py
@@ -29,12 +29,16 @@
 
     def _create_user_message(self):
         """Trigger a 'no valid host' situation to generate a message."""
-        bad_protocol = data_utils.rand_name('storage_protocol')
-        bad_vendor = data_utils.rand_name('vendor_name')
+        bad_protocol = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name='storage_protocol')
+        bad_vendor = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='vendor_name')
         extra_specs = {'storage_protocol': bad_protocol,
                        'vendor_name': bad_vendor}
         vol_type_name = data_utils.rand_name(
-            self.__class__.__name__ + '-volume-type')
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-volume-type')
         bogus_type = self.create_volume_type(
             name=vol_type_name, extra_specs=extra_specs)
         params = {'volume_type': bogus_type['id'],
diff --git a/tempest/api/volume/admin/test_volume_manage.py b/tempest/api/volume/admin/test_volume_manage.py
index 1e4e7cb..609ec15 100644
--- a/tempest/api/volume/admin/test_volume_manage.py
+++ b/tempest/api/volume/admin/test_volume_manage.py
@@ -58,7 +58,8 @@
 
         # Manage volume
         new_vol_name = data_utils.rand_name(
-            self.__class__.__name__ + '-volume')
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-volume')
         new_vol_ref = {
             'name': new_vol_name,
             'host': org_vol_info['os-vol-host-attr:host'],
diff --git a/tempest/api/volume/admin/test_volume_quota_classes.py b/tempest/api/volume/admin/test_volume_quota_classes.py
index f482788..fb2adc7 100644
--- a/tempest/api/volume/admin/test_volume_quota_classes.py
+++ b/tempest/api/volume/admin/test_volume_quota_classes.py
@@ -21,9 +21,11 @@
 from tempest.api.volume import base
 from tempest.common import identity
 from tempest.common import tempest_fixtures as fixtures
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 
+CONF = config.CONF
 LOG = logging.getLogger(__name__)
 QUOTA_KEYS = ['gigabytes', 'snapshots', 'volumes', 'backups',
               'backup_gigabytes', 'per_volume_gigabytes']
@@ -96,8 +98,11 @@
                         matchers.ContainsAll(update_kwargs.items()))
 
         # Verify a new project's default quotas.
-        project_name = data_utils.rand_name('quota_class_tenant')
-        description = data_utils.rand_name('desc_')
+        project_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name='quota_class_tenant')
+        description = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='desc_')
         project_id = identity.identity_utils(self.os_admin).create_project(
             name=project_name, description=description)['id']
         self.addCleanup(identity.identity_utils(self.os_admin).delete_project,
diff --git a/tempest/api/volume/admin/test_volume_types.py b/tempest/api/volume/admin/test_volume_types.py
index 98ae83b..5b17afb 100644
--- a/tempest/api/volume/admin/test_volume_types.py
+++ b/tempest/api/volume/admin/test_volume_types.py
@@ -36,7 +36,9 @@
     def test_volume_crud_with_volume_type_and_extra_specs(self):
         """Test create/update/get/delete volume with volume_type"""
         volume_types = list()
-        vol_name = data_utils.rand_name(self.__class__.__name__ + '-volume')
+        vol_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-volume')
         proto = CONF.volume.storage_protocol
         vendor = CONF.volume.vendor_name
         extra_specs = {"storage_protocol": proto,
@@ -82,8 +84,12 @@
     @decorators.idempotent_id('4e955c3b-49db-4515-9590-0c99f8e471ad')
     def test_volume_type_create_get_delete(self):
         """Test create/get/delete volume type"""
-        name = data_utils.rand_name(self.__class__.__name__ + '-volume-type')
-        description = data_utils.rand_name("volume-type-description")
+        name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-volume-type')
+        description = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name="volume-type-description")
         proto = CONF.volume.storage_protocol
         vendor = CONF.volume.vendor_name
         extra_specs = {"storage_protocol": proto,
@@ -183,8 +189,12 @@
         volume_type = self.create_volume_type()
 
         # New volume type details
-        name = data_utils.rand_name("volume-type")
-        description = data_utils.rand_name("volume-type-description")
+        name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name="volume-type")
+        description = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name="volume-type-description")
         is_public = not volume_type['is_public']
 
         # Update volume type details
diff --git a/tempest/api/volume/admin/test_volumes_backup.py b/tempest/api/volume/admin/test_volumes_backup.py
index 835cc1d..c1f753a 100644
--- a/tempest/api/volume/admin/test_volumes_backup.py
+++ b/tempest/api/volume/admin/test_volumes_backup.py
@@ -59,7 +59,9 @@
         """
         volume = self.create_volume()
         # Create backup
-        backup_name = data_utils.rand_name(self.__class__.__name__ + '-Backup')
+        backup_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-Backup')
         backup = self.create_backup(volume_id=volume['id'], name=backup_name)
         waiters.wait_for_volume_resource_status(self.volumes_client,
                                                 volume['id'], 'available')
@@ -124,7 +126,8 @@
         volume = self.create_volume()
         # Create a backup
         backup_name = data_utils.rand_name(
-            self.__class__.__name__ + '-Backup')
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-Backup')
         backup = self.create_backup(volume_id=volume['id'], name=backup_name)
         waiters.wait_for_volume_resource_status(self.volumes_client,
                                                 volume['id'], 'available')
diff --git a/tempest/api/volume/base.py b/tempest/api/volume/base.py
index ad8f573..7a08545 100644
--- a/tempest/api/volume/base.py
+++ b/tempest/api/volume/base.py
@@ -14,6 +14,7 @@
 #    under the License.
 
 from tempest.common import compute
+from tempest.common import object_storage
 from tempest.common import waiters
 from tempest import config
 from tempest.lib.common import api_version_utils
@@ -68,6 +69,8 @@
         if CONF.service_available.glance:
             cls.images_client = cls.os_primary.image_client_v2
 
+        cls.container_client = cls.os_primary.container_client
+        cls.object_client = cls.os_primary.object_client
         cls.backups_client = cls.os_primary.backups_client_latest
         cls.volumes_client = cls.os_primary.volumes_client_latest
         cls.messages_client = cls.os_primary.volume_messages_client_latest
@@ -117,7 +120,9 @@
             kwargs['size'] = max(kwargs['size'], min_disk)
 
         if 'name' not in kwargs:
-            name = data_utils.rand_name(self.__name__ + '-Volume')
+            name = data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name=self.__name__ + '-Volume')
             kwargs['name'] = name
 
         if CONF.volume.volume_type and 'volume_type' not in kwargs:
@@ -163,7 +168,9 @@
     def create_snapshot(self, volume_id=1, **kwargs):
         """Wrapper utility that returns a test snapshot."""
         if 'name' not in kwargs:
-            name = data_utils.rand_name(self.__name__ + '-Snapshot')
+            name = data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name=self.__name__ + '-Snapshot')
             kwargs['name'] = name
 
         snapshot = self.snapshots_client.create_snapshot(
@@ -174,16 +181,36 @@
                                                 snapshot['id'], 'available')
         return snapshot
 
-    def create_backup(self, volume_id, backup_client=None, **kwargs):
+    def create_backup(self, volume_id, backup_client=None, object_client=None,
+                      container_client=None, **kwargs):
         """Wrapper utility that returns a test backup."""
         if backup_client is None:
             backup_client = self.backups_client
+        if container_client is None:
+            container_client = self.container_client
+        if object_client is None:
+            object_client = self.object_client
         if 'name' not in kwargs:
-            name = data_utils.rand_name(self.__class__.__name__ + '-Backup')
+            name = data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name=self.__class__.__name__ + '-Backup')
             kwargs['name'] = name
 
+        if CONF.volume.backup_driver == "swift":
+            if 'container' not in kwargs:
+                cont_name = self.__class__.__name__ + '-backup-container'
+                cont = data_utils.rand_name(
+                    prefix=CONF.resource_name_prefix,
+                    name=cont_name)
+                kwargs['container'] = cont.lower()
+
+            self.addCleanup(object_storage.delete_containers,
+                            kwargs['container'], container_client,
+                            object_client)
+
         backup = backup_client.create_backup(
             volume_id=volume_id, **kwargs)['backup']
+
         # addCleanup uses list pop to cleanup. Wait should be added before
         # the backup is deleted
         self.addCleanup(backup_client.wait_for_resource_deletion,
@@ -227,7 +254,9 @@
     def create_server(self, wait_until='ACTIVE', **kwargs):
         name = kwargs.pop(
             'name',
-            data_utils.rand_name(self.__class__.__name__ + '-instance'))
+            data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name=self.__class__.__name__ + '-instance'))
 
         if wait_until == 'SSHABLE' and not kwargs.get('validation_resources'):
             # If we were asked for SSHABLE but were not provided with the
@@ -255,7 +284,8 @@
     def create_group(self, **kwargs):
         if 'name' not in kwargs:
             kwargs['name'] = data_utils.rand_name(
-                self.__class__.__name__ + '-Group')
+                prefix=CONF.resource_name_prefix,
+                name=self.__class__.__name__ + '-Group')
 
         group = self.groups_client.create_group(**kwargs)['group']
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
@@ -318,7 +348,9 @@
     @cleanup_order
     def create_test_qos_specs(self, name=None, consumer=None, **kwargs):
         """create a test Qos-Specs."""
-        name = name or data_utils.rand_name(self.__name__ + '-QoS')
+        name = name or data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.__name__ + '-QoS')
         consumer = consumer or 'front-end'
         qos_specs = self.admin_volume_qos_client.create_qos(
             name=name, consumer=consumer, **kwargs)['qos_specs']
@@ -328,7 +360,9 @@
     @cleanup_order
     def create_volume_type(self, name=None, **kwargs):
         """Create a test volume-type"""
-        name = name or data_utils.rand_name(self.__name__ + '-volume-type')
+        name = name or data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.__name__ + '-volume-type')
         volume_type = self.admin_volume_types_client.create_volume_type(
             name=name, **kwargs)['volume_type']
         self.cleanup(self.clear_volume_type, volume_type['id'])
@@ -358,7 +392,8 @@
     def create_group_type(self, name=None, **kwargs):
         """Create a test group-type"""
         name = name or data_utils.rand_name(
-            self.__class__.__name__ + '-group-type')
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-group-type')
         group_type = self.admin_group_types_client.create_group_type(
             name=name, **kwargs)['group_type']
         self.addCleanup(self.admin_group_types_client.delete_group_type,
diff --git a/tempest/api/volume/test_volumes_actions.py b/tempest/api/volume/test_volumes_actions.py
index 5b50bfa..150677d 100644
--- a/tempest/api/volume/test_volumes_actions.py
+++ b/tempest/api/volume/test_volumes_actions.py
@@ -109,7 +109,8 @@
         # it is shared with the other tests. After it is uploaded in Glance,
         # there is no way to delete it from Cinder, so we delete it from Glance
         # using the Glance images_client and from Cinder via tearDownClass.
-        image_name = data_utils.rand_name(self.__class__.__name__ + '-Image')
+        image_name = data_utils.rand_name(self.__class__.__name__ + '-Image',
+                                          prefix=CONF.resource_name_prefix)
         body = self.volumes_client.upload_volume(
             self.volume['id'], image_name=image_name,
             disk_format=CONF.volume.disk_format)['os-volume_upload_image']
diff --git a/tempest/api/volume/test_volumes_backup.py b/tempest/api/volume/test_volumes_backup.py
index 89ff497..a3ba974 100644
--- a/tempest/api/volume/test_volumes_backup.py
+++ b/tempest/api/volume/test_volumes_backup.py
@@ -13,7 +13,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import testtools
 from testtools import matchers
 
 from tempest.api.volume import base
@@ -53,8 +52,6 @@
                                                 'available')
         return restored_volume
 
-    @testtools.skipIf(CONF.volume.storage_protocol == 'ceph',
-                      'ceph does not support arbitrary container names')
     @decorators.idempotent_id('a66eb488-8ee1-47d4-8e9f-575a095728c6')
     def test_volume_backup_create_get_detailed_list_restore_delete(self):
         """Test create/get/list/restore/delete volume backup
@@ -75,22 +72,28 @@
         self.addCleanup(self.delete_volume, self.volumes_client, volume['id'])
 
         # Create a backup
-        backup_name = data_utils.rand_name(
-            self.__class__.__name__ + '-Backup')
-        description = data_utils.rand_name("volume-backup-description")
-        backup = self.create_backup(volume_id=volume['id'],
-                                    name=backup_name,
-                                    description=description,
-                                    container='container')
-        self.assertEqual(backup_name, backup['name'])
+        kwargs = {}
+        kwargs["name"] = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-Backup')
+        kwargs["description"] = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name="backup-description")
+        if CONF.volume.backup_driver == "swift":
+            kwargs["container"] = data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name=self.__class__.__name__ + '-backup-container').lower()
+        backup = self.create_backup(volume_id=volume['id'], **kwargs)
+        self.assertEqual(kwargs["name"], backup['name'])
         waiters.wait_for_volume_resource_status(self.volumes_client,
                                                 volume['id'], 'available')
 
         # Get a given backup
         backup = self.backups_client.show_backup(backup['id'])['backup']
-        self.assertEqual(backup_name, backup['name'])
-        self.assertEqual(description, backup['description'])
-        self.assertEqual('container', backup['container'])
+        self.assertEqual(kwargs["name"], backup['name'])
+        self.assertEqual(kwargs["description"], backup['description'])
+        if CONF.volume.backup_driver == "swift":
+            self.assertEqual(kwargs["container"], backup['container'])
 
         # Get all backups with detail
         backups = self.backups_client.list_backups(detail=True)['backups']
@@ -129,7 +132,8 @@
         self.attach_volume(server['id'], volume['id'])
         # Create backup using force flag
         backup_name = data_utils.rand_name(
-            self.__class__.__name__ + '-Backup')
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-Backup')
         backup = self.create_backup(volume_id=volume['id'],
                                     name=backup_name, force=True)
         waiters.wait_for_volume_resource_status(self.volumes_client,
@@ -168,6 +172,52 @@
 
         self.assertTrue(restored_volume_info['bootable'])
 
+    @decorators.idempotent_id('f86eff09-2a6d-43c1-905e-8079e5754f1e')
+    @utils.services('compute')
+    @decorators.related_bug('1703011')
+    def test_volume_backup_incremental(self):
+        """Test create a backup when latest incremental backup is deleted"""
+        # Create a volume
+        volume = self.create_volume()
+
+        # Create a server
+        server = self.create_server(wait_until='SSHABLE')
+
+        # Attach volume to the server
+        self.attach_volume(server['id'], volume['id'])
+
+        # Create a backup to the attached volume
+        backup1 = self.create_backup(volume['id'], force=True)
+
+        # Validate backup details
+        backup_info = self.backups_client.show_backup(backup1['id'])['backup']
+        self.assertEqual(False, backup_info['has_dependent_backups'])
+        self.assertEqual(False, backup_info['is_incremental'])
+
+        # Create another incremental backup
+        backup2 = self.backups_client.create_backup(
+            volume_id=volume['id'], incremental=True, force=True)['backup']
+        waiters.wait_for_volume_resource_status(self.backups_client,
+                                                backup2['id'], 'available')
+
+        # Validate incremental backup details
+        backup2_info = self.backups_client.show_backup(backup2['id'])['backup']
+        self.assertEqual(True, backup2_info['is_incremental'])
+        self.assertEqual(False, backup2_info['has_dependent_backups'])
+
+        # Delete the last incremental backup that was created
+        self.backups_client.delete_backup(backup2['id'])
+        self.backups_client.wait_for_resource_deletion(backup2['id'])
+
+        # Create another incremental backup
+        backup3 = self.create_backup(
+            volume_id=volume['id'], incremental=True, force=True)
+
+        # Validate incremental backup details
+        backup3_info = self.backups_client.show_backup(backup3['id'])['backup']
+        self.assertEqual(True, backup3_info['is_incremental'])
+        self.assertEqual(False, backup3_info['has_dependent_backups'])
+
 
 class VolumesBackupsV39Test(base.BaseVolumeTest):
     """Test volumes backup with volume microversion greater than 3.8"""
@@ -192,8 +242,12 @@
 
         # Update backup and assert response body for update_backup method
         update_kwargs = {
-            'name': data_utils.rand_name(self.__class__.__name__ + '-Backup'),
-            'description': data_utils.rand_name("volume-backup-description")
+            'name': data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name=self.__class__.__name__ + '-Backup'),
+            'description': data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name="volume-backup-description")
         }
         update_backup = self.backups_client.update_backup(
             backup['id'], **update_kwargs)['backup']
diff --git a/tempest/api/volume/test_volumes_get.py b/tempest/api/volume/test_volumes_get.py
index 2009970..9b79f38 100644
--- a/tempest/api/volume/test_volumes_get.py
+++ b/tempest/api/volume/test_volumes_get.py
@@ -31,7 +31,9 @@
 
     def _volume_create_get_update_delete(self, **kwargs):
         # Create a volume, Get it's details and Delete the volume
-        v_name = data_utils.rand_name(self.__class__.__name__ + '-Volume')
+        v_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-Volume')
         metadata = {'Type': 'Test'}
         # Create a volume
         kwargs['name'] = v_name
@@ -71,7 +73,8 @@
         self.volumes_client.update_volume(volume['id'], **params)
         # Test volume update when display_name is new
         new_v_name = data_utils.rand_name(
-            self.__class__.__name__ + '-new-Volume')
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-new-Volume')
         new_desc = 'This is the new description of volume'
         params = {'name': new_v_name,
                   'description': new_desc}
@@ -94,7 +97,9 @@
         # Test volume create when display_name is none and display_description
         # contains specific characters,
         # then test volume update if display_name is duplicated
-        new_v_desc = data_utils.rand_name('@#$%^* description')
+        new_v_desc = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name='@#$%^* description')
         params = {'description': new_v_desc,
                   'availability_zone': volume['availability_zone'],
                   'size': CONF.volume.volume_size}
diff --git a/tempest/api/volume/test_volumes_negative.py b/tempest/api/volume/test_volumes_negative.py
index d9b8430..d8480df 100644
--- a/tempest/api/volume/test_volumes_negative.py
+++ b/tempest/api/volume/test_volumes_negative.py
@@ -39,7 +39,9 @@
 
     def create_image(self):
         # Create image
-        image_name = data_utils.rand_name(self.__class__.__name__ + "-image")
+        image_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + "-image")
         image = self.images_client.create_image(
             name=image_name,
             container_format=CONF.image.container_formats[0],
@@ -133,8 +135,11 @@
     @decorators.idempotent_id('e66e40d6-65e6-4e75-bdc7-636792fa152d')
     def test_update_volume_with_invalid_volume_id(self):
         """Test updating volume with invalid volume id should fail"""
-        self.assertRaises(lib_exc.NotFound, self.volumes_client.update_volume,
-                          volume_id=data_utils.rand_name('invalid'), name="n")
+        self.assertRaises(
+            lib_exc.NotFound, self.volumes_client.update_volume,
+            volume_id=data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name='invalid'), name="n")
 
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('72aeca85-57a5-4c1f-9057-f320f9ea575b')
@@ -147,8 +152,10 @@
     @decorators.idempotent_id('30799cfd-7ee4-446c-b66c-45b383ed211b')
     def test_get_invalid_volume_id(self):
         """Test getting volume with invalid volume id should fail"""
-        self.assertRaises(lib_exc.NotFound, self.volumes_client.show_volume,
-                          data_utils.rand_name('invalid'))
+        self.assertRaises(
+            lib_exc.NotFound, self.volumes_client.show_volume,
+            data_utils.rand_name(
+                prefix=CONF.resource_name_prefix, name='invalid'))
 
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('c6c3db06-29ad-4e91-beb0-2ab195fe49e3')
@@ -161,8 +168,10 @@
     @decorators.idempotent_id('1f035827-7c32-4019-9240-b4ec2dbd9dfd')
     def test_delete_invalid_volume_id(self):
         """Test deleting volume with invalid volume id should fail"""
-        self.assertRaises(lib_exc.NotFound, self.volumes_client.delete_volume,
-                          data_utils.rand_name('invalid'))
+        self.assertRaises(
+            lib_exc.NotFound, self.volumes_client.delete_volume,
+            data_utils.rand_name(
+                prefix=CONF.resource_name_prefix, name='invalid'))
 
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('441a1550-5d44-4b30-af0f-a6d402f52026')
@@ -268,7 +277,9 @@
     @decorators.idempotent_id('0f4aa809-8c7b-418f-8fb3-84c7a5dfc52f')
     def test_list_volumes_with_nonexistent_name(self):
         """Test listing volumes with non existent name should get nothing"""
-        v_name = data_utils.rand_name(self.__class__.__name__ + '-Volume')
+        v_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-Volume')
         params = {'name': v_name}
         fetched_volume = self.volumes_client.list_volumes(
             params=params)['volumes']
@@ -281,7 +292,9 @@
 
         Listing volume details with non existent name should get nothing.
         """
-        v_name = data_utils.rand_name(self.__class__.__name__ + '-Volume')
+        v_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-Volume')
         params = {'name': v_name}
         fetched_volume = \
             self.volumes_client.list_volumes(
diff --git a/tempest/api/volume/test_volumes_snapshots.py b/tempest/api/volume/test_volumes_snapshots.py
index 95521e7..35afffd 100644
--- a/tempest/api/volume/test_volumes_snapshots.py
+++ b/tempest/api/volume/test_volumes_snapshots.py
@@ -132,7 +132,8 @@
 
         # Updates snapshot with new values
         new_s_name = data_utils.rand_name(
-            self.__class__.__name__ + '-new-snap')
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-new-snap')
         new_desc = 'This is the new description of snapshot.'
         params = {'name': new_s_name,
                   'description': new_desc}
diff --git a/tempest/api/volume/test_volumes_snapshots_negative.py b/tempest/api/volume/test_volumes_snapshots_negative.py
index 9c36dc6..364c5a8 100644
--- a/tempest/api/volume/test_volumes_snapshots_negative.py
+++ b/tempest/api/volume/test_volumes_snapshots_negative.py
@@ -32,7 +32,9 @@
     @decorators.idempotent_id('e3e466af-70ab-4f4b-a967-ab04e3532ea7')
     def test_create_snapshot_with_nonexistent_volume_id(self):
         """Test creating snapshot from non existent volume should fail"""
-        s_name = data_utils.rand_name(self.__class__.__name__ + '-snap')
+        s_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-snap')
         self.assertRaises(lib_exc.NotFound,
                           self.snapshots_client.create_snapshot,
                           volume_id=data_utils.rand_uuid(),
@@ -43,7 +45,9 @@
     def test_create_snapshot_without_passing_volume_id(self):
         """Test creating snapshot without passing volume_id should fail"""
         # Create a snapshot without passing volume id
-        s_name = data_utils.rand_name(self.__class__.__name__ + '-snap')
+        s_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-snap')
         self.assertRaises(lib_exc.NotFound,
                           self.snapshots_client.create_snapshot,
                           volume_id=None, display_name=s_name)
diff --git a/tempest/clients.py b/tempest/clients.py
index 5b31cf8..5338ed4 100644
--- a/tempest/clients.py
+++ b/tempest/clients.py
@@ -104,6 +104,15 @@
                 service=CONF.image.alternate_image_endpoint,
                 endpoint_type=CONF.image.alternate_image_endpoint_type,
                 region=CONF.image.region)
+            # NOTE(abhishekk): If no alternate endpoint is configured,
+            # this client will work the same as the base
+            # self.image_cache_client. If your test needs to know if
+            # these are different, check the config option to see if
+            # the alternate_image_endpoint is set.
+            self.cache_client_remote = self.image_v2.ImageCacheClient(
+                service=CONF.image.alternate_image_endpoint,
+                endpoint_type=CONF.image.alternate_image_endpoint_type,
+                region=CONF.image.region)
 
     def _set_compute_clients(self):
         self.agents_client = self.compute.AgentsClient()
diff --git a/tempest/cmd/cleanup.py b/tempest/cmd/cleanup.py
index a8a344a..2a406de 100644
--- a/tempest/cmd/cleanup.py
+++ b/tempest/cmd/cleanup.py
@@ -28,6 +28,10 @@
 
 .. warning::
 
+    We advice not to run tempest cleanup on production environments.
+
+.. warning::
+
     If step 1 is skipped in the example below, the cleanup procedure
     may delete resources that existed in the cloud before the test run. This
     may cause an unwanted destruction of cloud resources, so use caution with
@@ -45,7 +49,10 @@
 * ``--init-saved-state``: Initializes the saved state of the OpenStack
   deployment and will output a ``saved_state.json`` file containing resources
   from your deployment that will be preserved from the cleanup command. This
-  should be done prior to running Tempest tests.
+  should be done prior to running Tempest tests. Note, that if other users of
+  your cloud could have created resources after running ``--init-saved-state``,
+  it would not protect those resources as they wouldn't be present in the
+  saved_state.json file.
 
 * ``--delete-tempest-conf-objects``: If option is present, then the command
   will delete the admin project in addition to the resources associated with
@@ -58,7 +65,27 @@
   global objects that will be removed (domains, flavors, images, roles,
   projects, and users). Once the cleanup command is executed (e.g. run without
   parameters), running it again with ``--dry-run`` should yield an empty
-  report.
+  report. We STRONGLY ENCOURAGE to run ``tempest cleanup`` with ``--dry-run``
+  first and then verify that the resources listed in the ``dry_run.json`` file
+  are meant to be deleted.
+
+* ``--prefix``: Only resources that match the prefix will be deleted. When this
+  option is used, ``saved_state.json`` file is not needed (no need to run with
+  ``--init-saved-state`` first).
+
+  All tempest resources are created with the prefix value from the config
+  option ``resource_name_prefix`` in tempest.conf. To cleanup only the
+  resources created by tempest, you should use the prefix set in your
+  tempest.conf (the default value of ``resource_name_prefix`` is ``tempest``.
+
+  Note, that some resources are not named thus they will not be deleted when
+  filtering based on the prefix. This option will be ignored when
+  ``--init-saved-state`` is used so that it can capture the true init state -
+  all resources present at that moment. If there is any ``saved_state.json``
+  file present (e.g. if you ran the tempest cleanup with ``--init-saved-state``
+  before) and you run the tempest cleanup with ``--prefix``, the
+  ``saved_state.json`` file will be ignored and cleanup will be done based on
+  the passed prefix only.
 
 * ``--help``: Print the help text for the command and parameters.
 
@@ -157,6 +184,7 @@
         is_dry_run = self.options.dry_run
         is_preserve = not self.options.delete_tempest_conf_objects
         is_save_state = False
+        cleanup_prefix = self.options.prefix
 
         if is_dry_run:
             self.dry_run_data["_projects_to_clean"] = {}
@@ -168,7 +196,8 @@
                   'is_dry_run': is_dry_run,
                   'saved_state_json': self.json_data,
                   'is_preserve': False,
-                  'is_save_state': is_save_state}
+                  'is_save_state': is_save_state,
+                  'prefix': cleanup_prefix}
         project_service = cleanup_service.ProjectService(admin_mgr, **kwargs)
         projects = project_service.list()
         LOG.info("Processing %s projects", len(projects))
@@ -182,6 +211,7 @@
                   'saved_state_json': self.json_data,
                   'is_preserve': is_preserve,
                   'is_save_state': is_save_state,
+                  'prefix': cleanup_prefix,
                   'got_exceptions': self.GOT_EXCEPTIONS}
         LOG.info("Processing global services")
         for service in self.global_services:
@@ -206,6 +236,7 @@
         project_id = project['id']
         project_name = project['name']
         project_data = None
+        cleanup_prefix = self.options.prefix
         if is_dry_run:
             project_data = dry_run_data["_projects_to_clean"][project_id] = {}
             project_data['name'] = project_name
@@ -216,6 +247,7 @@
                   'is_preserve': is_preserve,
                   'is_save_state': False,
                   'project_id': project_id,
+                  'prefix': cleanup_prefix,
                   'got_exceptions': self.GOT_EXCEPTIONS}
         for service in self.project_associated_services:
             svc = service(self.admin_mgr, **kwargs)
@@ -243,10 +275,26 @@
                             help="Generate JSON file:" + DRY_RUN_JSON +
                             ", that reports the objects that would have "
                             "been deleted had a full cleanup been run.")
+        parser.add_argument('--prefix', dest='prefix', default=None,
+                            help="Only resources that match the prefix will "
+                            "be deleted (resources in saved_state.json are "
+                            "not taken into account). All tempest resources "
+                            "are created with the prefix value set by "
+                            "resource_name_prefix in tempest.conf, default "
+                            "prefix is tempest. Note that some resources are "
+                            "not named thus they will not be deleted when "
+                            "filtering based on the prefix. This opt will be "
+                            "ignored when --init-saved-state is used so that "
+                            "it can capture the true init state - all "
+                            "resources present at that moment.")
         return parser
 
     def get_description(self):
-        return 'Cleanup after tempest run'
+        return ('tempest cleanup tool, read the full documentation before '
+                'using this tool. We advice not to run it on production '
+                'environments. On environments where also other users may '
+                'create resources, we strongly advice using --dry-run '
+                'argument first and verify the content of dry_run.json file.')
 
     def _init_state(self):
         LOG.info("Initializing saved state.")
@@ -257,6 +305,10 @@
                   'saved_state_json': data,
                   'is_preserve': False,
                   'is_save_state': True,
+                  # must be None as we want to capture true init state
+                  # (all resources present) thus no filtering based
+                  # on the prefix
+                  'prefix': None,
                   'got_exceptions': self.GOT_EXCEPTIONS}
         for service in self.global_services:
             svc = service(admin_mgr, **kwargs)
diff --git a/tempest/cmd/cleanup_service.py b/tempest/cmd/cleanup_service.py
index f2370f3..8651ab0 100644
--- a/tempest/cmd/cleanup_service.py
+++ b/tempest/cmd/cleanup_service.py
@@ -115,6 +115,16 @@
         return [item for item in item_list
                 if item['tenant_id'] == self.tenant_id]
 
+    def _filter_by_prefix(self, item_list):
+        items = [item for item in item_list
+                 if item['name'].startswith(self.prefix)]
+        return items
+
+    def _filter_out_ids_from_saved(self, item_list, attr):
+        items = [item for item in item_list if item['id']
+                 not in self.saved_state_json[attr].keys()]
+        return items
+
     def list(self):
         pass
 
@@ -156,10 +166,11 @@
     def list(self):
         client = self.client
         snaps = client.list_snapshots()['snapshots']
-        if not self.is_save_state:
+        if self.prefix:
+            snaps = self._filter_by_prefix(snaps)
+        elif not self.is_save_state:
             # recreate list removing saved snapshots
-            snaps = [snap for snap in snaps if snap['id']
-                     not in self.saved_state_json['snapshots'].keys()]
+            snaps = self._filter_out_ids_from_saved(snaps, 'snapshots')
         LOG.debug("List count, %s Snapshots", len(snaps))
         return snaps
 
@@ -194,10 +205,11 @@
         client = self.client
         servers_body = client.list_servers()
         servers = servers_body['servers']
-        if not self.is_save_state:
+        if self.prefix:
+            servers = self._filter_by_prefix(servers)
+        elif not self.is_save_state:
             # recreate list removing saved servers
-            servers = [server for server in servers if server['id']
-                       not in self.saved_state_json['servers'].keys()]
+            servers = self._filter_out_ids_from_saved(servers, 'servers')
         LOG.debug("List count, %s Servers", len(servers))
         return servers
 
@@ -227,10 +239,11 @@
     def list(self):
         client = self.server_groups_client
         sgs = client.list_server_groups()['server_groups']
-        if not self.is_save_state:
+        if self.prefix:
+            sgs = self._filter_by_prefix(sgs)
+        elif not self.is_save_state:
             # recreate list removing saved server_groups
-            sgs = [sg for sg in sgs if sg['id']
-                   not in self.saved_state_json['server_groups'].keys()]
+            sgs = self._filter_out_ids_from_saved(sgs, 'server_groups')
         LOG.debug("List count, %s Server Groups", len(sgs))
         return sgs
 
@@ -263,7 +276,9 @@
     def list(self):
         client = self.client
         keypairs = client.list_keypairs()['keypairs']
-        if not self.is_save_state:
+        if self.prefix:
+            keypairs = self._filter_by_prefix(keypairs)
+        elif not self.is_save_state:
             # recreate list removing saved keypairs
             keypairs = [keypair for keypair in keypairs
                         if keypair['keypair']['name']
@@ -302,10 +317,11 @@
     def list(self):
         client = self.client
         vols = client.list_volumes()['volumes']
-        if not self.is_save_state:
+        if self.prefix:
+            vols = self._filter_by_prefix(vols)
+        elif not self.is_save_state:
             # recreate list removing saved volumes
-            vols = [vol for vol in vols if vol['id']
-                    not in self.saved_state_json['volumes'].keys()]
+            vols = self._filter_out_ids_from_saved(vols, 'volumes')
         LOG.debug("List count, %s Volumes", len(vols))
         return vols
 
@@ -336,6 +352,10 @@
         self.client = manager.volume_quotas_client_latest
 
     def delete(self):
+        if self.prefix:
+            # this means we're cleaning resources based on a certain prefix,
+            # this resource doesn't have a name, therefore do nothing
+            return
         client = self.client
         try:
             LOG.debug("Deleting Volume Quotas for project with id %s",
@@ -346,6 +366,10 @@
                           self.project_id)
 
     def dry_run(self):
+        if self.prefix:
+            # this means we're cleaning resources based on a certain prefix,
+            # this resource doesn't have a name, therefore do nothing
+            return
         quotas = self.client.show_quota_set(
             self.project_id, params={'usage': True})['quota_set']
         self.data['volume_quotas'] = quotas
@@ -358,6 +382,10 @@
         self.limits_client = manager.limits_client
 
     def delete(self):
+        if self.prefix:
+            # this means we're cleaning resources based on a certain prefix,
+            # this resource doesn't have a name, therefore do nothing
+            return
         client = self.client
         try:
             LOG.debug("Deleting Nova Quotas for project with id %s",
@@ -368,6 +396,10 @@
                           self.project_id)
 
     def dry_run(self):
+        if self.prefix:
+            # this means we're cleaning resources based on a certain prefix,
+            # this resource doesn't have a name, therefore do nothing
+            return
         client = self.limits_client
         quotas = client.show_limits()['limits']
         self.data['compute_quotas'] = quotas['absolute']
@@ -379,6 +411,10 @@
         self.client = manager.network_quotas_client
 
     def delete(self):
+        if self.prefix:
+            # this means we're cleaning resources based on a certain prefix,
+            # this resource doesn't have a name, therefore do nothing
+            return
         client = self.client
         try:
             LOG.debug("Deleting Network Quotas for project with id %s",
@@ -389,6 +425,10 @@
                           self.project_id)
 
     def dry_run(self):
+        if self.prefix:
+            # this means we're cleaning resources based on a certain prefix,
+            # this resource doesn't have a name, therefore do nothing
+            return
         resp = [quota for quota in self.client.list_quotas()['quotas']
                 if quota['project_id'] == self.project_id]
         self.data['network_quotas'] = resp
@@ -422,11 +462,13 @@
         client = self.networks_client
         networks = client.list_networks(**self.tenant_filter)
         networks = networks['networks']
-
-        if not self.is_save_state:
-            # recreate list removing saved networks
-            networks = [network for network in networks if network['id']
-                        not in self.saved_state_json['networks'].keys()]
+        if self.prefix:
+            networks = self._filter_by_prefix(networks)
+        else:
+            if not self.is_save_state:
+                # recreate list removing saved networks
+                networks = self._filter_out_ids_from_saved(
+                    networks, 'networks')
         # filter out networks declared in tempest.conf
         if self.is_preserve:
             networks = [network for network in networks
@@ -458,14 +500,17 @@
 class NetworkFloatingIpService(BaseNetworkService):
 
     def list(self):
+        if self.prefix:
+            # this means we're cleaning resources based on a certain prefix,
+            # this resource doesn't have a name, therefore return empty list
+            return []
         client = self.floating_ips_client
         flips = client.list_floatingips(**self.tenant_filter)
         flips = flips['floatingips']
 
         if not self.is_save_state:
             # recreate list removing saved flips
-            flips = [flip for flip in flips if flip['id']
-                     not in self.saved_state_json['floatingips'].keys()]
+            flips = self._filter_out_ids_from_saved(flips, 'floatingips')
         LOG.debug("List count, %s Network Floating IPs", len(flips))
         return flips
 
@@ -498,15 +543,15 @@
         client = self.routers_client
         routers = client.list_routers(**self.tenant_filter)
         routers = routers['routers']
-
-        if not self.is_save_state:
-            # recreate list removing saved routers
-            routers = [router for router in routers if router['id']
-                       not in self.saved_state_json['routers'].keys()]
+        if self.prefix:
+            routers = self._filter_by_prefix(routers)
+        else:
+            if not self.is_save_state:
+                # recreate list removing saved routers
+                routers = self._filter_out_ids_from_saved(routers, 'routers')
         if self.is_preserve:
             routers = [router for router in routers
                        if router['id'] != CONF_PUB_ROUTER]
-
         LOG.debug("List count, %s Routers", len(routers))
         return routers
 
@@ -547,15 +592,19 @@
 class NetworkMeteringLabelRuleService(NetworkService):
 
     def list(self):
+        if self.prefix:
+            # this means we're cleaning resources based on a certain prefix,
+            # this resource doesn't have a name, therefore return empty list
+            return []
         client = self.metering_label_rules_client
         rules = client.list_metering_label_rules()
         rules = rules['metering_label_rules']
         rules = self._filter_by_tenant_id(rules)
 
         if not self.is_save_state:
-            saved_rules = self.saved_state_json['metering_label_rules'].keys()
+            rules = self._filter_out_ids_from_saved(
+                rules, 'metering_label_rules')
             # recreate list removing saved rules
-            rules = [rule for rule in rules if rule['id'] not in saved_rules]
         LOG.debug("List count, %s Metering Label Rules", len(rules))
         return rules
 
@@ -589,11 +638,12 @@
         labels = client.list_metering_labels()
         labels = labels['metering_labels']
         labels = self._filter_by_tenant_id(labels)
-
-        if not self.is_save_state:
+        if self.prefix:
+            labels = self._filter_by_prefix(labels)
+        elif not self.is_save_state:
             # recreate list removing saved labels
-            labels = [label for label in labels if label['id']
-                      not in self.saved_state_json['metering_labels'].keys()]
+            labels = self._filter_out_ids_from_saved(
+                labels, 'metering_labels')
         LOG.debug("List count, %s Metering Labels", len(labels))
         return labels
 
@@ -627,14 +677,14 @@
                  client.list_ports(**self.tenant_filter)['ports']
                  if port["device_owner"] == "" or
                  port["device_owner"].startswith("compute:")]
-
-        if not self.is_save_state:
-            # recreate list removing saved ports
-            ports = [port for port in ports if port['id']
-                     not in self.saved_state_json['ports'].keys()]
+        if self.prefix:
+            ports = self._filter_by_prefix(ports)
+        else:
+            if not self.is_save_state:
+                # recreate list removing saved ports
+                ports = self._filter_out_ids_from_saved(ports, 'ports')
         if self.is_preserve:
             ports = self._filter_by_conf_networks(ports)
-
         LOG.debug("List count, %s Ports", len(ports))
         return ports
 
@@ -667,16 +717,18 @@
         secgroups = [secgroup for secgroup in
                      client.list_security_groups(**filter)['security_groups']
                      if secgroup['name'] != 'default']
-
-        if not self.is_save_state:
-            # recreate list removing saved security_groups
-            secgroups = [secgroup for secgroup in secgroups if secgroup['id']
-                         not in self.saved_state_json['security_groups'].keys()
-                         ]
+        if self.prefix:
+            secgroups = self._filter_by_prefix(secgroups)
+        else:
+            if not self.is_save_state:
+                # recreate list removing saved security_groups
+                secgroups = self._filter_out_ids_from_saved(
+                    secgroups, 'security_groups')
         if self.is_preserve:
-            secgroups = [secgroup for secgroup in secgroups
-                         if secgroup['security_group_rules'][0]['project_id']
-                         not in CONF_PROJECTS]
+            secgroups = [
+                secgroup for secgroup in secgroups
+                if secgroup['security_group_rules'][0]['project_id']
+                not in CONF_PROJECTS]
         LOG.debug("List count, %s security_groups", len(secgroups))
         return secgroups
 
@@ -708,10 +760,12 @@
         client = self.subnets_client
         subnets = client.list_subnets(**self.tenant_filter)
         subnets = subnets['subnets']
-        if not self.is_save_state:
-            # recreate list removing saved subnets
-            subnets = [subnet for subnet in subnets if subnet['id']
-                       not in self.saved_state_json['subnets'].keys()]
+        if self.prefix:
+            subnets = self._filter_by_prefix(subnets)
+        else:
+            if not self.is_save_state:
+                # recreate list removing saved subnets
+                subnets = self._filter_out_ids_from_saved(subnets, 'subnets')
         if self.is_preserve:
             subnets = self._filter_by_conf_networks(subnets)
         LOG.debug("List count, %s Subnets", len(subnets))
@@ -743,10 +797,12 @@
     def list(self):
         client = self.subnetpools_client
         pools = client.list_subnetpools(**self.tenant_filter)['subnetpools']
-        if not self.is_save_state:
-            # recreate list removing saved subnet pools
-            pools = [pool for pool in pools if pool['id']
-                     not in self.saved_state_json['subnetpools'].keys()]
+        if self.prefix:
+            pools = self._filter_by_prefix(pools)
+        else:
+            if not self.is_save_state:
+                # recreate list removing saved subnet pools
+                pools = self._filter_out_ids_from_saved(pools, 'subnetpools')
         if self.is_preserve:
             pools = [pool for pool in pools if pool['project_id']
                      not in CONF_PROJECTS]
@@ -782,11 +838,15 @@
         self.client = manager.regions_client
 
     def list(self):
+        if self.prefix:
+            # this means we're cleaning resources based on a certain prefix,
+            # this resource doesn't have a name, therefore return empty list
+            return []
         client = self.client
         regions = client.list_regions()
         if not self.is_save_state:
-            regions = [region for region in regions['regions'] if region['id']
-                       not in self.saved_state_json['regions'].keys()]
+            regions = self._filter_out_ids_from_saved(
+                regions['regions'], 'regions')
             LOG.debug("List count, %s Regions", len(regions))
             return regions
         else:
@@ -824,11 +884,12 @@
     def list(self):
         client = self.client
         flavors = client.list_flavors({"is_public": None})['flavors']
-        if not self.is_save_state:
-            # recreate list removing saved flavors
-            flavors = [flavor for flavor in flavors if flavor['id']
-                       not in self.saved_state_json['flavors'].keys()]
-
+        if self.prefix:
+            flavors = self._filter_by_prefix(flavors)
+        else:
+            if not self.is_save_state:
+                # recreate list removing saved flavors
+                flavors = self._filter_out_ids_from_saved(flavors, 'flavors')
         if self.is_preserve:
             flavors = [flavor for flavor in flavors
                        if flavor['id'] not in CONF_FLAVORS]
@@ -871,10 +932,11 @@
             marker = urllib.parse_qs(parsed.query)['marker'][0]
             response = client.list_images(params={"marker": marker})
             images.extend(response['images'])
-
-        if not self.is_save_state:
-            images = [image for image in images if image['id']
-                      not in self.saved_state_json['images'].keys()]
+        if self.prefix:
+            images = self._filter_by_prefix(images)
+        else:
+            if not self.is_save_state:
+                images = self._filter_out_ids_from_saved(images, 'images')
         if self.is_preserve:
             images = [image for image in images
                       if image['id'] not in CONF_IMAGES]
@@ -910,19 +972,17 @@
 
     def list(self):
         users = self.client.list_users()['users']
-
-        if not self.is_save_state:
-            users = [user for user in users if user['id']
-                     not in self.saved_state_json['users'].keys()]
-
+        if self.prefix:
+            users = self._filter_by_prefix(users)
+        else:
+            if not self.is_save_state:
+                users = self._filter_out_ids_from_saved(users, 'users')
         if self.is_preserve:
             users = [user for user in users if user['name']
                      not in CONF_USERS]
-
         elif not self.is_save_state:  # Never delete admin user
             users = [user for user in users if user['name'] !=
                      CONF.auth.admin_username]
-
         LOG.debug("List count, %s Users after reconcile", len(users))
         return users
 
@@ -955,13 +1015,14 @@
     def list(self):
         try:
             roles = self.client.list_roles()['roles']
-            # reconcile roles with saved state and never list admin role
-            if not self.is_save_state:
-                roles = [role for role in roles if
-                         (role['id'] not in
-                          self.saved_state_json['roles'].keys() and
-                          role['name'] != CONF.identity.admin_role)]
-                LOG.debug("List count, %s Roles after reconcile", len(roles))
+            if self.prefix:
+                roles = self._filter_by_prefix(roles)
+            elif not self.is_save_state:
+                # reconcile roles with saved state and never list admin role
+                roles = self._filter_out_ids_from_saved(roles, 'roles')
+                roles = [role for role in roles
+                         if role['name'] != CONF.identity.admin_role]
+            LOG.debug("List count, %s Roles after reconcile", len(roles))
             return roles
         except Exception:
             LOG.exception("Cannot retrieve Roles.")
@@ -995,18 +1056,17 @@
 
     def list(self):
         projects = self.client.list_projects()['projects']
-        if not self.is_save_state:
-            project_ids = self.saved_state_json['projects']
-            projects = [project
-                        for project in projects
-                        if (project['id'] not in project_ids and
-                            project['name'] != CONF.auth.admin_project_name)]
-
+        if self.prefix:
+            projects = self._filter_by_prefix(projects)
+        else:
+            if not self.is_save_state:
+                projects = self._filter_out_ids_from_saved(
+                    projects, 'projects')
+                projects = [project for project in projects
+                            if project['name'] != CONF.auth.admin_project_name]
         if self.is_preserve:
-            projects = [project
-                        for project in projects
+            projects = [project for project in projects
                         if project['name'] not in CONF_PROJECTS]
-
         LOG.debug("List count, %s Projects after reconcile", len(projects))
         return projects
 
@@ -1039,10 +1099,10 @@
     def list(self):
         client = self.client
         domains = client.list_domains()['domains']
-        if not self.is_save_state:
-            domains = [domain for domain in domains if domain['id']
-                       not in self.saved_state_json['domains'].keys()]
-
+        if self.prefix:
+            domains = self._filter_by_prefix(domains)
+        elif not self.is_save_state:
+            domains = self._filter_out_ids_from_saved(domains, 'domains')
         LOG.debug("List count, %s Domains after reconcile", len(domains))
         return domains
 
diff --git a/tempest/cmd/run.py b/tempest/cmd/run.py
index 2669ff7..e305646 100644
--- a/tempest/cmd/run.py
+++ b/tempest/cmd/run.py
@@ -269,6 +269,8 @@
                 return_code = commands.run_command(
                     **params, blacklist_file=ex_list,
                     whitelist_file=in_list, black_regex=ex_regex)
+            if parsed_args.slowest:
+                commands.slowest_command()
             if return_code > 0:
                 sys.exit(return_code)
         return return_code
@@ -392,6 +394,9 @@
                             help='Combine the output of this run with the '
                                  "previous run's as a combined stream in the "
                                  "stestr repository after it finish")
+        parser.add_argument('--slowest', action='store_true',
+                            help='Show the longest running tests in the '
+                                 'stestr repository after it finishes')
 
         parser.set_defaults(parallel=True)
         return parser
diff --git a/tempest/common/compute.py b/tempest/common/compute.py
index 53d44f1..a8aafe9 100644
--- a/tempest/common/compute.py
+++ b/tempest/common/compute.py
@@ -196,7 +196,8 @@
     """
 
     if name is None:
-        name = data_utils.rand_name(__name__ + "-instance")
+        name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name=__name__ + "-instance")
     if flavor is None:
         flavor = CONF.compute.flavor_ref
     if image_id is None:
@@ -245,7 +246,8 @@
             kwargs['user_data'] = script_b64
 
     if volume_backed:
-        volume_name = data_utils.rand_name(__name__ + '-volume')
+        volume_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name=__name__ + '-volume')
         volumes_client = clients.volumes_client_latest
         params = {'name': volume_name,
                   'imageRef': image_id,
@@ -375,19 +377,22 @@
                                  is configured not to offload server
                                  automatically after offload time.
     """
-    servers_client.shelve_server(server_id)
+    body = servers_client.shelve_server(server_id)
+    request_id = body.response['x-openstack-request-id']
 
     offload_time = CONF.compute.shelved_offload_time
     if offload_time >= 0:
         waiters.wait_for_server_status(servers_client, server_id,
                                        'SHELVED_OFFLOADED',
-                                       extra_timeout=offload_time)
+                                       extra_timeout=offload_time,
+                                       request_id=request_id)
     else:
         waiters.wait_for_server_status(servers_client, server_id, 'SHELVED')
         if force_shelve_offload:
             servers_client.shelve_offload_server(server_id)
             waiters.wait_for_server_status(servers_client, server_id,
-                                           'SHELVED_OFFLOADED')
+                                           'SHELVED_OFFLOADED',
+                                           request_id=request_id)
 
 
 def create_websocket(url):
diff --git a/tempest/common/object_storage.py b/tempest/common/object_storage.py
new file mode 100644
index 0000000..7ffdc42
--- /dev/null
+++ b/tempest/common/object_storage.py
@@ -0,0 +1,64 @@
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from oslo_log import log
+
+from tempest import config
+from tempest.lib import exceptions as lib_exc
+
+CONF = config.CONF
+LOG = log.getLogger(__name__)
+
+
+def delete_containers(containers, container_client, object_client):
+    """Remove containers and all objects in them.
+
+    The containers should be visible from the container_client given.
+    Will not throw any error if the containers don't exist.
+
+    :param containers: List of containers(or string of a container)
+                       to be deleted
+    :param container_client: Client to be used to delete containers
+    :param object_client: Client to be used to delete objects
+    """
+    if isinstance(containers, str):
+        containers = [containers]
+
+    for cont in containers:
+        try:
+            delete_objects(cont, container_client, object_client)
+            container_client.delete_container(cont)
+            container_client.wait_for_resource_deletion(cont)
+        except lib_exc.NotFound:
+            LOG.warning(f"Container {cont} wasn't deleted as it wasn't found.")
+
+
+def delete_objects(container, container_client, object_client):
+    """Remove all objects from container.
+
+    Will not throw any error if the objects do not exist
+
+    :param container: Name of the container that contains the objects to be
+                      deleted
+    :param container_client: Client to be used to list objects in
+                             the container
+    :param object_client: Client to be used to delete objects
+    """
+    params = {'limit': 9999, 'format': 'json'}
+    _, objlist = container_client.list_container_objects(container, params)
+
+    for obj in objlist:
+        try:
+            object_client.delete_object(container, obj['name'])
+            object_client.wait_for_resource_deletion(obj['name'], container)
+        except lib_exc.NotFound:
+            LOG.warning(f"Object {obj} wasn't deleted as it wasn't found.")
diff --git a/tempest/common/waiters.py b/tempest/common/waiters.py
index d3be6fd..ddc6047 100644
--- a/tempest/common/waiters.py
+++ b/tempest/common/waiters.py
@@ -311,6 +311,36 @@
     raise lib_exc.TimeoutException(message)
 
 
+def wait_for_image_deleted_from_store(client, image, available_stores,
+                                      image_store_deleted):
+    """Waits for an image to be deleted from specific store.
+
+    API will not allow deletion of the last location for an image.
+    This return image if image deleted from store.
+    """
+
+    # Check if image have last store location
+    if len(available_stores) == 1:
+        exc_cls = lib_exc.OtherRestClientException
+        message = ('Delete from last store location not allowed'
+                   % (image, image_store_deleted))
+        raise exc_cls(message)
+    start = int(time.time())
+    while int(time.time()) - start < client.build_timeout:
+        image = client.show_image(image['id'])
+        image_stores = image['stores'].split(",")
+        if image_store_deleted not in image_stores:
+            return
+        time.sleep(client.build_interval)
+    message = ('Failed to delete %s from requested store location: %s '
+               'within the required time: (%s s)' %
+               (image, image_store_deleted, client.build_timeout))
+    caller = test_utils.find_test_caller()
+    if caller:
+        message = '(%s) %s' % (caller, message)
+    raise exc_cls(message)
+
+
 def wait_for_volume_resource_status(client, resource_id, status,
                                     server_id=None, servers_client=None):
     """Waits for a volume resource to reach a given status.
diff --git a/tempest/config.py b/tempest/config.py
index 99e530e..1445773 100644
--- a/tempest/config.py
+++ b/tempest/config.py
@@ -126,9 +126,11 @@
                default=None,
                help='Specify a CA bundle file to use in verifying a '
                     'TLS (https) server certificate.'),
-    cfg.StrOpt('uri',
+    cfg.URIOpt('uri',
+               schemes=['http', 'https'],
                help="Full URI of the OpenStack Identity API (Keystone), v2"),
-    cfg.StrOpt('uri_v3',
+    cfg.URIOpt('uri_v3',
+               schemes=['http', 'https'],
                help='Full URI of the OpenStack Identity API (Keystone), v3'),
     cfg.StrOpt('auth_version',
                default='v3',
@@ -263,23 +265,11 @@
                 default=False,
                 help='Does the environment have the security compliance '
                      'settings enabled?'),
-    cfg.BoolOpt('project_tags',
-                default=True,
-                help='Is the project tags identity v3 API available?',
-                deprecated_for_removal=True,
-                deprecated_reason='Project tags API is a default feature '
-                                  'since Queens'),
-    cfg.BoolOpt('application_credentials',
-                default=True,
-                help='Does the environment have application credentials '
-                     'enabled?',
-                deprecated_for_removal=True,
-                deprecated_reason='Application credentials is a default '
-                                  'feature since Queens'),
-    # Access rules for application credentials is a default feature in Train.
-    # This config option can removed once Stein is EOL.
     cfg.BoolOpt('access_rules',
-                default=False,
+                default=True,
+                deprecated_for_removal=True,
+                deprecated_reason='Access rules for application credentials '
+                                  'is a default feature since Train',
                 help='Does the environment have access rules enabled?'),
     cfg.BoolOpt('immutable_user_source',
                 default=False,
@@ -405,6 +395,17 @@
                     'allow_availability_zone_fallback=False in cinder.conf), '
                     'the volume create request will fail and the instance '
                     'will fail the build request.'),
+    cfg.StrOpt('migration_source_host',
+               default=None,
+               help="Specify source host for live-migration, cold-migration"
+                    " and resize tests. If option is not set tests will use"
+                    " host automatically."),
+    cfg.StrOpt('migration_dest_host',
+               default=None,
+               help="Specify destination host for live-migration and cold"
+                    " migration. If option is not set tests will use host"
+                    " automatically."),
+
 ]
 
 placement_group = cfg.OptGroup(name='placement',
@@ -501,18 +502,6 @@
                 default=False,
                 help="Does the test environment use block devices for live "
                      "migration"),
-    cfg.BoolOpt('block_migrate_cinder_iscsi',
-                default=False,
-                help="Does the test environment support block migration with "
-                "Cinder iSCSI volumes. Note: libvirt >= 1.2.17 is required "
-                "to support this if using the libvirt compute driver.",
-                deprecated_for_removal=True,
-                deprecated_reason='This option duplicates the more generic '
-                                  '[compute-feature-enabled]/block_migration '
-                                  '_for_live_migration now that '
-                                  'MIN_LIBVIRT_VERSION is >= 1.2.17 on all '
-                                  'branches from stable/rocky and will be '
-                                  'removed in a future release.'),
     cfg.BoolOpt('can_migrate_between_any_hosts',
                 default=True,
                 help="Does the test environment support migrating between "
@@ -523,15 +512,6 @@
                 default=False,
                 help='Enable VNC console. This configuration value should '
                      'be same as nova.conf: vnc.enabled'),
-    cfg.StrOpt('vnc_server_header',
-               default='WebSockify',
-               help='Expected VNC server name (WebSockify, nginx, etc) '
-                    'in response header.',
-               deprecated_for_removal=True,
-               deprecated_reason='This option will be ignored because the '
-                                 'usage of different response header fields '
-                                 'to accomplish the same goal (in accordance '
-                                 'with RFC7231 S6.2.2) makes it obsolete.'),
     cfg.BoolOpt('spice_console',
                 default=False,
                 help='Enable Spice console. This configuration value should '
@@ -540,14 +520,6 @@
                 deprecated_reason="This config option is not being used "
                                   "in Tempest, we can add it back when "
                                   "adding the test cases."),
-    cfg.BoolOpt('rdp_console',
-                default=False,
-                help='Enable RDP console. This configuration value should '
-                     'be same as nova.conf: rdp.enabled',
-                deprecated_for_removal=True,
-                deprecated_reason="This config option is not being used "
-                                  "in Tempest, we can add it back when "
-                                  "adding the test cases."),
     cfg.BoolOpt('serial_console',
                 default=False,
                 help='Enable serial console. This configuration value '
@@ -575,13 +547,6 @@
                 default=True,
                 help='Does the test environment support creating snapshot '
                      'images of running instances?'),
-    cfg.BoolOpt('nova_cert',
-                default=False,
-                help='Does the test environment have the nova cert running?',
-                deprecated_for_removal=True,
-                deprecated_reason="On Nova side, the nova-cert service is "
-                                  "deprecated and the service will be removed "
-                                  "as early as Ocata."),
     cfg.BoolOpt('personality',
                 default=False,
                 help='Does the test environment support server personality'),
@@ -801,13 +766,6 @@
                default=1,
                help="Time in seconds between network operation status "
                     "checks."),
-    cfg.ListOpt('dns_servers',
-                default=["8.8.8.8", "8.8.4.4"],
-                help="List of dns servers which should be used"
-                     " for subnet creation",
-                deprecated_for_removal=True,
-                deprecated_reason="This config option is no longer "
-                                  "used anywhere, so it can be removed."),
     cfg.StrOpt('port_vnic_type',
                choices=[None, 'normal', 'direct', 'macvtap', 'direct-physical',
                         'baremetal', 'virtio-forwarder'],
@@ -883,8 +841,9 @@
                                title="Dashboard options")
 
 DashboardGroup = [
-    cfg.StrOpt('dashboard_url',
+    cfg.URIOpt('dashboard_url',
                default='http://localhost/',
+               schemes=['http', 'https'],
                help="Where the dashboard can be found"),
     cfg.BoolOpt('disable_ssl_certificate_validation',
                 default=False,
@@ -909,10 +868,11 @@
                 help='Enable/disable security group rules.'),
     cfg.StrOpt('connect_method',
                default='floating',
-               choices=['fixed', 'floating'],
-               help='Default IP type used for validation: '
-                    '-fixed: uses the first IP belonging to the fixed network '
-                    '-floating: creates and uses a floating IP'),
+               choices=[('fixed',
+                         'uses the first IP belonging to the fixed network'),
+                        ('floating',
+                         'creates and uses a floating IP')],
+               help='Default IP type used for validation'),
     cfg.StrOpt('auth_method',
                default='keypair',
                choices=['keypair'],
@@ -1005,6 +965,13 @@
                choices=['public', 'admin', 'internal',
                         'publicURL', 'adminURL', 'internalURL'],
                help="The endpoint type to use for the volume service."),
+    cfg.StrOpt('backup_driver',
+               default='ceph',
+               choices=['ceph', 'swift', 'nfs', 'glusterfs', 'posix', 'google',
+                        's3'],
+               help="What kind of backup_driver does cinder use?"
+                    "https://docs.openstack.org/cinder/latest/configuration/"
+                    "block-storage/backup-drivers.html"),
     cfg.ListOpt('backend_names',
                 default=['BACKEND_1', 'BACKEND_2'],
                 help='A list of backend names separated by comma. '
@@ -1347,6 +1314,13 @@
  $ stestr run --pdb TEST_ID
 or
  $ python -m testtools.run TEST_ID"""),
+    cfg.StrOpt('resource_name_prefix',
+               default='tempest',
+               help="Define the prefix name for the resources created by "
+                    "tempest. Tempest cleanup CLI will use this config option "
+                    "to cleanup only the resources that match the prefix. "
+                    "Make sure this prefix does not match with the resource "
+                    "name you do not want Tempest cleanup CLI to delete."),
 ]
 
 _opts = [
diff --git a/tempest/lib/cli/base.py b/tempest/lib/cli/base.py
index c9cffd2..c308c30 100644
--- a/tempest/lib/cli/base.py
+++ b/tempest/lib/cli/base.py
@@ -374,12 +374,13 @@
         :param merge_stderr:  if True the stderr buffer is merged into stdout
         :type merge_stderr: boolean
         """
-        creds = ('--os-username %s --os-project-name %s --os-password %s '
+        creds = ('--os-username %s --os-password %s '
                  '--os-auth-url %s' %
                  (self.username,
-                  self.tenant_name,
                   self.password,
                   self.uri))
+        if self.tenant_name is not None:
+            creds += ' --os-project-name %s' % self.tenant_name
         if self.identity_api_version:
             if cmd not in self.CLIENTS_WITHOUT_IDENTITY_VERSION:
                 creds += ' --os-identity-api-version %s' % (
diff --git a/tempest/lib/common/utils/test_utils.py b/tempest/lib/common/utils/test_utils.py
index c79db15..7b85dec 100644
--- a/tempest/lib/common/utils/test_utils.py
+++ b/tempest/lib/common/utils/test_utils.py
@@ -93,7 +93,7 @@
             if attempt >= 3:
                 raise
             LOG.warning('Got ServerFault while running %s, retrying...', func)
-            time.sleep(1)
+            time.sleep(5)
 
 
 def call_until_true(func, duration, sleep_for, *args, **kwargs):
diff --git a/tempest/lib/services/image/v2/images_client.py b/tempest/lib/services/image/v2/images_client.py
index 8460b57..0608d47 100644
--- a/tempest/lib/services/image/v2/images_client.py
+++ b/tempest/lib/services/image/v2/images_client.py
@@ -292,3 +292,15 @@
         resp, _ = self.delete(url)
         self.expected_success(204, resp.status)
         return rest_client.ResponseBody(resp)
+
+    def delete_image_from_store(self, image_id, store_name):
+        """Delete image from store
+
+        For a full list of available parameters,
+        please refer to the official API reference:
+        https://docs.openstack.org/api-ref/image/v2/#delete-image-from-store
+        """
+        url = 'stores/%s/%s' % (store_name, image_id)
+        resp, _ = self.delete(url)
+        self.expected_success(204, resp.status)
+        return rest_client.ResponseBody(resp)
diff --git a/tempest/scenario/README.rst b/tempest/scenario/README.rst
index efcd139..6c51f22 100644
--- a/tempest/scenario/README.rst
+++ b/tempest/scenario/README.rst
@@ -7,14 +7,14 @@
 What are these tests?
 ---------------------
 
-Scenario tests are "through path" tests of OpenStack
-function. Complicated setups where one part might depend on completion
+Scenario tests are "through path" tests of OpenStack function.
+Complicated setups where one part might depend on the completion
 of a previous part. They ideally involve the integration between
 multiple OpenStack services to exercise the touch points between them.
 
 Any scenario test should have a real-life use case. An example would be:
 
-- "As operator I want to start with a blank environment":
+- "As an operator, I want to start with a blank environment":
 
   1. upload a glance image
   2. deploy a vm from it
@@ -24,12 +24,14 @@
 
 Why are these tests in Tempest?
 -------------------------------
+
 This is one of Tempest's core purposes, testing the integration between
 projects.
 
 
 Scope of these tests
 --------------------
+
 Scenario tests should always use the Tempest implementation of the
 OpenStack API, as we want to ensure that bugs aren't hidden by the
 official clients.
@@ -40,6 +42,7 @@
 
 Example of a good test
 ----------------------
+
 While we are looking for interaction of 2 or more services, be
 specific in your interactions. A giant "this is my data center" smoke
 test is hard to debug when it goes wrong.
diff --git a/tempest/scenario/manager.py b/tempest/scenario/manager.py
index 5e01eb1..d51e7e5 100644
--- a/tempest/scenario/manager.py
+++ b/tempest/scenario/manager.py
@@ -16,7 +16,11 @@
 
 import copy
 import os
+import re
+import shutil
 import subprocess
+import tarfile
+import tempfile
 
 import netaddr
 
@@ -155,7 +159,8 @@
         if not client:
             client = self.ports_client
         name = data_utils.rand_name(
-            kwargs.pop('namestart', self.__class__.__name__))
+            prefix=CONF.resource_name_prefix,
+            name=kwargs.pop('namestart', self.__class__.__name__))
         if CONF.network.port_vnic_type and 'binding:vnic_type' not in kwargs:
             kwargs['binding:vnic_type'] = CONF.network.port_vnic_type
         if CONF.network.port_profile and 'binding:profile' not in kwargs:
@@ -183,7 +188,9 @@
         if not client:
             client = self.keypairs_client
         if not kwargs.get('name'):
-            kwargs['name'] = data_utils.rand_name(self.__class__.__name__)
+            kwargs['name'] = data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name=self.__class__.__name__)
         # We don't need to create a keypair by pubkey in scenario
         body = client.create_keypair(**kwargs)
         self.addCleanup(client.delete_keypair, kwargs['name'])
@@ -246,7 +253,9 @@
             clients = self.os_primary
 
         if name is None:
-            name = data_utils.rand_name(self.__class__.__name__ + "-server")
+            name = data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name=self.__class__.__name__ + "-server")
 
         vnic_type = kwargs.pop('vnic_type', CONF.network.port_vnic_type)
         profile = kwargs.pop('port_profile', CONF.network.port_profile)
@@ -370,7 +379,9 @@
             min_disk = image.get('min_disk')
             size = max(size, min_disk)
         if name is None:
-            name = data_utils.rand_name(self.__class__.__name__ + "-volume")
+            name = data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name=self.__class__.__name__ + "-volume")
         kwargs.update({'name': name,
                        'snapshot_id': snapshot_id,
                        'imageRef': imageRef,
@@ -420,7 +431,8 @@
         """
 
         name = name or data_utils.rand_name(
-            self.__class__.__name__ + "-backup")
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + "-backup")
         args = {'name': name,
                 'description': description,
                 'force': force,
@@ -429,7 +441,7 @@
                 'container': container}
         args.update(kwargs)
         backup = self.backups_client.create_backup(volume_id=volume_id,
-                                                   **kwargs)['backup']
+                                                   **args)['backup']
         self.addCleanup(self.backups_client.delete_backup, backup['id'])
         waiters.wait_for_volume_resource_status(self.backups_client,
                                                 backup['id'], 'available')
@@ -496,7 +508,8 @@
         """
 
         name = name or data_utils.rand_name(
-            self.__class__.__name__ + '-snapshot')
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-snapshot')
         snapshot = self.snapshots_client.create_snapshot(
             volume_id=volume_id,
             force=force,
@@ -557,8 +570,11 @@
             client = self.os_admin.volume_types_client_latest
         if not name:
             class_name = self.__class__.__name__
-            name = data_utils.rand_name(class_name + '-volume-type')
-        randomized_name = data_utils.rand_name('scenario-type-' + name)
+            name = data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name=class_name + '-volume-type')
+        randomized_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='scenario-type-' + name)
 
         LOG.debug("Creating a volume type: %s on backend %s",
                   randomized_name, backend_name)
@@ -613,7 +629,8 @@
             client = self.security_groups_client
         if not project_id:
             project_id = client.project_id
-        sg_name = data_utils.rand_name(namestart)
+        sg_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name=namestart)
         sg_desc = sg_name + " description"
         sg_dict = dict(name=sg_name,
                        description=sg_desc)
@@ -807,7 +824,8 @@
                   img_properties)
         if img_properties is None:
             img_properties = {}
-        name = data_utils.rand_name('%s-' % name)
+        name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='%s-' % name)
         params = {
             'name': name,
             'container_format': img_container_format,
@@ -818,6 +836,60 @@
         if img_properties:
             params.update(img_properties)
         params.update(kwargs)
+
+        # This code is basically copying the devstack code that extracts and
+        # uploads split kernel/ramdisk images.
+        if tarfile.is_tarfile(img_path):
+            extract_dir = os.path.join(tempfile.gettempdir(), 'images', name)
+            self.addCleanup(shutil.rmtree, extract_dir)
+            os.makedirs(extract_dir)
+            with tarfile.open(img_path) as tar:
+                tar.extractall(extract_dir, filter='data')
+            filenames = os.listdir(extract_dir)
+            for fname in filenames:
+                if re.search(r'(.*-vmlinuz.*|aki-.*/image$)', fname):
+                    kernel_img_path = os.path.join(extract_dir, fname)
+                elif re.search(r'(.*-initrd.*|ari-.*/image$)', fname):
+                    ramdisk_img_path = os.path.join(extract_dir, fname)
+                elif re.search(f'(.*\\.img$|ami-.*/image$)', fname):
+                    img_path = os.path.join(extract_dir, fname)
+            # Create the kernel image.
+            kparams = {
+                'name': name + '-kernel',
+                'container_format': 'aki',
+                'disk_format': 'aki',
+                'visibility': 'private'
+            }
+            body = self.image_client.create_image(**kparams)
+            image = body['image'] if 'image' in body else body
+            kernel_id = image['id']
+            self.addCleanup(self.image_client.delete_image, kernel_id)
+            self.assertEqual("queued", image['status'])
+            with open(kernel_img_path, 'rb') as image_file:
+                self.image_client.store_image_file(kernel_id, image_file)
+            LOG.debug("image:%s", kernel_id)
+            # Create the ramdisk image.
+            rparams = {
+                'name': name + '-ramdisk',
+                'container_format': 'ari',
+                'disk_format': 'ari',
+                'visibility': 'private'
+            }
+            body = self.image_client.create_image(**rparams)
+            image = body['image'] if 'image' in body else body
+            ramdisk_id = image['id']
+            self.addCleanup(self.image_client.delete_image, ramdisk_id)
+            self.assertEqual("queued", image['status'])
+            with open(ramdisk_img_path, 'rb') as image_file:
+                self.image_client.store_image_file(ramdisk_id, image_file)
+            LOG.debug("image:%s", ramdisk_id)
+            # Set the kernel_id, ramdisk_id, container format, disk format for
+            # the split image.
+            params['kernel_id'] = kernel_id
+            params['ramdisk_id'] = ramdisk_id
+            params['container_format'] = 'ami'
+            params['disk_format'] = 'ami'
+
         body = self.image_client.create_image(**params)
         image = body['image'] if 'image' in body else body
         self.addCleanup(self.image_client.delete_image, image['id'])
@@ -858,7 +930,9 @@
         # Compute client
         _images_client = self.compute_images_client
         if name is None:
-            name = data_utils.rand_name(self.__class__.__name__ + 'snapshot')
+            name = data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name=self.__class__.__name__ + 'snapshot')
         LOG.debug("Creating a snapshot image for server: %s", server['name'])
         image = _images_client.create_image(server['id'], name=name, **kwargs)
         # microversion 2.45 and above returns image_id
@@ -1298,7 +1372,8 @@
         name = kwargs.pop('name', None)
         if not name:
             namestart = self.__class__.__name__ + '-volume-origin'
-            name = data_utils.rand_name(namestart)
+            name = data_utils.rand_name(
+                prefix=CONF.resource_name_prefix, name=namestart)
         return self.create_volume(name=name, imageRef=image_id, **kwargs)
 
 
@@ -1328,7 +1403,8 @@
             networks_client = self.networks_client
         if not project_id:
             project_id = networks_client.project_id
-        name = data_utils.rand_name(namestart)
+        name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name=namestart)
         network_kwargs = dict(name=name, project_id=project_id)
         if net_dict:
             network_kwargs.update(net_dict)
@@ -1386,7 +1462,8 @@
                                         ip_version, subnets_client, **kwargs):
 
             subnet = dict(
-                name=data_utils.rand_name(namestart),
+                name=data_utils.rand_name(
+                    prefix=CONF.resource_name_prefix, name=namestart),
                 network_id=network['id'],
                 project_id=network['project_id'],
                 ip_version=ip_version,
@@ -1574,7 +1651,8 @@
             name = kwargs.pop('name', None)
             if not name:
                 namestart = self.__class__.__name__ + '-router'
-                name = data_utils.rand_name(namestart)
+                name = data_utils.rand_name(
+                    prefix=CONF.resource_name_prefix, name=namestart)
 
             ext_gw_info = kwargs.pop('external_gateway_info', None)
             if not ext_gw_info:
@@ -1732,7 +1810,7 @@
     def create_container(self, container_name=None):
         """Creates container"""
         name = container_name or data_utils.rand_name(
-            'swift-scenario-container')
+            prefix=CONF.resource_name_prefix, name='swift-scenario-container')
         self.container_client.update_container(name)
         # look for the container to assure it is created
         self.list_and_check_container_objects(name)
@@ -1749,7 +1827,8 @@
 
     def upload_object_to_container(self, container_name, obj_name=None):
         """Uploads object to container"""
-        obj_name = obj_name or data_utils.rand_name('swift-scenario-object')
+        obj_name = obj_name or data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='swift-scenario-object')
         obj_data = data_utils.random_bytes()
         self.object_client.create_object(container_name, obj_name, obj_data)
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
diff --git a/tempest/scenario/test_network_advanced_server_ops.py b/tempest/scenario/test_network_advanced_server_ops.py
index 2c7c085..3a93f74 100644
--- a/tempest/scenario/test_network_advanced_server_ops.py
+++ b/tempest/scenario/test_network_advanced_server_ops.py
@@ -28,25 +28,12 @@
 LOG = log.getLogger(__name__)
 
 
-class TestNetworkAdvancedServerOps(manager.NetworkScenarioTest):
-    """Check VM connectivity after some advanced instance operations executed:
-
-     * Stop/Start an instance
-     * Reboot an instance
-     * Rebuild an instance
-     * Pause/Unpause an instance
-     * Suspend/Resume an instance
-     * Resize an instance
-    """
-
-    @classmethod
-    def setup_clients(cls):
-        super(TestNetworkAdvancedServerOps, cls).setup_clients()
-        cls.admin_servers_client = cls.os_admin.servers_client
+class BaseTestNetworkAdvancedServerOps(manager.NetworkScenarioTest):
+    """Base class for defining methods used in tests."""
 
     @classmethod
     def skip_checks(cls):
-        super(TestNetworkAdvancedServerOps, cls).skip_checks()
+        super(BaseTestNetworkAdvancedServerOps, cls).skip_checks()
         if not (CONF.network.project_networks_reachable or
                 CONF.network.public_network_id):
             msg = ('Either project_networks_reachable must be "true", or '
@@ -56,26 +43,52 @@
             raise cls.skipException("Floating ips are not available")
 
     @classmethod
+    def setup_clients(cls):
+        super(BaseTestNetworkAdvancedServerOps, cls).setup_clients()
+        cls.admin_servers_client = cls.os_admin.servers_client
+        cls.sec_group_rules_client = \
+            cls.os_primary.security_group_rules_client
+        cls.sec_groups_client = cls.os_primary.security_groups_client
+        cls.keypairs_client = cls.os_primary.keypairs_client
+        cls.floating_ips_client = cls.os_primary.floating_ips_client
+        cls.servers_client = cls.os_primary.servers_client
+
+    @classmethod
     def setup_credentials(cls):
         # Create no network resources for these tests.
         cls.set_network_resources()
-        super(TestNetworkAdvancedServerOps, cls).setup_credentials()
+        super(BaseTestNetworkAdvancedServerOps, cls).setup_credentials()
 
-    def _setup_server(self, keypair):
+    def _setup_server(self, keypair, host_spec=None):
         security_groups = []
         if utils.is_extension_enabled('security-group', 'network'):
-            security_group = self.create_security_group()
+            sec_args = {
+                'security_group_rules_client':
+                self.sec_group_rules_client,
+                'security_groups_client':
+                self.sec_groups_client
+            }
+            security_group = self.create_security_group(**sec_args)
             security_groups = [{'name': security_group['name']}]
         network, _, _ = self.setup_network_subnet_with_router()
-        server = self.create_server(
-            networks=[{'uuid': network['id']}],
-            key_name=keypair['name'],
-            security_groups=security_groups)
+        server_args = {
+            'networks': [{'uuid': network['id']}],
+            'key_name': keypair['name'],
+            'security_groups': security_groups,
+        }
+
+        if host_spec is not None:
+            server_args['host'] = host_spec
+            # by default, host can be specified by administrators only
+            server_args['clients'] = self.os_admin
+
+        server = self.create_server(**server_args)
         return server
 
     def _setup_network(self, server, keypair):
         public_network_id = CONF.network.public_network_id
-        floating_ip = self.create_floating_ip(server, public_network_id)
+        floating_ip = self.create_floating_ip(
+            server, public_network_id, client=self.floating_ips_client)
         # Verify that we can indeed connect to the server before we mess with
         # it's state
         self._wait_server_status_and_check_network_connectivity(
@@ -107,6 +120,148 @@
         self._check_network_connectivity(server, keypair, floating_ip,
                                          username=username)
 
+    def _test_server_connectivity_resize(self, src_host=None):
+        resize_flavor = CONF.compute.flavor_ref_alt
+        keypair = self.create_keypair()
+        server = self._setup_server(keypair, src_host)
+        if src_host:
+            server_host = self.get_host_for_server(server['id'])
+            self.assertEqual(server_host, src_host)
+        floating_ip = self._setup_network(server, keypair)
+        self.servers_client.resize_server(server['id'],
+                                          flavor_ref=resize_flavor)
+        waiters.wait_for_server_status(self.servers_client, server['id'],
+                                       'VERIFY_RESIZE')
+        self.servers_client.confirm_resize_server(server['id'])
+        server = self.servers_client.show_server(server['id'])['server']
+        # Nova API > 2.46 no longer includes flavor.id, and schema check
+        # will cover whether 'id' should be in flavor
+        if server['flavor'].get('id'):
+            self.assertEqual(resize_flavor, server['flavor']['id'])
+        else:
+            flavor = self.flavors_client.show_flavor(resize_flavor)['flavor']
+            self.assertEqual(flavor['name'], server['flavor']['original_name'])
+            for key in ['ram', 'vcpus', 'disk']:
+                self.assertEqual(flavor[key], server['flavor'][key])
+        self._wait_server_status_and_check_network_connectivity(
+            server, keypair, floating_ip)
+
+    def _test_server_connectivity_cold_migration(self, source_host=None,
+                                                 dest_host=None):
+        keypair = self.create_keypair(client=self.keypairs_client)
+        server = self._setup_server(keypair, source_host)
+        floating_ip = self._setup_network(server, keypair)
+        src_host = self.get_host_for_server(server['id'])
+        if source_host:
+            self.assertEqual(src_host, source_host)
+        self._wait_server_status_and_check_network_connectivity(
+            server, keypair, floating_ip)
+
+        self.admin_servers_client.migrate_server(
+            server['id'], host=dest_host)
+        waiters.wait_for_server_status(self.servers_client, server['id'],
+                                       'VERIFY_RESIZE')
+        self.servers_client.confirm_resize_server(server['id'])
+        self._wait_server_status_and_check_network_connectivity(
+            server, keypair, floating_ip)
+        dst_host = self.get_host_for_server(server['id'])
+        if dest_host:
+            self.assertEqual(dst_host, dest_host)
+        self.assertNotEqual(src_host, dst_host)
+
+    def _test_server_connectivity_live_migration(self, source_host=None,
+                                                 dest_host=None,
+                                                 migration=False):
+        keypair = self.create_keypair(client=self.keypairs_client)
+        server = self._setup_server(keypair, source_host)
+        floating_ip = self._setup_network(server, keypair)
+        self._wait_server_status_and_check_network_connectivity(
+            server, keypair, floating_ip)
+
+        block_migration = (CONF.compute_feature_enabled.
+                           block_migration_for_live_migration)
+        src_host = self.get_host_for_server(server['id'])
+        if source_host:
+            self.assertEqual(src_host, source_host)
+
+        downtime_meter = net_downtime.NetDowntimeMeter(
+            floating_ip['floating_ip_address'])
+        self.useFixture(downtime_meter)
+
+        migration_kwargs = {'host': None, 'block_migration': block_migration}
+
+        # check if microversion is less than 2.25 because of
+        # disk_over_commit is depracted since compute api version 2.25
+        # if min_microversion is None, it runs on version < 2.25
+        if not migration and (CONF.compute.min_microversion is None or
+                              CONF.compute.min_microversion < '2.25'):
+            migration_kwargs['disk_over_commit'] = False
+
+        if dest_host:
+            migration_kwargs['host'] = dest_host
+
+        self.admin_servers_client.live_migrate_server(
+            server['id'], **migration_kwargs)
+        waiters.wait_for_server_status(self.servers_client,
+                                       server['id'], 'ACTIVE')
+
+        dst_host = self.get_host_for_server(server['id'])
+        if dest_host:
+            self.assertEqual(dst_host, dest_host)
+
+        self.assertNotEqual(src_host, dst_host, 'Server did not migrate')
+
+        # we first wait until the VM replies pings again, then check the
+        # network downtime
+        self._wait_server_status_and_check_network_connectivity(
+            server, keypair, floating_ip)
+
+        downtime = downtime_meter.get_downtime()
+        self.assertIsNotNone(downtime)
+        LOG.debug("Downtime seconds measured with downtime_meter = %r",
+                  downtime)
+        allowed_downtime = CONF.validation.allowed_network_downtime
+        self.assertLessEqual(
+            downtime, allowed_downtime,
+            "Downtime of {} seconds is higher than expected '{}'".format(
+                downtime, allowed_downtime))
+
+    def _test_server_connectivity_cold_migration_revert(self, source_host=None,
+                                                        dest_host=None):
+        keypair = self.create_keypair(client=self.keypairs_client)
+        server = self._setup_server(keypair, source_host)
+        floating_ip = self._setup_network(server, keypair)
+        src_host = self.get_host_for_server(server['id'])
+        if source_host:
+            self.assertEqual(src_host, source_host)
+        self._wait_server_status_and_check_network_connectivity(
+            server, keypair, floating_ip)
+
+        self.admin_servers_client.migrate_server(
+            server['id'], host=dest_host)
+        waiters.wait_for_server_status(self.servers_client, server['id'],
+                                       'VERIFY_RESIZE')
+        if dest_host:
+            self.assertEqual(dest_host,
+                             self.get_host_for_server(server['id']))
+        self.servers_client.revert_resize_server(server['id'])
+        self._wait_server_status_and_check_network_connectivity(
+            server, keypair, floating_ip)
+        dst_host = self.get_host_for_server(server['id'])
+
+        self.assertEqual(src_host, dst_host)
+
+
+class TestNetworkAdvancedServerOps(BaseTestNetworkAdvancedServerOps):
+    """Check VM connectivity after some advanced instance operations executed:
+
+     * Stop/Start an instance
+     * Reboot an instance
+     * Rebuild an instance
+     * Pause/Unpause an instance
+     * Suspend/Resume an instance
+    """
+
     @decorators.idempotent_id('61f1aa9a-1573-410e-9054-afa557cab021')
     @decorators.attr(type='slow')
     @utils.services('compute', 'network')
@@ -190,27 +345,7 @@
     @decorators.attr(type='slow')
     @utils.services('compute', 'network')
     def test_server_connectivity_resize(self):
-        resize_flavor = CONF.compute.flavor_ref_alt
-        keypair = self.create_keypair()
-        server = self._setup_server(keypair)
-        floating_ip = self._setup_network(server, keypair)
-        self.servers_client.resize_server(server['id'],
-                                          flavor_ref=resize_flavor)
-        waiters.wait_for_server_status(self.servers_client, server['id'],
-                                       'VERIFY_RESIZE')
-        self.servers_client.confirm_resize_server(server['id'])
-        server = self.servers_client.show_server(server['id'])['server']
-        # Nova API > 2.46 no longer includes flavor.id, and schema check
-        # will cover whether 'id' should be in flavor
-        if server['flavor'].get('id'):
-            self.assertEqual(resize_flavor, server['flavor']['id'])
-        else:
-            flavor = self.flavors_client.show_flavor(resize_flavor)['flavor']
-            self.assertEqual(flavor['name'], server['original_name'])
-            for key in ['ram', 'vcpus', 'disk']:
-                self.assertEqual(flavor[key], server['flavor'][key])
-        self._wait_server_status_and_check_network_connectivity(
-            server, keypair, floating_ip)
+        self._test_server_connectivity_resize()
 
     @decorators.idempotent_id('a4858f6c-401e-4155-9a49-d5cd053d1a2f')
     @testtools.skipUnless(CONF.compute_feature_enabled.cold_migration,
@@ -221,22 +356,7 @@
     @decorators.attr(type=['slow', 'multinode'])
     @utils.services('compute', 'network')
     def test_server_connectivity_cold_migration(self):
-        keypair = self.create_keypair()
-        server = self._setup_server(keypair)
-        floating_ip = self._setup_network(server, keypair)
-        src_host = self.get_host_for_server(server['id'])
-        self._wait_server_status_and_check_network_connectivity(
-            server, keypair, floating_ip)
-
-        self.admin_servers_client.migrate_server(server['id'])
-        waiters.wait_for_server_status(self.servers_client, server['id'],
-                                       'VERIFY_RESIZE')
-        self.servers_client.confirm_resize_server(server['id'])
-        self._wait_server_status_and_check_network_connectivity(
-            server, keypair, floating_ip)
-        dst_host = self.get_host_for_server(server['id'])
-
-        self.assertNotEqual(src_host, dst_host)
+        self._test_server_connectivity_cold_migration()
 
     @decorators.idempotent_id('03fd1562-faad-11e7-9ea0-fa163e65f5ce')
     @testtools.skipUnless(CONF.compute_feature_enabled.live_migration,
@@ -247,43 +367,7 @@
     @decorators.attr(type=['slow', 'multinode'])
     @utils.services('compute', 'network')
     def test_server_connectivity_live_migration(self):
-        keypair = self.create_keypair()
-        server = self._setup_server(keypair)
-        floating_ip = self._setup_network(server, keypair)
-        self._wait_server_status_and_check_network_connectivity(
-            server, keypair, floating_ip)
-
-        block_migration = (CONF.compute_feature_enabled.
-                           block_migration_for_live_migration)
-        old_host = self.get_host_for_server(server['id'])
-
-        downtime_meter = net_downtime.NetDowntimeMeter(
-            floating_ip['floating_ip_address'])
-        self.useFixture(downtime_meter)
-
-        self.admin_servers_client.live_migrate_server(
-            server['id'], host=None, block_migration=block_migration,
-            disk_over_commit=False)
-        waiters.wait_for_server_status(self.servers_client,
-                                       server['id'], 'ACTIVE')
-
-        new_host = self.get_host_for_server(server['id'])
-        self.assertNotEqual(old_host, new_host, 'Server did not migrate')
-
-        # we first wait until the VM replies pings again, then check the
-        # network downtime
-        self._wait_server_status_and_check_network_connectivity(
-            server, keypair, floating_ip)
-
-        downtime = downtime_meter.get_downtime()
-        self.assertIsNotNone(downtime)
-        LOG.debug("Downtime seconds measured with downtime_meter = %r",
-                  downtime)
-        allowed_downtime = CONF.validation.allowed_network_downtime
-        self.assertLessEqual(
-            downtime, allowed_downtime,
-            "Downtime of {} seconds is higher than expected '{}'".format(
-                downtime, allowed_downtime))
+        self._test_server_connectivity_live_migration()
 
     @decorators.idempotent_id('25b188d7-0183-4b1e-a11d-15840c8e2fd6')
     @testtools.skipUnless(CONF.compute_feature_enabled.cold_migration,
@@ -294,19 +378,95 @@
     @decorators.attr(type=['slow', 'multinode'])
     @utils.services('compute', 'network')
     def test_server_connectivity_cold_migration_revert(self):
-        keypair = self.create_keypair()
-        server = self._setup_server(keypair)
-        floating_ip = self._setup_network(server, keypair)
-        src_host = self.get_host_for_server(server['id'])
-        self._wait_server_status_and_check_network_connectivity(
-            server, keypair, floating_ip)
+        self._test_server_connectivity_cold_migration_revert()
 
-        self.admin_servers_client.migrate_server(server['id'])
-        waiters.wait_for_server_status(self.servers_client, server['id'],
-                                       'VERIFY_RESIZE')
-        self.servers_client.revert_resize_server(server['id'])
-        self._wait_server_status_and_check_network_connectivity(
-            server, keypair, floating_ip)
-        dst_host = self.get_host_for_server(server['id'])
 
-        self.assertEqual(src_host, dst_host)
+class TestNetworkAdvancedServerMigrationWithHost(
+    BaseTestNetworkAdvancedServerOps):
+
+    """Check VM connectivity with specifying source and destination hosts:
+
+    * Resize an instance by creating server on configured source host
+    * Migrate server by creating it on configured source host and migrate it
+        - Cold Migration
+        - Cold Migration with revert
+        - Live Migration
+    """
+    credentials = ['primary', 'admin']
+    compute_min_microversion = "2.74"
+
+    @classmethod
+    def skip_checks(cls):
+        super(TestNetworkAdvancedServerMigrationWithHost, cls).skip_checks()
+        if not (CONF.compute.migration_source_host or
+                CONF.compute.migration_dest_host):
+            raise cls.skipException("migration_source_host or "
+                                    "migration_dest_host is required")
+        if (CONF.compute.migration_source_host and
+            CONF.compute.migration_dest_host and
+            CONF.compute.migration_source_host ==
+            CONF.compute.migration_dest_host):
+            raise cls.skipException("migration_source_host and "
+                                    "migration_dest_host must be different")
+
+    @classmethod
+    def setup_clients(cls):
+        super(BaseTestNetworkAdvancedServerOps, cls).setup_clients()
+        cls.sec_group_rules_client = \
+            cls.os_admin.security_group_rules_client
+        cls.sec_groups_client = cls.os_admin.security_groups_client
+        cls.keypairs_client = cls.os_admin.keypairs_client
+        cls.floating_ips_client = cls.os_admin.floating_ips_client
+        cls.servers_client = cls.os_admin.servers_client
+        cls.admin_servers_client = cls.os_admin.servers_client
+
+    @decorators.idempotent_id('06e23934-79ae-11ee-b962-0242ac120002')
+    @testtools.skipUnless(CONF.compute_feature_enabled.resize,
+                          'Resize is not available.')
+    @decorators.attr(type='slow')
+    @utils.services('compute', 'network')
+    def test_server_connectivity_resize(self):
+        source_host = CONF.compute.migration_source_host
+        self._test_server_connectivity_resize(src_host=source_host)
+
+    @decorators.idempotent_id('14f0c9e6-79ae-11ee-b962-0242ac120002')
+    @testtools.skipUnless(CONF.compute_feature_enabled.cold_migration,
+                          'Cold migration is not available.')
+    @testtools.skipUnless(CONF.compute.min_compute_nodes > 1,
+                          'Less than 2 compute nodes, skipping multinode '
+                          'tests.')
+    @decorators.attr(type=['slow', 'multinode'])
+    @utils.services('compute', 'network')
+    def test_server_connectivity_cold_migration(self):
+        source_host = CONF.compute.migration_source_host
+        dest_host = CONF.compute.migration_dest_host
+        self._test_server_connectivity_cold_migration(
+            source_host=source_host, dest_host=dest_host)
+
+    @decorators.idempotent_id('1c13933e-79ae-11ee-b962-0242ac120002')
+    @testtools.skipUnless(CONF.compute_feature_enabled.live_migration,
+                          'Live migration is not available.')
+    @testtools.skipUnless(CONF.compute.min_compute_nodes > 1,
+                          'Less than 2 compute nodes, skipping multinode '
+                          'tests.')
+    @decorators.attr(type=['slow', 'multinode'])
+    @utils.services('compute', 'network')
+    def test_server_connectivity_live_migration(self):
+        source_host = CONF.compute.migration_source_host
+        dest_host = CONF.compute.migration_dest_host
+        self._test_server_connectivity_live_migration(
+            source_host=source_host, dest_host=dest_host, migration=True)
+
+    @decorators.idempotent_id('2627789a-79ae-11ee-b962-0242ac120002')
+    @testtools.skipUnless(CONF.compute_feature_enabled.cold_migration,
+                          'Cold migration is not available.')
+    @testtools.skipUnless(CONF.compute.min_compute_nodes > 1,
+                          'Less than 2 compute nodes, skipping multinode '
+                          'tests.')
+    @decorators.attr(type=['slow', 'multinode'])
+    @utils.services('compute', 'network')
+    def test_server_connectivity_cold_migration_revert(self):
+        source_host = CONF.compute.migration_source_host
+        dest_host = CONF.compute.migration_dest_host
+        self._test_server_connectivity_cold_migration_revert(
+            source_host=source_host, dest_host=dest_host)
diff --git a/tempest/scenario/test_network_qos_placement.py b/tempest/scenario/test_network_qos_placement.py
index 0b2cfcb..055dcb6 100644
--- a/tempest/scenario/test_network_qos_placement.py
+++ b/tempest/scenario/test_network_qos_placement.py
@@ -67,10 +67,10 @@
         cls.networks_client = cls.os_admin.networks_client
         cls.subnets_client = cls.os_admin.subnets_client
         cls.ports_client = cls.os_primary.ports_client
-        cls.routers_client = cls.os_adm.routers_client
+        cls.routers_client = cls.os_admin.routers_client
         cls.qos_client = cls.os_admin.qos_client
         cls.qos_min_bw_client = cls.os_admin.qos_min_bw_client
-        cls.flavors_client = cls.os_adm.flavors_client
+        cls.flavors_client = cls.os_admin.flavors_client
         cls.servers_client = cls.os_primary.servers_client
 
     def _create_flavor_to_resize_to(self):
@@ -113,7 +113,8 @@
         self, name_prefix, min_kbps, direction="ingress"
     ):
         policy = self.qos_client.create_qos_policy(
-            name=data_utils.rand_name(name_prefix),
+            name=data_utils.rand_name(
+                prefix=CONF.resource_name_prefix, name=name_prefix),
             shared=True)['policy']
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
                         self.qos_client.delete_qos_policy, policy['id'])
@@ -600,7 +601,7 @@
 
     def _create_qos_policy_with_bw_and_pps_rules(self, min_kbps, min_kpps):
         policy = self.qos_client.create_qos_policy(
-            name=data_utils.rand_name(),
+            name=data_utils.rand_name(prefix=CONF.resource_name_prefix),
             shared=True
         )['policy']
         self.addCleanup(
@@ -660,10 +661,11 @@
 
     def _create_port_with_qos_policy(self, policy):
         port = self.ports_client.create_port(
-            name=data_utils.rand_name(self.__class__.__name__),
+            name=data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name=self.__class__.__name__),
             network_id=self.network['id'],
-            qos_policy_id=policy['id'] if policy else None,
-        )['port']
+            qos_policy_id=policy['id'] if policy else None)['port']
         self.addCleanup(
             test_utils.call_and_ignore_notfound_exc,
             self.ports_client.delete_port, port['id']
diff --git a/tempest/scenario/test_security_groups_basic_ops.py b/tempest/scenario/test_security_groups_basic_ops.py
index 2fc5f32..752b854 100644
--- a/tempest/scenario/test_security_groups_basic_ops.py
+++ b/tempest/scenario/test_security_groups_basic_ops.py
@@ -300,7 +300,8 @@
                    tenant=tenant.creds.tenant_name,
                    num=i
             )
-            name = data_utils.rand_name(name)
+            name = data_utils.rand_name(
+                prefix=CONF.resource_name_prefix, name=name)
             server = self._create_server(name, tenant,
                                          [tenant.security_groups['default']])
             tenant.servers.append(server)
@@ -312,7 +313,8 @@
         secgroups = tenant.security_groups.values()
         name = 'server-{tenant}-access_point'.format(
             tenant=tenant.creds.tenant_name)
-        name = data_utils.rand_name(name)
+        name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name=name)
         server = self._create_server(name, tenant,
                                      security_groups=secgroups)
         tenant.access_point = server
@@ -555,7 +557,8 @@
         name = 'server-{tenant}-gen-1'.format(
                tenant=new_tenant.creds.tenant_name
         )
-        name = data_utils.rand_name(name)
+        name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name=name)
         server = self._create_server(name, new_tenant,
                                      [new_tenant.security_groups['default']])
 
@@ -624,7 +627,8 @@
         name = 'server-{tenant}-gen-1'.format(
                tenant=new_tenant.creds.tenant_name
         )
-        name = data_utils.rand_name(name)
+        name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name=name)
         server = self._create_server(name, new_tenant,
                                      [new_tenant.security_groups['default']])
 
@@ -668,7 +672,8 @@
         tenant = self.primary_tenant
         self._create_tenant_network(tenant, port_security_enabled=False)
         self.assertFalse(tenant.network['port_security_enabled'])
-        name = data_utils.rand_name('server-smoke')
+        name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='server-smoke')
         sec_groups = []
         server = self._create_server(name, tenant, sec_groups)
         server_id = server['id']
diff --git a/tempest/scenario/test_unified_limits.py b/tempest/scenario/test_unified_limits.py
index 22256b4..6e194f9 100644
--- a/tempest/scenario/test_unified_limits.py
+++ b/tempest/scenario/test_unified_limits.py
@@ -71,7 +71,9 @@
         """Wrapper that returns a test image."""
 
         if 'name' not in kwargs:
-            name = data_utils.rand_name(self.__name__ + "-image")
+            name = data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name=self.__name__ + "-image")
             kwargs['name'] = name
 
         params = dict(kwargs)
diff --git a/tempest/scenario/test_volume_boot_pattern.py b/tempest/scenario/test_volume_boot_pattern.py
index 6ebee48..5e28ecd 100644
--- a/tempest/scenario/test_volume_boot_pattern.py
+++ b/tempest/scenario/test_volume_boot_pattern.py
@@ -187,8 +187,9 @@
     def test_image_defined_boot_from_volume(self):
         # create an instance from image-backed volume
         volume_origin = self.create_volume_from_image()
-        name = data_utils.rand_name(self.__class__.__name__ +
-                                    '-volume-backed-server')
+        name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-volume-backed-server')
         instance1 = self.boot_instance_from_resource(
             source_id=volume_origin['id'],
             source_type='volume',
@@ -205,8 +206,9 @@
         # about the volume snapshot. The compute service will use this to
         # create a volume from the volume snapshot and use that as the root
         # disk for the server.
-        name = data_utils.rand_name(self.__class__.__name__ +
-                                    '-image-snapshot-server')
+        name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name=self.__class__.__name__ + '-image-snapshot-server')
         instance2 = self.create_server(image_id=image['id'], name=name,
                                        wait_until='SSHABLE')
 
diff --git a/tempest/scenario/test_volume_migrate_attached.py b/tempest/scenario/test_volume_migrate_attached.py
index 5005346..f34bfd6 100644
--- a/tempest/scenario/test_volume_migrate_attached.py
+++ b/tempest/scenario/test_volume_migrate_attached.py
@@ -96,10 +96,7 @@
         waiters.wait_for_volume_retype(self.volumes_client,
                                        volume_id, new_volume_type)
 
-    @decorators.attr(type='slow')
-    @decorators.idempotent_id('deadd2c2-beef-4dce-98be-f86765ff311b')
-    @utils.services('compute', 'volume')
-    def test_volume_retype_attached(self):
+    def _test_volume_retype_attached(self, dev_name=None):
         LOG.info("Creating keypair and security group")
         keypair = self.create_keypair()
         security_group = self.create_security_group()
@@ -108,18 +105,30 @@
         LOG.info("Creating Volume types")
         source_type, dest_type = self._create_volume_types()
 
-        # create an instance from volume
-        LOG.info("Booting instance from volume")
-        volume_id = self.create_volume(imageRef=CONF.compute.image_ref,
-                                       volume_type=source_type['name'])['id']
+        if dev_name is None:
+            # create an instance from volume
+            LOG.info("Booting instance from volume")
+            volume_id = self.create_volume(
+                imageRef=CONF.compute.image_ref,
+                volume_type=source_type['name'])['id']
 
-        instance = self._boot_instance_from_volume(volume_id, keypair,
-                                                   security_group)
+            instance = self._boot_instance_from_volume(volume_id, keypair,
+                                                       security_group)
+        else:
+            LOG.info("Booting instance from image and attaching data volume")
+            key_name = keypair['name']
+            security_groups = [{'name': security_group['name']}]
+            instance = self.create_server(key_name=key_name,
+                                          security_groups=security_groups)
+            volume = self.create_volume(volume_type=source_type['name'])
+            volume_id = volume['id']
+            volume = self.nova_volume_attach(instance, volume)
 
         # write content to volume on instance
         LOG.info("Setting timestamp in instance %s", instance['id'])
         ip_instance = self.get_server_ip(instance)
         timestamp = self.create_timestamp(ip_instance,
+                                          dev_name=dev_name,
                                           private_key=keypair['private_key'],
                                           server=instance)
 
@@ -134,6 +143,7 @@
         LOG.info("Getting timestamp in postmigrated instance %s",
                  instance['id'])
         timestamp2 = self.get_timestamp(ip_instance,
+                                        dev_name=dev_name,
                                         private_key=keypair['private_key'],
                                         server=instance)
         self.assertEqual(timestamp, timestamp2)
@@ -152,10 +162,35 @@
             instance['id'])['volumeAttachments']
         self.assertEqual(volume_id, attached_volumes[0]['id'])
 
+        # Reboot the instance and verify it boots successfully
+        LOG.info("Hard rebooting instance %s", instance['id'])
+        self.servers_client.reboot_server(instance['id'], type='HARD')
+        waiters.wait_for_server_status(
+            self.servers_client, instance['id'], 'ACTIVE')
+
+        # check the content of written file to verify the instance is working
+        # after being rebooted
+        LOG.info("Getting timestamp in postmigrated rebooted instance %s",
+                 instance['id'])
+        timestamp2 = self.get_timestamp(ip_instance,
+                                        dev_name=dev_name,
+                                        private_key=keypair['private_key'],
+                                        server=instance)
+        self.assertEqual(timestamp, timestamp2)
+
     @decorators.attr(type='slow')
-    @decorators.idempotent_id('fe47b1ed-640e-4e3b-a090-200e25607362')
+    @decorators.idempotent_id('deadd2c2-beef-4dce-98be-f86765ff311b')
     @utils.services('compute', 'volume')
-    def test_volume_migrate_attached(self):
+    def test_volume_retype_attached(self):
+        self._test_volume_retype_attached()
+
+    @decorators.attr(type='slow')
+    @decorators.idempotent_id('122e070c-a5b2-470c-af2b-81e9dbefb9e8')
+    @utils.services('compute', 'volume')
+    def test_volume_retype_attached_data_volume(self):
+        self._test_volume_retype_attached(dev_name='vdb')
+
+    def _test_volume_migrate_attached(self, dev_name=None):
         LOG.info("Creating keypair and security group")
         keypair = self.create_keypair()
         security_group = self.create_security_group()
@@ -163,16 +198,26 @@
         LOG.info("Creating volume")
         # Create a unique volume type to avoid using the backend default
         migratable_type = self.create_volume_type()['name']
-        volume_id = self.create_volume(imageRef=CONF.compute.image_ref,
-                                       volume_type=migratable_type)['id']
-        volume = self.admin_volumes_client.show_volume(volume_id)
 
-        LOG.info("Booting instance from volume")
-        instance = self._boot_instance_from_volume(volume_id, keypair,
-                                                   security_group)
+        if dev_name is None:
+            volume_id = self.create_volume(imageRef=CONF.compute.image_ref,
+                                           volume_type=migratable_type)['id']
+            LOG.info("Booting instance from volume")
+            instance = self._boot_instance_from_volume(volume_id, keypair,
+                                                       security_group)
+        else:
+            LOG.info("Booting instance from image and attaching data volume")
+            key_name = keypair['name']
+            security_groups = [{'name': security_group['name']}]
+            instance = self.create_server(key_name=key_name,
+                                          security_groups=security_groups)
+            volume = self.create_volume(volume_type=migratable_type)
+            volume_id = volume['id']
+            volume = self.nova_volume_attach(instance, volume)
 
         # Identify the source and destination hosts for the migration
-        src_host = volume['volume']['os-vol-host-attr:host']
+        volume = self.admin_volumes_client.show_volume(volume_id)['volume']
+        src_host = volume['os-vol-host-attr:host']
 
         # Select the first c-vol host that isn't hosting the volume as the dest
         # host['host_name'] should take the format of host@backend.
@@ -186,6 +231,7 @@
 
         ip_instance = self.get_server_ip(instance)
         timestamp = self.create_timestamp(ip_instance,
+                                          dev_name=dev_name,
                                           private_key=keypair['private_key'],
                                           server=instance)
 
@@ -202,6 +248,7 @@
         LOG.info("Getting timestamp in postmigrated instance %s",
                  instance['id'])
         timestamp2 = self.get_timestamp(ip_instance,
+                                        dev_name=dev_name,
                                         private_key=keypair['private_key'],
                                         server=instance)
         self.assertEqual(timestamp, timestamp2)
@@ -216,3 +263,31 @@
             instance['id'])['volumeAttachments']
         attached_volume_id = attached_volumes[0]['id']
         self.assertEqual(volume_id, attached_volume_id)
+
+        # Reboot the instance and verify it boots successfully
+        LOG.info("Hard rebooting instance %s", instance['id'])
+        self.servers_client.reboot_server(instance['id'], type='HARD')
+        waiters.wait_for_server_status(
+            self.servers_client, instance['id'], 'ACTIVE')
+
+        # check the content of written file to verify the instance is working
+        # after being rebooted
+        LOG.info("Getting timestamp in postmigrated rebooted instance %s",
+                 instance['id'])
+        timestamp2 = self.get_timestamp(ip_instance,
+                                        dev_name=dev_name,
+                                        private_key=keypair['private_key'],
+                                        server=instance)
+        self.assertEqual(timestamp, timestamp2)
+
+    @decorators.attr(type='slow')
+    @decorators.idempotent_id('fe47b1ed-640e-4e3b-a090-200e25607362')
+    @utils.services('compute', 'volume')
+    def test_volume_migrate_attached(self):
+        self._test_volume_migrate_attached()
+
+    @decorators.attr(type='slow')
+    @decorators.idempotent_id('1b8661cb-db93-4110-860b-201295027b78')
+    @utils.services('compute', 'volume')
+    def test_volume_migrate_attached_data_volume(self):
+        self._test_volume_migrate_attached(dev_name='vdb')
diff --git a/tempest/serial_tests/README.rst b/tempest/serial_tests/README.rst
new file mode 100644
index 0000000..40a50f4
--- /dev/null
+++ b/tempest/serial_tests/README.rst
@@ -0,0 +1,61 @@
+.. _serial_tests_guide:
+
+Tempest Field Guide to Serial tests
+===================================
+
+
+What are these tests?
+---------------------
+
+Tempest can run tests serially as well as in parallel, depending on the
+configuration that is fully up to the user. However, sometimes you need to
+make sure that tests are not interfering with each other via OpenStack
+resources with the other tests running in parallel. Tempest creates separate
+projects for each test class to separate project based resources between test
+cases.
+
+If your tests use resources outside of projects, e.g. host aggregates then
+you might need to explicitly separate interfering test cases. If you only need
+to separate a small set of test cases from each other then you can use the
+``LockFixture``.
+
+However, in some cases, a small set of tests needs to be run serially. For
+example, some of the host aggregate and availability zone testing needs
+compute nodes without any running nova server to be able to move compute hosts
+between availability zones. But many tempest tests start one or more nova
+servers.
+
+
+Why are these tests in Tempest?
+-------------------------------
+
+This is one of Tempest's core purposes, testing the integration between
+projects.
+
+
+Scope of these tests
+--------------------
+
+The tests should always use the Tempest implementation of the OpenStack API,
+as we want to ensure that bugs aren't hidden by the official clients.
+
+Tests should be tagged with which services they exercise, as
+determined by which client libraries are used directly by the test.
+
+
+Example of a good test
+----------------------
+
+While we are looking for interaction of 2 or more services, be specific in
+your interactions. A giant "this is my data center" smoke test is hard to
+debug when it goes wrong.
+
+The tests that need to be run serially need to be marked with the
+``@serial`` class decorator. This will make sure that even if tempest is
+configured to run the tests in parallel, these tests will always be executed
+separately from the rest of the test cases.
+
+Please note that due to test ordering optimization reasons test cases marked
+for ``@serial`` execution need to be put under ``tempest/serial_tests``
+directory. This will ensure that the serial tests will block the parallel tests
+in the least amount of time.
diff --git a/tempest/serial_tests/api/admin/test_aggregates.py b/tempest/serial_tests/api/admin/test_aggregates.py
index 2ca91aa..cedeec0 100644
--- a/tempest/serial_tests/api/admin/test_aggregates.py
+++ b/tempest/serial_tests/api/admin/test_aggregates.py
@@ -63,7 +63,9 @@
 
     def _create_test_aggregate(self, **kwargs):
         if 'name' not in kwargs:
-            kwargs['name'] = data_utils.rand_name(self.aggregate_name_prefix)
+            kwargs['name'] = data_utils.rand_name(
+                prefix=CONF.resource_name_prefix,
+                name=self.aggregate_name_prefix)
         aggregate = self.client.create_aggregate(**kwargs)['aggregate']
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
                         self.client.delete_aggregate, aggregate['id'])
@@ -87,7 +89,8 @@
     @decorators.idempotent_id('5873a6f8-671a-43ff-8838-7ce430bb6d0b')
     def test_aggregate_create_delete_with_az(self):
         """Test create/delete aggregate with availability_zone"""
-        az_name = data_utils.rand_name(self.az_name_prefix)
+        az_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name=self.az_name_prefix)
         aggregate = self._create_test_aggregate(availability_zone=az_name)
         self.assertEqual(az_name, aggregate['availability_zone'])
 
@@ -125,8 +128,10 @@
     @decorators.idempotent_id('4d2b2004-40fa-40a1-aab2-66f4dab81beb')
     def test_aggregate_create_update_with_az(self):
         """Test create/update aggregate with availability_zone"""
-        aggregate_name = data_utils.rand_name(self.aggregate_name_prefix)
-        az_name = data_utils.rand_name(self.az_name_prefix)
+        aggregate_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name=self.aggregate_name_prefix)
+        az_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name=self.az_name_prefix)
         aggregate = self._create_test_aggregate(
             name=aggregate_name, availability_zone=az_name)
 
@@ -153,7 +158,8 @@
     def test_aggregate_add_remove_host(self):
         """Test adding host to and removing host from aggregate"""
         self.useFixture(fixtures.LockFixture('availability_zone'))
-        aggregate_name = data_utils.rand_name(self.aggregate_name_prefix)
+        aggregate_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name=self.aggregate_name_prefix)
         aggregate = self._create_test_aggregate(name=aggregate_name)
 
         body = (self.client.add_host(aggregate['id'], host=self.host)
@@ -177,7 +183,8 @@
         Add a host to the given aggregate and list.
         """
         self.useFixture(fixtures.LockFixture('availability_zone'))
-        aggregate_name = data_utils.rand_name(self.aggregate_name_prefix)
+        aggregate_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name=self.aggregate_name_prefix)
         aggregate = self._create_test_aggregate(name=aggregate_name)
 
         self.client.add_host(aggregate['id'], host=self.host)
@@ -199,7 +206,8 @@
         Add a host to the given aggregate and get details.
         """
         self.useFixture(fixtures.LockFixture('availability_zone'))
-        aggregate_name = data_utils.rand_name(self.aggregate_name_prefix)
+        aggregate_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name=self.aggregate_name_prefix)
         aggregate = self._create_test_aggregate(name=aggregate_name)
 
         self.client.add_host(aggregate['id'], host=self.host)
@@ -215,7 +223,8 @@
     def test_aggregate_add_host_create_server_with_az(self):
         """Test adding a host to the given aggregate and creating a server"""
         self.useFixture(fixtures.LockFixture('availability_zone'))
-        az_name = data_utils.rand_name(self.az_name_prefix)
+        az_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name=self.az_name_prefix)
         aggregate = self._create_test_aggregate(availability_zone=az_name)
 
         # Find a host that has not been added to other availability zone,
@@ -269,7 +278,8 @@
         # Checking create aggregate API response schema
         aggregate = self._create_test_aggregate()
 
-        new_aggregate_name = data_utils.rand_name(self.aggregate_name_prefix)
+        new_aggregate_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name=self.aggregate_name_prefix)
         # Checking update aggregate API response schema
         self.client.update_aggregate(aggregate['id'], name=new_aggregate_name)
         # Checking show aggregate API response schema
diff --git a/tempest/serial_tests/scenario/test_aggregates_basic_ops.py b/tempest/serial_tests/scenario/test_aggregates_basic_ops.py
index ba31d84..a831fe5 100644
--- a/tempest/serial_tests/scenario/test_aggregates_basic_ops.py
+++ b/tempest/serial_tests/scenario/test_aggregates_basic_ops.py
@@ -15,10 +15,13 @@
 
 from tempest.common import tempest_fixtures as fixtures
 from tempest.common import utils
+from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 from tempest.scenario import manager
 
+CONF = config.CONF
+
 
 @decorators.serial
 class TestAggregatesBasicOps(manager.ScenarioTest):
@@ -119,7 +122,8 @@
     def test_aggregate_basic_ops(self):
         self.useFixture(fixtures.LockFixture('availability_zone'))
         az = 'foo_zone'
-        aggregate_name = data_utils.rand_name('aggregate-scenario')
+        aggregate_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix, name='aggregate-scenario')
         aggregate = self._create_aggregate(name=aggregate_name,
                                            availability_zone=az)
 
@@ -131,7 +135,9 @@
         self._check_aggregate_details(aggregate, aggregate_name, az, [host],
                                       metadata)
 
-        aggregate_name = data_utils.rand_name('renamed-aggregate-scenario')
+        aggregate_name = data_utils.rand_name(
+            prefix=CONF.resource_name_prefix,
+            name='renamed-aggregate-scenario')
         # Updating the name alone. The az must be specified again otherwise
         # the tempest client would send None in the put body
         aggregate = self._update_aggregate(aggregate, aggregate_name, az)
diff --git a/tempest/test.py b/tempest/test.py
index 3360221..a766367 100644
--- a/tempest/test.py
+++ b/tempest/test.py
@@ -26,7 +26,6 @@
 
 from tempest import clients
 from tempest.common import credentials_factory as credentials
-from tempest.common import utils
 from tempest import config
 from tempest.lib.common import api_microversion_fixture
 from tempest.lib.common import fixed_network
@@ -45,20 +44,6 @@
     version='Pike', removal_version='?')
 
 
-services = debtcollector.moves.moved_function(
-    utils.services, 'services', __name__,
-    version='Pike', removal_version='?')
-
-
-requires_ext = debtcollector.moves.moved_function(
-    utils.requires_ext, 'requires_ext', __name__,
-    version='Pike', removal_version='?')
-
-
-is_extension_enabled = debtcollector.moves.moved_function(
-    utils.is_extension_enabled, 'is_extension_enabled', __name__,
-    version='Pike', removal_version='?')
-
 at_exit_set = set()
 
 
diff --git a/tempest/tests/README.rst b/tempest/tests/README.rst
index 0587e7b..081dd07 100644
--- a/tempest/tests/README.rst
+++ b/tempest/tests/README.rst
@@ -14,6 +14,7 @@
 
 Why are these tests in Tempest?
 -------------------------------
+
 These tests exist to make sure that the mechanisms that we use inside of
 Tempest are valid and remain functional. They are only here for self
 validation of Tempest.
@@ -21,6 +22,7 @@
 
 Scope of these tests
 --------------------
+
 Unit tests should not require an external service to be running or any extra
 configuration to run. Any state that is required for a test should either be
 mocked out or created in a temporary test directory. (see test_wrappers.py for
diff --git a/tempest/tests/cmd/test_cleanup_services.py b/tempest/tests/cmd/test_cleanup_services.py
index 2301be6..6b3b4b7 100644
--- a/tempest/tests/cmd/test_cleanup_services.py
+++ b/tempest/tests/cmd/test_cleanup_services.py
@@ -44,6 +44,7 @@
                   'saved_state_json': {'saved': 'data'},
                   'is_preserve': False,
                   'is_save_state': True,
+                  'prefix': 'tempest',
                   'tenant_id': 'project_id',
                   'got_exceptions': []}
         base = cleanup_service.BaseService(kwargs)
@@ -54,6 +55,7 @@
         self.assertTrue(base.is_save_state)
         self.assertEqual(base.tenant_filter['project_id'], kwargs['tenant_id'])
         self.assertEqual(base.got_exceptions, kwargs['got_exceptions'])
+        self.assertEqual(base.prefix, kwargs['prefix'])
 
     def test_not_implemented_ex(self):
         kwargs = {'data': {'data': 'test'},
@@ -61,6 +63,7 @@
                   'saved_state_json': {'saved': 'data'},
                   'is_preserve': False,
                   'is_save_state': False,
+                  'prefix': 'tempest',
                   'tenant_id': 'project_id',
                   'got_exceptions': []}
         base = self.TestException(kwargs)
@@ -188,7 +191,8 @@
     service_name = 'default'
 
     def _create_cmd_service(self, service_type, is_save_state=False,
-                            is_preserve=False, is_dry_run=False):
+                            is_preserve=False, is_dry_run=False,
+                            prefix=''):
         creds = fake_credentials.FakeKeystoneV3Credentials()
         os = clients.Manager(creds)
         return getattr(cleanup_service, service_type)(
@@ -196,6 +200,7 @@
             is_save_state=is_save_state,
             is_preserve=is_preserve,
             is_dry_run=is_dry_run,
+            prefix=prefix,
             project_id='b8e3ece07bb049138d224436756e3b57',
             data={},
             saved_state_json=self.saved_state
diff --git a/tempest/tests/cmd/test_run.py b/tempest/tests/cmd/test_run.py
index 3b5e901..b487c3f 100644
--- a/tempest/tests/cmd/test_run.py
+++ b/tempest/tests/cmd/test_run.py
@@ -225,6 +225,11 @@
                             '%s=%s' % (self.exclude_list, path),
                             '--regex', 'fail'], 1)
 
+    def test_tempest_run_with_slowest(self):
+        out, err = self.assertRunExit(['tempest', 'run', '--regex', 'passing',
+                                       '--slowest'], 0)
+        self.assertRegex(str(out), r'Test id\s+Runtime \(s\)')
+
 
 class TestOldArgRunReturnCode(TestRunReturnCode):
     """A class for testing deprecated but still supported args.
@@ -363,6 +368,7 @@
         parsed_args.state = None
         parsed_args.list_tests = False
         parsed_args.config_file = path
+        parsed_args.slowest = False
 
         with mock.patch('stestr.commands.run_command') as m:
             m.return_value = 0
@@ -393,6 +399,7 @@
         parsed_args.state = None
         parsed_args.list_tests = False
         parsed_args.config_file = path
+        parsed_args.slowest = False
 
         with mock.patch('stestr.commands.run_command') as m:
             m.return_value = 0
@@ -409,6 +416,7 @@
         parsed_args.state = None
         parsed_args.list_tests = False
         parsed_args.config_file = ''
+        parsed_args.slowest = False
 
         with mock.patch('stestr.commands.run_command') as m:
             m.return_value = 0
@@ -441,6 +449,7 @@
         parsed_args.state = True
         parsed_args.list_tests = False
         parsed_args.config_file = ''
+        parsed_args.slowest = False
 
         with mock.patch('stestr.commands.run_command') as m:
             m.return_value = 0
@@ -460,6 +469,7 @@
         parsed_args.state = True
         parsed_args.list_tests = False
         parsed_args.config_file = path
+        parsed_args.slowest = False
 
         with mock.patch('stestr.commands.run_command') as m:
             m.return_value = 0
diff --git a/tempest/tests/common/test_compute.py b/tempest/tests/common/test_compute.py
index 142bb08..4d933cd 100644
--- a/tempest/tests/common/test_compute.py
+++ b/tempest/tests/common/test_compute.py
@@ -17,8 +17,9 @@
 
 from urllib import parse as urlparse
 
-
 from tempest.common import compute
+from tempest import exceptions
+from tempest.lib import exceptions as lib_exc
 from tempest.tests import base
 
 
@@ -28,6 +29,58 @@
         self.client_sock = mock.Mock()
         self.url = urlparse.urlparse("http://www.fake.com:80")
 
+    @mock.patch('tempest.common.compute.' 'config.CONF.validation')
+    def test_get_server_ip_connect_method_floating(self, mock_conf):
+        fake_server = {'id': 'fake-uuid'}
+        fake_vr = {'floating_ip': {'ip': '10.10.10.1'}}
+        mock_conf.connect_method = 'floating'
+
+        fake_server_ip = compute.get_server_ip(fake_server, fake_vr)
+        self.assertEqual(fake_server_ip, '10.10.10.1')
+
+        # assert that InvalidParam is raised when validadation
+        # resources are not set
+        self.assertRaises(lib_exc.InvalidParam,
+                          compute.get_server_ip,
+                          fake_server)
+
+    @mock.patch('tempest.common.compute.' 'config.CONF.validation')
+    def test_get_server_ip_connect_method_fixed(self, mock_conf):
+        fake_server = {'id': 'fake-uuid',
+                       'addresses': {
+                           'private': [
+                               {'addr': '192.168.0.3',
+                                'version': 4}]}}
+        mock_conf.connect_method = 'fixed'
+        mock_conf.network_for_ssh = 'private'
+        mock_conf.ip_version_for_ssh = 4
+
+        fake_server_ip = compute.get_server_ip(fake_server)
+        self.assertEqual(fake_server_ip, '192.168.0.3')
+
+        fake_server_v6 = {'id': 'fake-uuid',
+                          'addresses': {
+                              'private': [
+                                  {'addr': '2345:0425:2CA1::0567:5673:23b5',
+                                   'version': 6}]}}
+        # assert when server is unreachable
+        self.assertRaises(exceptions.ServerUnreachable,
+                          compute.get_server_ip,
+                          fake_server_v6)
+
+    @mock.patch('tempest.common.compute.' 'config.CONF.validation')
+    def test_get_server_ip_invalid_config(self, mock_conf):
+        fake_server = {'id': 'fake-uuid',
+                       'addresses': {
+                           'private': [
+                               {'addr': '192.168.0.3',
+                                'version': 4}]}}
+        mock_conf.connect_method = 'fake-method'
+        # assert when the connection method is not correctly set
+        self.assertRaises(lib_exc.InvalidConfiguration,
+                          compute.get_server_ip,
+                          fake_server)
+
     def test_rfp_frame_not_cached(self):
         # rfp negotiation frame arrived separately after upgrade
         # response, so it's not cached.
diff --git a/tempest/tests/common/test_credentials_factory.py b/tempest/tests/common/test_credentials_factory.py
index 374474d..8a1158d 100644
--- a/tempest/tests/common/test_credentials_factory.py
+++ b/tempest/tests/common/test_credentials_factory.py
@@ -37,7 +37,7 @@
                          fake_config.FakePrivate)
 
     def test_get_dynamic_provider_params_creds_v2(self):
-        expected_uri = 'EXPECTED_V2_URI'
+        expected_uri = 'http://v2.identy.example.com'
         cfg.CONF.set_default('uri', expected_uri, group='identity')
         admin_creds = fake_credentials.FakeCredentials()
         params = cf.get_dynamic_provider_params('v2', admin_creds=admin_creds)
@@ -48,7 +48,7 @@
             self.assertEqual(expected_params[key], params[key])
 
     def test_get_dynamic_provider_params_creds_v3(self):
-        expected_uri = 'EXPECTED_V3_URI'
+        expected_uri = 'http://v3.identy.example.com'
         cfg.CONF.set_default('uri_v3', expected_uri, group='identity')
         admin_creds = fake_credentials.FakeCredentials()
         params = cf.get_dynamic_provider_params('v3', admin_creds=admin_creds)
@@ -76,14 +76,14 @@
                 fill_in=True, identity_version=expected_identity_version)
 
     def test_get_preprov_provider_params_creds_v2(self):
-        expected_uri = 'EXPECTED_V2_URI'
+        expected_uri = 'http://v2.identy.example.com'
         cfg.CONF.set_default('uri', expected_uri, group='identity')
         params = cf.get_preprov_provider_params('v2')
         self.assertIn('identity_uri', params)
         self.assertEqual(expected_uri, params['identity_uri'])
 
     def test_get_preprov_provider_params_creds_v3(self):
-        expected_uri = 'EXPECTED_V3_URI'
+        expected_uri = 'http://v3.identy.example.com'
         cfg.CONF.set_default('uri_v3', expected_uri, group='identity')
         params = cf.get_preprov_provider_params('v3')
         self.assertIn('identity_uri', params)
@@ -237,7 +237,7 @@
 
     @mock.patch('tempest.lib.auth.get_credentials')
     def test_get_credentials_v2(self, mock_auth_get_credentials):
-        expected_uri = 'V2_URI'
+        expected_uri = 'http://v2.identity.example.com'
         expected_result = 'my_creds'
         mock_auth_get_credentials.return_value = expected_result
         cfg.CONF.set_default('uri', expected_uri, 'identity')
@@ -252,7 +252,7 @@
 
     @mock.patch('tempest.lib.auth.get_credentials')
     def test_get_credentials_v3_no_domain(self, mock_auth_get_credentials):
-        expected_uri = 'V3_URI'
+        expected_uri = 'https://v3.identity.exmaple.com'
         expected_result = 'my_creds'
         expected_domain = 'my_domain'
         mock_auth_get_credentials.return_value = expected_result
@@ -272,7 +272,7 @@
 
     @mock.patch('tempest.lib.auth.get_credentials')
     def test_get_credentials_v3_domain(self, mock_auth_get_credentials):
-        expected_uri = 'V3_URI'
+        expected_uri = 'https://v3.identity.exmaple.com'
         expected_result = 'my_creds'
         expected_domain = 'my_domain'
         mock_auth_get_credentials.return_value = expected_result
@@ -291,7 +291,7 @@
 
     @mock.patch('tempest.lib.auth.get_credentials')
     def test_get_credentials_v3_system(self, mock_auth_get_credentials):
-        expected_uri = 'V3_URI'
+        expected_uri = 'https://v3.identity.exmaple.com'
         expected_result = 'my_creds'
         mock_auth_get_credentials.return_value = expected_result
         cfg.CONF.set_default('uri_v3', expected_uri, 'identity')
diff --git a/tempest/tests/common/test_waiters.py b/tempest/tests/common/test_waiters.py
index 93c949e..f194173 100755
--- a/tempest/tests/common/test_waiters.py
+++ b/tempest/tests/common/test_waiters.py
@@ -27,6 +27,78 @@
 import tempest.tests.utils as utils
 
 
+class TestServerWaiters(base.TestCase):
+    def setUp(self):
+        super(TestServerWaiters, self).setUp()
+        self.client = mock.MagicMock()
+        self.client.build_timeout = 1
+        self.client.build_interval = 1
+
+    def test_wait_for_server_status(self):
+        fake_server = {'id': 'fake-uuid',
+                       'status': 'ACTIVE'}
+        self.client.show_server.return_value = ({'server': fake_server})
+        start_time = int(time.time())
+        waiters.wait_for_server_status(
+            self.client, fake_server['id'], 'ACTIVE')
+        end_time = int(time.time())
+        # Ensure waiter returns before build_timeout
+        self.assertLess((end_time - start_time), 10)
+
+    def test_wait_for_server_status_build(self):
+        fake_server = {'id': 'fake-uuid',
+                       'status': 'BUILD'}
+        self.client.show_server.return_value = ({'server': fake_server})
+        start_time = int(time.time())
+        waiters.wait_for_server_status(self.client, fake_server['id'], 'BUILD')
+        end_time = int(time.time())
+        # Ensure waiter returns before build_timeout
+        self.assertLess((end_time - start_time), 10)
+
+    def test_wait_for_server_status_timeout(self):
+        time_mock = self.patch('time.time')
+        time_mock.side_effect = utils.generate_timeout_series(1)
+
+        fake_server = {'id': 'fake-uuid',
+                       'status': 'SAVING'}
+        self.client.show_server.return_value = ({'server': fake_server})
+        self.assertRaises(lib_exc.TimeoutException,
+                          waiters.wait_for_server_status,
+                          self.client, fake_server['id'], 'ACTIVE')
+
+    def test_wait_for_server_status_error_on_server_build(self):
+        fake_server = {'id': 'fake-uuid',
+                       'status': 'ERROR'}
+        self.client.show_server.return_value = ({'server': fake_server})
+        self.assertRaises(exceptions.BuildErrorException,
+                          waiters.wait_for_server_status,
+                          self.client, fake_server['id'], 'ACTIVE')
+
+    def test_wait_for_server_termination(self):
+        fake_server = {'id': 'fake-uuid',
+                       'status': 'ACTIVE'}
+        self.client.show_server.side_effect = lib_exc.NotFound
+        waiters.wait_for_server_termination(self.client, fake_server['id'])
+
+    def test_wait_for_server_termination_timeout(self):
+        time_mock = self.patch('time.time')
+        time_mock.side_effect = utils.generate_timeout_series(1)
+
+        fake_server = {'id': 'fake-uuid',
+                       'status': 'ACTIVE'}
+        self.assertRaises(lib_exc.TimeoutException,
+                          waiters.wait_for_server_termination,
+                          self.client, fake_server['id'])
+
+    def test_wait_for_server_termination_error_status(self):
+        fake_server = {'id': 'fake-uuid',
+                       'status': 'ERROR'}
+        self.client.show_server.return_value = ({'server': fake_server})
+        self.assertRaises(lib_exc.DeleteErrorException,
+                          waiters.wait_for_server_termination,
+                          self.client, fake_server['id'])
+
+
 class TestImageWaiters(base.TestCase):
     def setUp(self):
         super(TestImageWaiters, self).setUp()
@@ -145,6 +217,15 @@
                           waiters.wait_for_image_copied_to_stores,
                           self.client, 'fake_image_id')
 
+    def test_wait_for_image_copied_to_stores_status_killed(self):
+        self.client.show_image.return_value = ({
+            'status': 'killed',
+            'os_glance_importing_to_stores': None,
+            'os_glance_failed_import': 'fake_os_glance_failed_import'})
+        self.assertRaises(exceptions.ImageKilledException,
+                          waiters.wait_for_image_copied_to_stores,
+                          self.client, 'fake_image_id')
+
     def test_wait_for_image_tasks_status(self):
         self.client.show_image_tasks.return_value = ({
             'tasks': [{'status': 'success'}]})
@@ -168,6 +249,28 @@
                           waiters.wait_for_image_tasks_status,
                           self.client, 'fake_image_id', 'success')
 
+    def test_wait_for_tasks_status(self):
+        self.client.show_tasks.return_value = ({
+            'status': 'success'})
+        start_time = int(time.time())
+        waiters.wait_for_tasks_status(
+            self.client, 'fake_task_id', 'success')
+        end_time = int(time.time())
+        # Ensure waiter returns before build_timeout
+        self.assertLess((end_time - start_time), 10)
+
+    def test_wait_for_tasks_status_timeout(self):
+        time_mock = self.patch('time.time')
+        self.patch('time.time', side_effect=[0., 1.])
+        time_mock.side_effect = utils.generate_timeout_series(1)
+
+        self.client.show_tasks.return_value = (
+            {'status': 'success'},
+            {'status': 'processing'})
+        self.assertRaises(lib_exc.TimeoutException,
+                          waiters.wait_for_tasks_status,
+                          self.client, 'fake_task_id', 'success')
+
 
 class TestInterfaceWaiters(base.TestCase):
 
@@ -366,6 +469,31 @@
                                       mock.call(mock.sentinel.volume_id),
                                       mock.call(mock.sentinel.volume_id)])
 
+    def test_wait_for_volume_retype(self):
+        fake_volume = {'volume_type': {'id': 'fake-uuid'}}
+        show_volume = mock.Mock(return_value={'volume': fake_volume})
+        client = mock.Mock(resource_type="volume",
+                           build_interval=1,
+                           build_timeout=1,
+                           show_volume=show_volume)
+        waiters.wait_for_volume_retype(
+            client, mock.sentinel.volume_id, fake_volume['volume_type'])
+
+    def test_wait_for_volume_retype_timeout(self):
+        fake_volume = {'volume_type': {'id': 'fake-uuid'}}
+        show_volume = mock.Mock(return_value={'volume': fake_volume})
+        client = mock.Mock(resource_type="volume",
+                           build_interval=1,
+                           build_timeout=1,
+                           show_volume=show_volume)
+
+        self.patch('time.time', side_effect=[0., client.build_timeout + 1.])
+        self.patch('time.sleep')
+        self.assertRaises(lib_exc.TimeoutException,
+                          waiters.wait_for_volume_retype,
+                          client, mock.sentinel.volume_id,
+                          'fake_volume_type')
+
     @mock.patch.object(time, 'sleep')
     def test_wait_for_volume_status_error_restoring(self, mock_sleep):
         # Tests that the wait method raises VolumeRestoreErrorException if
@@ -450,7 +578,25 @@
                                       mock.call(uuids.volume_id),
                                       mock.call(uuids.volume_id)])
 
-    def test_wait_for_volume_attachment(self):
+    def test_wait_for_volume_attachment_create_timeout(self):
+        show_volume = mock.MagicMock(return_value={
+            'volume': {'attachments': [
+                {'attachment_id': uuids.attachment_id,
+                 'server_id': uuids.server_id,
+                 'volume_id': uuids.volume_id}]}})
+        client = mock.Mock(spec=volumes_client.VolumesClient,
+                           build_interval=1,
+                           build_timeout=1,
+                           show_volume=show_volume)
+        self.patch('time.time', side_effect=[0., client.build_timeout + 1.])
+        self.patch('time.sleep')
+        # Assert that a timeout is raised if the attachment is not
+        # created within required time
+        self.assertRaises(lib_exc.TimeoutException,
+                          waiters.wait_for_volume_attachment_create,
+                          client, 'fake_volume_id', 'fake_server_id')
+
+    def test_wait_for_volume_attachment_remove(self):
         vol_detached = {'volume': {'attachments': []}}
         vol_attached = {'volume': {'attachments': [
                        {'attachment_id': uuids.attachment_id}]}}
@@ -469,7 +615,7 @@
                                       mock.call(uuids.volume_id),
                                       mock.call(uuids.volume_id)])
 
-    def test_wait_for_volume_attachment_timeout(self):
+    def test_wait_for_volume_attachment_remove_timeout(self):
         show_volume = mock.MagicMock(return_value={
             'volume': {'attachments': [
                 {'attachment_id': uuids.attachment_id}]}})
@@ -635,6 +781,67 @@
             .1
         )
 
+    def test_wait_for_caching(self):
+        mock_client = mock.Mock(
+            build_interval=1,
+            build_timeout=1
+        )
+        mock_cache_client = mock.Mock()
+        mock_cache_client.list_cache.return_value = {
+            "cached_images": [{
+                "image_id": 'fake_image_id'}]}
+        waiters.wait_for_caching(
+            mock_client, mock_cache_client, 'fake_image_id')
+
+    def test_wait_for_caching_timeout(self):
+        time_mock = self.patch('time.time')
+        time_mock.side_effect = utils.generate_timeout_series(1)
+
+        mock_client = mock.Mock(
+            build_interval=1,
+            build_timeout=1
+        )
+        mock_cache_client = mock.Mock()
+        mock_cache_client.list_cache.return_value = {
+            "cached_images": [{
+                "image_id": 'fake_image_id'}]}
+        # Assert that TimeoutException is raised when the image
+        # failed to cache in time
+        self.assertRaises(
+            lib_exc.TimeoutException,
+            waiters.wait_for_caching,
+            mock_client,
+            mock_cache_client,
+            'fake_image_id'
+        )
+
+    def test_wait_for_object_create(self):
+        mock_object_client = mock.Mock(
+            build_interval=1,
+            build_timeout=1
+        )
+        waiters.wait_for_object_create(
+            mock_object_client, 'fake_container', 'fake_object')
+
+    def test_wait_for_object_create_timeout(self):
+        time_mock = self.patch('time.time')
+        time_mock.side_effect = utils.generate_timeout_series(1)
+
+        mock_object_client = mock.Mock(
+            build_interval=1,
+            build_timeout=1
+        )
+        # Assert that TimeoutException is raised when the object is not
+        # created in time
+        self.assertRaises(
+            lib_exc.TimeoutException,
+            waiters.wait_for_object_create,
+            mock_object_client,
+            'fake_container',
+            'fake_object',
+            .1
+        )
+
 
 class TestPortCreationWaiter(base.TestCase):
     def test_wait_for_port_status(self):
diff --git a/tempest/tests/lib/common/test_cred_client.py b/tempest/tests/lib/common/test_cred_client.py
index 7ea660b..e44c5ed 100644
--- a/tempest/tests/lib/common/test_cred_client.py
+++ b/tempest/tests/lib/common/test_cred_client.py
@@ -38,6 +38,13 @@
         self.projects_client.create_tenant.assert_called_once_with(
             name='fake_name', description='desc')
 
+    def test_show_project(self):
+        self.projects_client.show_tenant.return_value = {
+            'tenant': 'a_tenant'
+        }
+        res = self.creds_client.show_project('fake_id')
+        self.assertEqual('a_tenant', res)
+
     def test_delete_project(self):
         self.creds_client.delete_project('fake_id')
         self.projects_client.delete_tenant.assert_called_once_with(
@@ -79,11 +86,32 @@
         self.projects_client.create_project.assert_called_once_with(
             name='fake_name', description='desc', domain_id='fake_domain_id')
 
+    def test_show_project(self):
+        self.projects_client.show_project.return_value = {
+            'project': 'a_tenant'
+        }
+        res = self.creds_client.show_project('fake_id')
+        self.assertEqual('a_tenant', res)
+
     def test_delete_project(self):
         self.creds_client.delete_project('fake_id')
         self.projects_client.delete_project.assert_called_once_with(
             'fake_id')
 
+    def test_create_domain(self):
+        self.domains_client.create_domain.return_value = {
+            'domain': 'a_tenant'
+        }
+        res = self.creds_client.create_domain('fake_name', 'desc')
+        self.assertEqual('a_tenant', res)
+        self.domains_client.create_domain.assert_called_once_with(
+            name='fake_name', description='desc')
+
+    def test_delete_domain(self):
+        self.creds_client.delete_domain('fake_id')
+        self.domains_client.delete_domain.assert_called_once_with(
+            'fake_id')
+
     def test_get_credentials(self):
         ret = self.creds_client.get_credentials(
             {'name': 'some_user', 'id': 'fake_id'},
diff --git a/tempest/tests/lib/services/image/v2/test_images_client.py b/tempest/tests/lib/services/image/v2/test_images_client.py
index 27a50a9..01861a2 100644
--- a/tempest/tests/lib/services/image/v2/test_images_client.py
+++ b/tempest/tests/lib/services/image/v2/test_images_client.py
@@ -146,6 +146,36 @@
         ]
     }
 
+    FAKE_DELETE_IMAGE_FROM_STORE = {
+        "id": "e485aab9-0907-4973-921c-bb6da8a8fcf8",
+        "name": u"\u2740(*\xb4\u25e2`*)\u2740",
+        "status": "active",
+        "visibility": "public",
+        "size": 2254249,
+        "checksum": "2cec138d7dae2aa59038ef8c9aec2390",
+        "tags": [
+            "fedora",
+            "beefy"
+        ],
+        "created_at": "2012-08-10T19:23:50Z",
+        "updated_at": "2012-08-12T11:11:33Z",
+        "self": "/v2/images/da3b75d9-3f4a-40e7-8a2c-bfab23927dea",
+        "file": "/v2/images/da3b75d9-3f4a-40e7-8a2c-bfab23927"
+                "dea/file",
+        "schema": "/v2/schemas/image",
+        "owner": None,
+        "min_ram": None,
+        "min_disk": None,
+        "disk_format": None,
+        "virtual_size": None,
+        "container_format": None,
+        "os_hash_algo": "sha512",
+        "os_hash_value": "ef7d1ed957ffafefb324d50ebc6685ed03d0e645d",
+        "os_hidden": False,
+        "protected": False,
+        "stores": ["store-1", "store-2"],
+    }
+
     FAKE_TAG_NAME = "fake tag"
 
     def setUp(self):
@@ -294,3 +324,12 @@
             self.FAKE_SHOW_IMAGE_TASKS,
             True,
             image_id="e485aab9-0907-4973-921c-bb6da8a8fcf8")
+
+    def test_delete_image_from_store(self):
+        self.check_service_client_function(
+            self.client.delete_image_from_store,
+            'tempest.lib.common.rest_client.RestClient.delete',
+            {},
+            image_id=self.FAKE_DELETE_IMAGE_FROM_STORE["id"],
+            store_name=self.FAKE_DELETE_IMAGE_FROM_STORE["stores"][0],
+            status=204)
diff --git a/tools/generate-tempest-plugins-list.py b/tools/generate-tempest-plugins-list.py
index 0b6b342..2e8ced5 100644
--- a/tools/generate-tempest-plugins-list.py
+++ b/tools/generate-tempest-plugins-list.py
@@ -75,7 +75,6 @@
     'x/networking-l2gw-tempest-plugin'
     'x/novajoin-tempest-plugin'
     'x/ranger-tempest-plugin'
-    'x/tap-as-a-service-tempest-plugin'
     'x/trio2o'
     # No changes are merging in this
     # https://review.opendev.org/q/project:x%252Fnetworking-fortinet
diff --git a/tox.ini b/tox.ini
index e809f1c..51c38f2 100644
--- a/tox.ini
+++ b/tox.ini
@@ -61,7 +61,7 @@
   coverage combine
   coverage html -d cover
   coverage xml -o cover/coverage.xml
-  coverage report
+  coverage report -m --fail-under=76
 
 [testenv:debug]
 commands = oslo_debug_helper -t tempest/tests {posargs}
@@ -198,7 +198,7 @@
 commands =
     find . -type f -name "*.pyc" -delete
     tempest run --regex {[testenv:integrated-compute]regex1} --exclude-list ./tools/tempest-integrated-gate-compute-exclude-list.txt {posargs}
-    tempest run --combine --serial --regex {[testenv:integrated-compute]regex2} --exclude-list ./tools/tempest-integrated-gate-compute-exclude-list.txt {posargs}
+    tempest run --combine --serial --slowest --regex {[testenv:integrated-compute]regex2} --exclude-list ./tools/tempest-integrated-gate-compute-exclude-list.txt {posargs}
 
 [testenv:integrated-placement]
 envdir = .tox/tempest
@@ -359,8 +359,9 @@
   sphinx-apidoc -f -o doc/source/tests/image tempest/api/image
   sphinx-apidoc -f -o doc/source/tests/network tempest/api/network
   sphinx-apidoc -f -o doc/source/tests/object_storage tempest/api/object_storage
-  sphinx-apidoc -f -o doc/source/tests/scenario tempest/scenario
   sphinx-apidoc -f -o doc/source/tests/volume tempest/api/volume
+  sphinx-apidoc -f -o doc/source/tests/scenario tempest/scenario
+  sphinx-apidoc -f -o doc/source/tests/serial_tests tempest/serial_tests
   rm -rf doc/build
   sphinx-build -W -b html doc/source doc/build/html
 allowlist_externals =
@@ -377,8 +378,9 @@
    sphinx-apidoc -f -o doc/source/tests/image tempest/api/image
    sphinx-apidoc -f -o doc/source/tests/network tempest/api/network
    sphinx-apidoc -f -o doc/source/tests/object_storage tempest/api/object_storage
-   sphinx-apidoc -f -o doc/source/tests/scenario tempest/scenario
    sphinx-apidoc -f -o doc/source/tests/volume tempest/api/volume
+   sphinx-apidoc -f -o doc/source/tests/scenario tempest/scenario
+   sphinx-apidoc -f -o doc/source/tests/serial_tests tempest/serial_tests
    sphinx-build -W -b latex doc/source doc/build/pdf
    make -C doc/build/pdf
 
diff --git a/zuul.d/base.yaml b/zuul.d/base.yaml
index 0ac893a..3b402c8 100644
--- a/zuul.d/base.yaml
+++ b/zuul.d/base.yaml
@@ -24,6 +24,8 @@
               min_compute_nodes: "{{ groups['compute'] | default(['controller']) | length }}"
       test_results_stage_name: test_results
       zuul_copy_output:
+        '/var/log/openvswitch': logs
+        '/var/log/ovn': logs
         '{{ devstack_base_dir }}/tempest/etc/tempest.conf': logs
         '{{ devstack_base_dir }}/tempest/etc/accounts.yaml': logs
         '{{ devstack_base_dir }}/tempest/tempest.log': logs
diff --git a/zuul.d/integrated-gate.yaml b/zuul.d/integrated-gate.yaml
index 87b8af0..596acb1 100644
--- a/zuul.d/integrated-gate.yaml
+++ b/zuul.d/integrated-gate.yaml
@@ -8,6 +8,7 @@
       Integration test that runs all tests.
       Former name for this job was:
         * legacy-periodic-tempest-dsvm-all-master
+    timeout: 10800
     vars:
       tox_envlist: all
       tempest_test_regex: tempest
@@ -29,32 +30,6 @@
       tox_envlist: ipv6-only
 
 - job:
-    name: tempest-full
-    parent: devstack-tempest
-    description: |
-      Base integration test with Neutron networking and py27.
-      This job is supposed to run until stable/train setup only.
-      If you are running it on stable/ussuri gate onwards for python2.7
-      coverage then you need to do override-checkout with any stable
-      branch less than or equal to stable/train.
-      Former names for this job where:
-        * legacy-tempest-dsvm-neutron-full
-        * gate-tempest-dsvm-neutron-full-ubuntu-xenial
-    vars:
-      tox_envlist: full
-      devstack_localrc:
-        ENABLE_FILE_INJECTION: true
-        ENABLE_VOLUME_MULTIATTACH: true
-        USE_PYTHON3: False
-      devstack_services:
-        # NOTE(mriedem): Disable the cinder-backup service from tempest-full
-        # since tempest-full is in the integrated-gate project template but
-        # the backup tests do not really involve other services so they should
-        # be run in some more cinder-specific job, especially because the
-        # tests fail at a high rate (see bugs 1483434, 1813217, 1745168)
-        c-bak: false
-
-- job:
     name: tempest-extra-tests
     parent: tempest-full-py3
     description: |
@@ -73,7 +48,7 @@
     # this job definition is only for stable/xena onwards
     # and separate job definition until stable/wallaby
     branches:
-      regex: ^stable/(stein|train|ussuri|victoria|wallaby)$
+      regex: ^.*/(victoria|wallaby)$
       negate: true
     description: |
       Base integration test with Neutron networking, horizon, swift enable,
@@ -107,7 +82,7 @@
     nodeset: devstack-single-node-centos-9-stream
     # centos-9-stream is supported from yoga release onwards
     branches:
-      regex: ^stable/(stein|train|ussuri|victoria|wallaby|xena)$
+      regex: ^.*/(victoria|wallaby|xena)$
       negate: true
     description: |
       Base integration test on CentOS 9 stream
@@ -168,7 +143,7 @@
     nodeset: devstack-single-node-centos-9-stream
     # centos-9-stream is supported from yoga release onwards
     branches:
-      regex: ^stable/(stein|train|ussuri|victoria|wallaby|xena)$
+      regex: ^.*/(victoria|wallaby|xena)$
       negate: true
     description: |
       This job runs integration tests for compute. This is
@@ -255,7 +230,7 @@
     nodeset: openstack-two-node-jammy
     # This job runs on ubuntu Jammy and after stable/zed.
     branches:
-      regex: ^stable/(stein|train|ussuri|victoria|wallaby|xena|yoga|zed)$
+      regex: ^.*/(victoria|wallaby|xena|yoga|zed)$
       negate: true
     vars:
       # NOTE(gmann): Default concurrency is higher (number of cpu -2) which
@@ -263,6 +238,7 @@
       # requests to services and can cause more oom issues. To avoid the
       # oom issue, setting the concurrency to 4 in this job.
       tempest_concurrency: 4
+      tempest_set_src_dest_host: true
       devstack_localrc:
         USE_PYTHON3: true
       devstack_plugins:
@@ -319,7 +295,7 @@
     # till stable/wallaby, this job definition is only for stable/xena
     # onwards and separate job definition until stable/wallaby
     branches:
-      regex: ^stable/(stein|train|ussuri|victoria|wallaby)$
+      regex: ^.*/(victoria|wallaby)$
       negate: true
     vars:
       tox_envlist: slow
@@ -396,11 +372,6 @@
     parent: tempest-full-py3
     description: |
       This job runs the Tempest tests with scope and new defaults enabled.
-    # TODO: remove this once https://review.opendev.org/c/openstack/neutron-lib/+/864213
-    # fix is released in neutron-lib
-    required-projects:
-      - openstack/neutron-lib
-      - openstack/neutron
     vars:
       devstack_localrc:
         # Enabeling the scope and new defaults for services.
@@ -410,10 +381,9 @@
         # Keystone policies are changed to work for both system as well as
         # for project scoped, we need to keep scope check disable for
         # keystone.
-        # Nova and Glance have enabled the new defaults and scope by default
-        # in devstack.
+        # Nova, Glance, and Neutron have enabled the new defaults and scope
+        # by default in devstack.
         CINDER_ENFORCE_SCOPE: true
-        NEUTRON_ENFORCE_SCOPE: true
         PLACEMENT_ENFORCE_SCOPE: true
 
 - job:
@@ -421,12 +391,14 @@
     parent: tempest-all
     description: |
       Integration test that runs all tests on RBAC old defaults.
+    vars:
       devstack_localrc:
-        # NOTE(gmann): Nova and Glance have enabled the new defaults and scope
-        # by default in devstack so we need some jobs keep testing the old
-        # defaults until they are removed from service side.
+        # NOTE(gmann): Nova, Glance, and Neutron have enabled the new defaults
+        # and scope by default in devstack so we need some jobs keep testing
+        # the old defaults until they are removed from service side.
         NOVA_ENFORCE_SCOPE: false
         GLANCE_ENFORCE_SCOPE: false
+        NEUTRON_ENFORCE_SCOPE: false
 
 - project-template:
     name: integrated-gate-networking
@@ -437,10 +409,19 @@
     check:
       jobs:
         - grenade
+        # NOTE(gmann): These template are generic and used on stable branch
+        # as well as master testing. So grenade-skip-level on stable/2023.1
+        # which test stable/yoga to stable/2023.1 upgrade is non-voting.
         - grenade-skip-level:
             voting: false
             branches:
               - stable/2023.1
+        # on stable/2024.1(SLURP) grenade-skip-level is voting which test
+        # stable/2023.1 to stable/2024.1 upgrade. This is supposed to run on
+        # SLURP release only.
+        - grenade-skip-level:
+            branches:
+              - ^.*/2024.1
         - tempest-integrated-networking
         # Do not run it on ussuri until below issue is fixed
         # https://storyboard.openstack.org/#!/story/2010057
@@ -448,19 +429,25 @@
         # described in https://review.opendev.org/872341
         - openstacksdk-functional-devstack:
             branches:
-              regex: ^stable/(ussuri|victoria|wallaby)$
+              regex: ^.*/(victoria|wallaby)$
               negate: true
     gate:
       jobs:
         - grenade
         - tempest-integrated-networking
+        # on stable/2024.1(SLURP) grenade-skip-level is voting which test
+        # stable/2023.1 to stable/2024.1 upgrade. This is supposed to run on
+        # SLURP release only.
+        - grenade-skip-level:
+            branches:
+              - ^.*/2024.1
         # Do not run it on ussuri until below issue is fixed
         # https://storyboard.openstack.org/#!/story/2010057
         # and job is broken up to wallaby branch due to the issue
         # described in https://review.opendev.org/872341
         - openstacksdk-functional-devstack:
             branches:
-              regex: ^stable/(ussuri|victoria|wallaby)$
+              regex: ^.*/(victoria|wallaby)$
               negate: true
 
 - project-template:
@@ -477,6 +464,9 @@
     # only from master(or the branch it was meant to run).
     check:
       jobs:
+        # NOTE(gmann): These template are generic and used on stable branch
+        # as well as master testing. So grenade-skip-level on stable/2023.1
+        # which test stable/yoga to stable/2023.1 upgrade is non-voting.
         - grenade-skip-level:
             voting: false
             branches:
@@ -489,35 +479,39 @@
         # to make sure we do not run this job on older than 2023.2 gate.
         - grenade-skip-level-always:
             branches:
+              - ^.*/2023.2
+              - ^.*/2024.1
               - master
         - tempest-integrated-compute
         # centos-8-stream is tested from wallaby -> yoga branches
         - tempest-integrated-compute-centos-8-stream:
-            branches: ^stable/(wallaby|xena|yoga).*$
+            branches: ^.*/(wallaby|xena|yoga)$
         # Do not run it on ussuri until below issue is fixed
         # https://storyboard.openstack.org/#!/story/2010057
         # and job is broken up to wallaby branch due to the issue
         # described in https://review.opendev.org/872341
         - openstacksdk-functional-devstack:
             branches:
-              regex: ^stable/(ussuri|victoria|wallaby)$
+              regex: ^.*/(victoria|wallaby)$
               negate: true
     gate:
       jobs:
         - grenade-skip-level-always:
             branches:
+              - ^.*/2023.2
+              - ^.*/2024.1
               - master
         - tempest-integrated-compute
         - openstacksdk-functional-devstack:
             branches:
-              regex: ^stable/(ussuri|victoria|wallaby)$
+              regex: ^.*/(victoria|wallaby)$
               negate: true
     periodic-weekly:
       jobs:
         # centos-9-stream is tested from zed release onwards
         - tempest-integrated-compute-centos-9-stream:
             branches:
-              regex: ^stable/(stein|train|ussuri|victoria|wallaby|xena|yoga)$
+              regex: ^.*/(victoria|wallaby|xena|yoga)$
               negate: true
 
 - project-template:
@@ -530,10 +524,19 @@
     check:
       jobs:
         - grenade
+        # NOTE(gmann): These template are generic and used on stable branch
+        # as well as master testing. So grenade-skip-level on stable/2023.1
+        # which test stable/yoga to stable/2023.1 upgrade is non-voting.
         - grenade-skip-level:
             voting: false
             branches:
               - stable/2023.1
+        # on stable/2024.1(SLURP) grenade-skip-level is voting which test
+        # stable/2023.1 to stable/2024.1 upgrade. This is supposed to run on
+        # SLURP release only.
+        - grenade-skip-level:
+            branches:
+              - ^.*/2024.1
         - tempest-integrated-placement
         # Do not run it on ussuri until below issue is fixed
         # https://storyboard.openstack.org/#!/story/2010057
@@ -541,19 +544,25 @@
         # described in https://review.opendev.org/872341
         - openstacksdk-functional-devstack:
             branches:
-              regex: ^stable/(ussuri|victoria|wallaby)$
+              regex: ^.*/(victoria|wallaby)$
               negate: true
     gate:
       jobs:
         - grenade
         - tempest-integrated-placement
+        # on stable/2024.1(SLURP) grenade-skip-level is voting which test
+        # stable/2023.1 to stable/2024.1 upgrade. This is supposed to run on
+        # SLURP release only.
+        - grenade-skip-level:
+            branches:
+              - ^.*/2024.1
         # Do not run it on ussuri until below issue is fixed
         # https://storyboard.openstack.org/#!/story/2010057
         # and job is broken up to wallaby branch due to the issue
         # described in https://review.opendev.org/872341
         - openstacksdk-functional-devstack:
             branches:
-              regex: ^stable/(ussuri|victoria|wallaby)$
+              regex: ^.*/(victoria|wallaby)$
               negate: true
 
 - project-template:
@@ -566,10 +575,19 @@
     check:
       jobs:
         - grenade
+        # NOTE(gmann): These template are generic and used on stable branch
+        # as well as master testing. So grenade-skip-level on stable/2023.1
+        # which test stable/yoga to stable/2023.1 upgrade is non-voting.
         - grenade-skip-level:
             voting: false
             branches:
               - stable/2023.1
+        # on stable/2024.1(SLURP) grenade-skip-level is voting which test
+        # stable/2023.1 to stable/2024.1 upgrade. This is supposed to run on
+        # SLURP release only.
+        - grenade-skip-level:
+            branches:
+              - ^.*/2024.1
         - tempest-integrated-storage
         # Do not run it on ussuri until below issue is fixed
         # https://storyboard.openstack.org/#!/story/2010057
@@ -577,11 +595,17 @@
         # described in https://review.opendev.org/872341
         - openstacksdk-functional-devstack:
             branches:
-              regex: ^stable/(ussuri|victoria|wallaby)$
+              regex: ^.*/(victoria|wallaby)$
               negate: true
     gate:
       jobs:
         - grenade
+        # on stable/2024.1(SLURP) grenade-skip-level is voting which test
+        # stable/2023.1 to stable/2024.1 upgrade. This is supposed to run on
+        # SLURP release only.
+        - grenade-skip-level:
+            branches:
+              - ^.*/2024.1
         - tempest-integrated-storage
         # Do not run it on ussuri until below issue is fixed
         # https://storyboard.openstack.org/#!/story/2010057
@@ -589,7 +613,7 @@
         # described in https://review.opendev.org/872341
         - openstacksdk-functional-devstack:
             branches:
-              regex: ^stable/(ussuri|victoria|wallaby)$
+              regex: ^.*/(victoria|wallaby)$
               negate: true
 
 - project-template:
@@ -602,6 +626,12 @@
     check:
       jobs:
         - grenade
+        # on stable/2024.1(SLURP) grenade-skip-level is voting which test
+        # stable/2023.1 to stable/2024.1 upgrade. This is supposed to run on
+        # SLURP release only.
+        - grenade-skip-level:
+            branches:
+              - ^.*/2024.1
         - tempest-integrated-object-storage
         # Do not run it on ussuri until below issue is fixed
         # https://storyboard.openstack.org/#!/story/2010057
@@ -609,11 +639,17 @@
         # described in https://review.opendev.org/872341
         - openstacksdk-functional-devstack:
             branches:
-              regex: ^stable/(ussuri|victoria|wallaby)$
+              regex: ^.*/(victoria|wallaby)$
               negate: true
     gate:
       jobs:
         - grenade
+        # on stable/2024.1(SLURP) grenade-skip-level is voting which test
+        # stable/2023.1 to stable/2024.1 upgrade. This is supposed to run on
+        # SLURP release only.
+        - grenade-skip-level:
+            branches:
+              - ^.*/2024.1
         - tempest-integrated-object-storage
         # Do not run it on ussuri until below issue is fixed
         # https://storyboard.openstack.org/#!/story/2010057
@@ -621,5 +657,5 @@
         # described in https://review.opendev.org/872341
         - openstacksdk-functional-devstack:
             branches:
-              regex: ^stable/(ussuri|victoria|wallaby)$
+              regex: ^.*/(victoria|wallaby)$
               negate: true
diff --git a/zuul.d/project.yaml b/zuul.d/project.yaml
index 9a7d14d..e2505cb 100644
--- a/zuul.d/project.yaml
+++ b/zuul.d/project.yaml
@@ -37,9 +37,9 @@
         # if things are working in latest and oldest it will work in between
         # stable branches also. If anything is breaking we will be catching
         # those in respective stable branch gate.
-        - tempest-full-2023-2:
+        - tempest-full-2024-1:
             irrelevant-files: *tempest-irrelevant-files
-        - tempest-full-yoga:
+        - tempest-full-zed:
             irrelevant-files: *tempest-irrelevant-files
         - tempest-multinode-full-py3:
             irrelevant-files: *tempest-irrelevant-files
@@ -111,6 +111,8 @@
             irrelevant-files: *tempest-irrelevant-files
         - grenade:
             irrelevant-files: *tempest-irrelevant-files
+        - grenade-skip-level-always:
+            irrelevant-files: *tempest-irrelevant-files
         - neutron-ovs-tempest-dvr:
             voting: false
             irrelevant-files: *tempest-irrelevant-files
@@ -140,6 +142,8 @@
             irrelevant-files: *tempest-irrelevant-files
         - grenade:
             irrelevant-files: *tempest-irrelevant-files
+        - grenade-skip-level-always:
+            irrelevant-files: *tempest-irrelevant-files
         - tempest-ipv6-only:
             irrelevant-files: *tempest-irrelevant-files-3
         - tempest-multinode-full-py3:
@@ -151,7 +155,7 @@
         - nova-live-migration:
             irrelevant-files: *tempest-irrelevant-files
         - ironic-tempest-bios-ipmi-direct-tinyipa:
-            irrelevant-files: *tempest-irrelevant-files
+             irrelevant-files: *tempest-irrelevant-files
     experimental:
       jobs:
         - nova-multi-cell
@@ -166,7 +170,6 @@
         - tempest-all-rbac-old-defaults
         - tempest-full-parallel
         - tempest-full-zed-extra-tests
-        - tempest-full-yoga-extra-tests
         - tempest-full-enforce-scope-new-defaults-zed
         - neutron-ovs-tempest-dvr-ha-multinode-full:
             irrelevant-files: *tempest-irrelevant-files
@@ -186,18 +189,18 @@
             irrelevant-files: *tempest-irrelevant-files
     periodic-stable:
       jobs:
+        - tempest-full-2024-1
         - tempest-full-2023-2
         - tempest-full-2023-1
         - tempest-full-zed
-        - tempest-full-yoga
+        - tempest-slow-2024-1
         - tempest-slow-2023-2
         - tempest-slow-2023-1
         - tempest-slow-zed
-        - tempest-slow-yoga
+        - tempest-full-2024-1-extra-tests
         - tempest-full-2023-2-extra-tests
         - tempest-full-2023-1-extra-tests
         - tempest-full-zed-extra-tests
-        - tempest-full-yoga-extra-tests
     periodic:
       jobs:
         - tempest-all
diff --git a/zuul.d/stable-jobs.yaml b/zuul.d/stable-jobs.yaml
index 2fdc2af..a662685 100644
--- a/zuul.d/stable-jobs.yaml
+++ b/zuul.d/stable-jobs.yaml
@@ -1,5 +1,11 @@
 # NOTE(gmann): This file includes all stable release jobs definition.
 - job:
+    name: tempest-full-2024-1
+    parent: tempest-full-py3
+    nodeset: openstack-single-node-jammy
+    override-checkout: stable/2024.1
+
+- job:
     name: tempest-full-2023-2
     parent: tempest-full-py3
     nodeset: openstack-single-node-jammy
@@ -18,10 +24,10 @@
     override-checkout: stable/zed
 
 - job:
-    name: tempest-full-yoga
-    parent: tempest-full-py3
-    nodeset: openstack-single-node-focal
-    override-checkout: stable/yoga
+    name: tempest-full-2024-1-extra-tests
+    parent: tempest-extra-tests
+    nodeset: openstack-single-node-jammy
+    override-checkout: stable/2024.1
 
 - job:
     name: tempest-full-2023-2-extra-tests
@@ -42,10 +48,10 @@
     override-checkout: stable/zed
 
 - job:
-    name: tempest-full-yoga-extra-tests
-    parent: tempest-extra-tests
-    nodeset: openstack-single-node-focal
-    override-checkout: stable/yoga
+    name: tempest-slow-2024-1
+    parent: tempest-slow-py3
+    nodeset: openstack-two-node-jammy
+    override-checkout: stable/2024.1
 
 - job:
     name: tempest-slow-2023-2
@@ -72,20 +78,13 @@
     override-checkout: stable/zed
 
 - job:
-    name: tempest-slow-yoga
-    parent: tempest-slow-py3
-    nodeset: openstack-two-node-focal
-    override-checkout: stable/yoga
-
-- job:
     name: tempest-full-py3
     parent: devstack-tempest
     # This job version is to use the 'full' tox env which
     # is available for stable/ussuri to stable/wallaby also.
     branches:
-      - stable/ussuri
-      - stable/victoria
-      - stable/wallaby
+      - ^.*/victoria
+      - ^.*/wallaby
     description: |
       Base integration test with Neutron networking, horizon, swift enable,
       and py3.
@@ -108,89 +107,16 @@
         horizon: true
 
 - job:
-    name: tempest-full-py3
-    parent: devstack-tempest
-    # This job version is with swift disabled on py3
-    # as swift was not ready on py3 until stable/train.
-    branches:
-      - stable/stein
-      - stable/train
-    description: |
-      Base integration test with Neutron networking, swift disabled, and py3.
-      Former names for this job where:
-        * legacy-tempest-dsvm-py35
-        * gate-tempest-dsvm-py35
-    required-projects:
-      - openstack/horizon
-    vars:
-      tox_envlist: full
-      devstack_localrc:
-        USE_PYTHON3: true
-        FORCE_CONFIG_DRIVE: true
-        ENABLE_VOLUME_MULTIATTACH: true
-        GLANCE_USE_IMPORT_WORKFLOW: True
-      devstack_plugins:
-        neutron: https://opendev.org/openstack/neutron
-      devstack_local_conf:
-        post-config:
-          "/$NEUTRON_CORE_PLUGIN_CONF":
-            ovs:
-              bridge_mappings: public:br-ex
-              resource_provider_bandwidths: br-ex:1000000:1000000
-        test-config:
-          $TEMPEST_CONFIG:
-            network-feature-enabled:
-              qos_placement_physnet: public
-      devstack_services:
-        # Enbale horizon so that we can run horizon test.
-        horizon: true
-        s-account: false
-        s-container: false
-        s-object: false
-        s-proxy: false
-        # without Swift, c-bak cannot run (in the Gate at least)
-        # NOTE(mriedem): Disable the cinder-backup service from
-        # tempest-full-py3 since tempest-full-py3 is in the integrated-gate-py3
-        # project template but the backup tests do not really involve other
-        # services so they should be run in some more cinder-specific job,
-        # especially because the tests fail at a high rate (see bugs 1483434,
-        # 1813217, 1745168)
-        c-bak: false
-        neutron-placement: true
-        neutron-qos: true
-
-- job:
-    name: tempest-multinode-full-py3
-    parent: tempest-multinode-full
-    nodeset: openstack-two-node-bionic
-    # This job runs on Bionic.
-    branches:
-      - stable/stein
-      - stable/train
-      - stable/ussuri
-    vars:
-      devstack_localrc:
-        USE_PYTHON3: true
-      devstack_plugins:
-        neutron: https://opendev.org/openstack/neutron
-      devstack_services:
-        neutron-trunk: true
-    group-vars:
-      subnode:
-        devstack_localrc:
-          USE_PYTHON3: true
-
-- job:
     name: tempest-multinode-full-py3
     parent: tempest-multinode-full
     nodeset: openstack-two-node-focal
     # This job runs on Focal and supposed to run until stable/zed.
     branches:
-      - stable/victoria
-      - stable/wallaby
-      - stable/xena
-      - stable/yoga
-      - stable/zed
+      - ^.*/victoria
+      - ^.*/wallaby
+      - ^.*/xena
+      - ^.*/yoga
+      - ^.*/zed
     vars:
       devstack_localrc:
         USE_PYTHON3: true
@@ -209,11 +135,11 @@
     nodeset: openstack-two-node-focal
     # This job runs on Focal and on python2. This is for stable/victoria to stable/zed.
     branches:
-      - stable/victoria
-      - stable/wallaby
-      - stable/xena
-      - stable/yoga
-      - stable/zed
+      - ^.*/victoria
+      - ^.*/wallaby
+      - ^.*/xena
+      - ^.*/yoga
+      - ^.*/zed
     vars:
       devstack_localrc:
         USE_PYTHON3: False
@@ -223,56 +149,13 @@
           USE_PYTHON3: False
 
 - job:
-    name: tempest-multinode-full
-    parent: tempest-multinode-full-base
-    nodeset: openstack-two-node-bionic
-    # This job runs on Bionic and on python2. This is for stable/stein and stable/train.
-    # This job is prepared to make sure all stable branches from stable/stein till stable/train
-    # will keep running on bionic. This can be removed once stable/train is EOL.
-    branches:
-      - stable/stein
-      - stable/train
-      - stable/ussuri
-    vars:
-      devstack_localrc:
-        USE_PYTHON3: False
-    group-vars:
-      subnode:
-        devstack_localrc:
-          USE_PYTHON3: False
-
-- job:
-    name: tempest-slow-py3
-    parent: tempest-slow
-    # This job version is with swift disabled on py3
-    # as swift was not ready on py3 until stable/train.
-    branches:
-      - stable/stein
-      - stable/train
-    vars:
-      devstack_localrc:
-        USE_PYTHON3: true
-      devstack_services:
-        s-account: false
-        s-container: false
-        s-object: false
-        s-proxy: false
-        # without Swift, c-bak cannot run (in the Gate at least)
-        c-bak: false
-    group-vars:
-      subnode:
-        devstack_localrc:
-          USE_PYTHON3: true
-
-- job:
     name: tempest-slow-py3
     parent: tempest-slow
     # This job version is to use the 'slow-serial' tox env for
     # the stable/ussuri to stable/wallaby testing.
     branches:
-      - stable/ussuri
-      - stable/victoria
-      - stable/wallaby
+      - ^.*/victoria
+      - ^.*/wallaby
     vars:
       tox_envlist: slow-serial
 
@@ -287,12 +170,9 @@
     # This job is not used after stable/xena and can be
     # removed once stable/xena is EOL.
     branches:
-      - stable/stein
-      - stable/train
-      - stable/ussuri
-      - stable/victoria
-      - stable/wallaby
-      - stable/xena
+      - ^.*/victoria
+      - ^.*/wallaby
+      - ^.*/xena
 
 - job:
     name: tempest-integrated-compute-centos-8-stream
@@ -301,9 +181,9 @@
     voting: false
     nodeset: devstack-single-node-centos-8-stream
     branches:
-      - stable/wallaby
-      - stable/xena
-      - stable/yoga
+      - ^.*/wallaby
+      - ^.*/xena
+      - ^.*/yoga
     description: |
       This job runs integration tests for compute. This is
       subset of 'tempest-full-py3' job and run Nova, Neutron, Cinder (except backup tests)
@@ -320,9 +200,9 @@
     # TODO(gmann): Make this job non voting until bug#1957941 if fixed.
     voting: false
     branches:
-      - stable/wallaby
-      - stable/xena
-      - stable/yoga
+      - ^.*/wallaby
+      - ^.*/xena
+      - ^.*/yoga
     nodeset: devstack-single-node-centos-8-stream
     description: |
       Base integration test with Neutron networking and py36 running
diff --git a/zuul.d/tempest-specific.yaml b/zuul.d/tempest-specific.yaml
index 10490b4..296682e 100644
--- a/zuul.d/tempest-specific.yaml
+++ b/zuul.d/tempest-specific.yaml
@@ -58,6 +58,8 @@
       Base integration test with Neutron networking, IPv6 and py3.
     vars:
       tox_envlist: full
+      run_tempest_cleanup: true
+      run_tempest_cleanup_prefix: true
       devstack_localrc:
         USE_PYTHON3: true
         FORCE_CONFIG_DRIVE: true
