Merge "Allows to skip wait for volume create"
diff --git a/doc/source/test_removal.rst b/doc/source/test_removal.rst
index a3bb645..bb223b1 100644
--- a/doc/source/test_removal.rst
+++ b/doc/source/test_removal.rst
@@ -50,19 +50,10 @@
 a Depends-On in the commit message for the commit which moved the test into
 another repo.
 
-For prong 2 you can use OpenStack-Health:
+For prong 2 you can use subunit2sql:
 
-Using OpenStack-Health
-""""""""""""""""""""""
-
-Go to: http://status.openstack.org/openstack-health and then navigate to a per
-test page for six months. You'll end up with a page that will graph the success
-and failure rates on the bottom graph. For example, something like `this URL`_.
-
-.. _this URL: http://status.openstack.org/openstack-health/#/test/tempest.scenario.test_volume_boot_pattern.TestVolumeBootPatternV2.test_volume_boot_pattern?groupKey=project&resolutionKey=day&duration=P6M
-
-The Old Way using subunit2sql directly
-""""""""""""""""""""""""""""""""""""""
+Using subunit2sql directly
+""""""""""""""""""""""""""
 
 ``SELECT * from tests where test_id like "%test_id%";``
 (where ``$test_id`` is the full test_id, but truncated to the class because of
diff --git a/releasenotes/notes/end-of-support-for-ussuri-68583f47805eff02.yaml b/releasenotes/notes/end-of-support-for-ussuri-68583f47805eff02.yaml
new file mode 100644
index 0000000..1a750d9
--- /dev/null
+++ b/releasenotes/notes/end-of-support-for-ussuri-68583f47805eff02.yaml
@@ -0,0 +1,13 @@
+---
+prelude: |
+    This is an intermediate release during the Zed development cycle to
+    mark the end of support for EM Ussuri release in Tempest.
+    After this release, Tempest will support below OpenStack Releases:
+
+    * Yoga
+    * Xena
+    * Wallaby
+    * Victoria
+
+    Current development of Tempest is for OpenStack Zed development
+    cycle.
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 0fe49f9..c411aa9 100644
--- a/tempest/api/image/v2/admin/test_images_metadefs_namespaces.py
+++ b/tempest/api/image/v2/admin/test_images_metadefs_namespaces.py
@@ -64,6 +64,7 @@
         self.assertEqual(False, body['protected'])
         # now able to delete the non-protected namespace
         self.namespaces_client.delete_namespace(namespace_name)
+        self.namespaces_client.wait_for_resource_deletion(namespace_name)
 
     def _cleanup_namespace(self, namespace_name):
         body = self.namespaces_client.show_namespace(namespace_name)
diff --git a/tempest/lib/common/utils/linux/remote_client.py b/tempest/lib/common/utils/linux/remote_client.py
index 224f3bf..d0cdc25 100644
--- a/tempest/lib/common/utils/linux/remote_client.py
+++ b/tempest/lib/common/utils/linux/remote_client.py
@@ -75,7 +75,7 @@
         :param ip_address: IP address to ssh to
         :param username: Ssh username
         :param password: Ssh password
-        :param pkey: Ssh public key
+        :param pkey: Ssh private key
         :param server: Server dict, used for debugging purposes
         :param servers_client: Servers client, used for debugging purposes
         :param ssh_timeout: Timeout in seconds to wait for the ssh banner
diff --git a/tempest/lib/services/image/v2/namespaces_client.py b/tempest/lib/services/image/v2/namespaces_client.py
index c0fa74a..886ef00 100644
--- a/tempest/lib/services/image/v2/namespaces_client.py
+++ b/tempest/lib/services/image/v2/namespaces_client.py
@@ -16,6 +16,7 @@
 from oslo_serialization import jsonutils as json
 
 from tempest.lib.common import rest_client
+from tempest.lib import exceptions as lib_exc
 
 
 class NamespacesClient(rest_client.RestClient):
@@ -60,6 +61,13 @@
         body = json.loads(body)
         return rest_client.ResponseBody(resp, body)
 
+    def is_resource_deleted(self, id):
+        try:
+            self.show_namespace(id)
+        except lib_exc.NotFound:
+            return True
+        return False
+
     def update_namespace(self, namespace, **kwargs):
         """Update a namespace.
 
diff --git a/tools/check_logs.py b/tools/check_logs.py
index 8ab3af2..8ea94e8 100755
--- a/tools/check_logs.py
+++ b/tools/check_logs.py
@@ -136,7 +136,7 @@
     with open(ALLOW_LIST_FILE) as stream:
         loaded = yaml.safe_load(stream)
         if loaded:
-            for (name, l) in loaded.values():
+            for (name, l) in loaded.items():
                 for w in l:
                     assert 'module' in w, 'no module in %s' % name
                     assert 'message' in w, 'no message in %s' % name
diff --git a/zuul.d/integrated-gate.yaml b/zuul.d/integrated-gate.yaml
index d35e25d..3dd8c49 100644
--- a/zuul.d/integrated-gate.yaml
+++ b/zuul.d/integrated-gate.yaml
@@ -87,6 +87,19 @@
         horizon: true
 
 - job:
+    name: tempest-full-centos-9-stream
+    parent: tempest-full-py3
+    nodeset: devstack-single-node-centos-9-stream
+    # centos-9-stream is supported from yoga release onwards
+    branches: ^(?!stable/(pike|queens|rocky|stein|train|ussuri|victoria|wallaby|xena)).*$
+    description: |
+      Base integration test on CentOS 9 stream
+    vars:
+      # Required until bug/1949606 is resolved when using libvirt and QEMU
+      # >=5.0.0 with a [libvirt]virt_type of qemu (TCG).
+      configure_swap_size: 4096
+
+- job:
     name: tempest-integrated-networking
     parent: devstack-tempest
     branches: ^(?!stable/ocata).*$
@@ -129,17 +142,16 @@
         c-bak: false
 
 - job:
-    name: tempest-integrated-compute-centos-8-stream
+    name: tempest-integrated-compute-centos-9-stream
     parent: tempest-integrated-compute
-    # TODO(gmann): Make this job non voting until bug#1957941 if fixed.
-    voting: false
-    nodeset: devstack-single-node-centos-8-stream
-    branches: ^(?!stable/(ocata|pike|queens|rocky|stein|train|ussuri|victoria)).*$
+    nodeset: devstack-single-node-centos-9-stream
+    # centos-9-stream is supported from yoga release onwards
+    branches: ^(?!stable/(pike|queens|rocky|stein|train|ussuri|victoria|wallaby|xena)).*$
     description: |
       This job runs integration tests for compute. This is
       subset of 'tempest-full-py3' job and run Nova, Neutron, Cinder (except backup tests)
       and Glance related tests. This is meant to be run on Nova gate only.
-      This version of the job also uses CentOS 8 stream.
+      This version of the job also uses CentOS 9 stream.
     vars:
       # Required until bug/1949606 is resolved when using libvirt and QEMU
       # >=5.0.0 with a [libvirt]virt_type of qemu (TCG).
@@ -352,17 +364,27 @@
       (Nova, Neutron, Cinder and Glance related) in check and gate
       for the Nova integrated gate. This is meant to be
       run on Nova gate only.
+    # NOTE(gmann): This template is used for stable branches also so when we
+    # add/remove jobs here we need to make sure we should not change the
+    # behaviour for stable branches. For example, with branch variant we need
+    # to make sure old job keep running on stable branches and the new one run
+    # only from master(or the branch it was meant to run).
     check:
       jobs:
         - grenade-skip-level:
             voting: false
         - tempest-integrated-compute
-        - tempest-integrated-compute-centos-8-stream
+        # centos-8-stream is tested from wallaby -> yoga branches
+        - tempest-integrated-compute-centos-8-stream:
+            branches: ^stable/(wallaby|xena|yoga).*$
+        # centos-9-stream is tested from zed release onwards
+        - tempest-integrated-compute-centos-9-stream:
+            branches: ^(?!stable/(pike|queens|rocky|stein|train|ussuri|victoria|wallaby|xena|yoga)).*$
         - openstacksdk-functional-devstack
     gate:
       jobs:
         - tempest-integrated-compute
-        - tempest-integrated-compute-centos-8-stream
+        - tempest-integrated-compute-centos-9-stream
         - openstacksdk-functional-devstack
 
 - project-template:
diff --git a/zuul.d/project.yaml b/zuul.d/project.yaml
index f687cb1..b79cdc9 100644
--- a/zuul.d/project.yaml
+++ b/zuul.d/project.yaml
@@ -43,8 +43,6 @@
             irrelevant-files: *tempest-irrelevant-files
         - tempest-full-victoria-py3:
             irrelevant-files: *tempest-irrelevant-files
-        - tempest-full-ussuri-py3:
-            irrelevant-files: *tempest-irrelevant-files
         - tempest-multinode-full-py3:
             irrelevant-files: *tempest-irrelevant-files
         - tempest-tox-plugin-sanity-check:
@@ -122,8 +120,6 @@
             irrelevant-files: *tempest-irrelevant-files
         - openstack-tox-bashate:
             irrelevant-files: *tempest-irrelevant-files-2
-        - tempest-full-py3-centos-8-stream:
-            irrelevant-files: *tempest-irrelevant-files
         - tempest-full-centos-9-stream:
             irrelevant-files: *tempest-irrelevant-files
     gate:
@@ -139,8 +135,6 @@
             irrelevant-files: *tempest-irrelevant-files
         - tempest-full-py3:
             irrelevant-files: *tempest-irrelevant-files
-        - tempest-full-py3-centos-8-stream:
-            irrelevant-files: *tempest-irrelevant-files
         - grenade:
             irrelevant-files: *tempest-irrelevant-files
         - tempest-ipv6-only:
@@ -173,7 +167,6 @@
         - tempest-full-xena
         - tempest-full-wallaby-py3
         - tempest-full-victoria-py3
-        - tempest-full-ussuri-py3
     periodic:
       jobs:
         - tempest-all
diff --git a/zuul.d/stable-jobs.yaml b/zuul.d/stable-jobs.yaml
index f3b5716..edee044 100644
--- a/zuul.d/stable-jobs.yaml
+++ b/zuul.d/stable-jobs.yaml
@@ -20,12 +20,6 @@
     override-checkout: stable/victoria
 
 - job:
-    name: tempest-full-ussuri-py3
-    parent: tempest-full-py3
-    nodeset: openstack-single-node-bionic
-    override-checkout: stable/ussuri
-
-- job:
     name: tempest-full-py3
     parent: devstack-tempest
     # This job version is with swift disabled on py3
@@ -204,3 +198,41 @@
       - stable/victoria
       - stable/wallaby
       - stable/xena
+
+- job:
+    name: tempest-integrated-compute-centos-8-stream
+    parent: tempest-integrated-compute
+    # TODO(gmann): Make this job non voting until bug#1957941 if fixed.
+    voting: false
+    nodeset: devstack-single-node-centos-8-stream
+    branches:
+      - stable/wallaby
+      - stable/xena
+      - stable/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)
+      and Glance related tests. This is meant to be run on Nova gate only.
+      This version of the job also uses CentOS 8 stream.
+    vars:
+      # Required until bug/1949606 is resolved when using libvirt and QEMU
+      # >=5.0.0 with a [libvirt]virt_type of qemu (TCG).
+      configure_swap_size: 4096
+
+- job:
+    name: tempest-full-py3-centos-8-stream
+    parent: tempest-full-py3
+    # TODO(gmann): Make this job non voting until bug#1957941 if fixed.
+    voting: false
+    branches:
+      - stable/wallaby
+      - stable/xena
+      - stable/yoga
+    nodeset: devstack-single-node-centos-8-stream
+    description: |
+      Base integration test with Neutron networking and py36 running
+      on CentOS 8 stream
+    vars:
+      # Required until bug/1949606 is resolved when using libvirt and QEMU
+      # >=5.0.0 with a [libvirt]virt_type of qemu (TCG).
+      configure_swap_size: 4096
diff --git a/zuul.d/tempest-specific.yaml b/zuul.d/tempest-specific.yaml
index a4a4b67..822feaa 100644
--- a/zuul.d/tempest-specific.yaml
+++ b/zuul.d/tempest-specific.yaml
@@ -69,26 +69,6 @@
         c-bak: false
 
 - job:
-    name: tempest-full-py3-centos-8-stream
-    parent: tempest-full-py3
-    # TODO(gmann): Make this job non voting until bug#1957941 if fixed.
-    voting: false
-    nodeset: devstack-single-node-centos-8-stream
-    description: |
-      Base integration test with Neutron networking and py36 running
-      on CentOS 8 stream
-    vars:
-      # Required until bug/1949606 is resolved when using libvirt and QEMU
-      # >=5.0.0 with a [libvirt]virt_type of qemu (TCG).
-      configure_swap_size: 4096
-
-- job:
-    name: tempest-full-centos-9-stream
-    parent: tempest-full-py3-centos-8-stream
-    voting: true
-    nodeset: devstack-single-node-centos-9-stream
-
-- job:
     name: tempest-tox-plugin-sanity-check
     parent: tox
     description: |