Merge "Add test for instance boot after snapshot deletion"
diff --git a/tempest/api/compute/admin/test_aggregates_negative.py b/tempest/api/compute/admin/test_aggregates_negative.py
index c284370..575d7fc 100644
--- a/tempest/api/compute/admin/test_aggregates_negative.py
+++ b/tempest/api/compute/admin/test_aggregates_negative.py
@@ -157,12 +157,14 @@
         self.useFixture(fixtures.LockFixture('availability_zone'))
         aggregate = self._create_test_aggregate()
 
-        self.client.add_host(aggregate['id'], host=self.hosts[0])
+        hosts = [host for host in self.hosts if (
+            host not in CONF.compute.target_hosts_to_avoid)]
+        self.client.add_host(aggregate['id'], host=hosts[0])
         self.addCleanup(self.client.remove_host, aggregate['id'],
-                        host=self.hosts[0])
+                        host=hosts[0])
 
         self.assertRaises(lib_exc.Conflict, self.client.add_host,
-                          aggregate['id'], host=self.hosts[0])
+                          aggregate['id'], host=hosts[0])
 
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('7a53af20-137a-4e44-a4ae-e19260e626d9')
@@ -171,13 +173,15 @@
         self.useFixture(fixtures.LockFixture('availability_zone'))
         aggregate = self._create_test_aggregate()
 
-        self.client.add_host(aggregate['id'], host=self.hosts[0])
+        hosts = [host for host in self.hosts if (
+            host not in CONF.compute.target_hosts_to_avoid)]
+        self.client.add_host(aggregate['id'], host=hosts[0])
         self.addCleanup(self.client.remove_host, aggregate['id'],
-                        host=self.hosts[0])
+                        host=hosts[0])
 
         self.assertRaises(lib_exc.Forbidden,
                           self.aggregates_client.remove_host,
-                          aggregate['id'], host=self.hosts[0])
+                          aggregate['id'], host=hosts[0])
 
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('95d6a6fa-8da9-4426-84d0-eec0329f2e4d')
diff --git a/tempest/api/volume/test_volumes_get.py b/tempest/api/volume/test_volumes_get.py
index 9b79f38..640441a 100644
--- a/tempest/api/volume/test_volumes_get.py
+++ b/tempest/api/volume/test_volumes_get.py
@@ -18,7 +18,6 @@
 
 from tempest.api.volume 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
@@ -38,10 +37,7 @@
         # Create a volume
         kwargs['name'] = v_name
         kwargs['metadata'] = metadata
-        volume = self.volumes_client.create_volume(**kwargs)['volume']
-        self.addCleanup(self.delete_volume, self.volumes_client, volume['id'])
-        waiters.wait_for_volume_resource_status(self.volumes_client,
-                                                volume['id'], 'available')
+        volume = self.create_volume(wait_until='available', **kwargs)
         self.assertEqual(volume['name'], v_name,
                          "The created volume name is not equal "
                          "to the requested name")
@@ -103,11 +99,7 @@
         params = {'description': new_v_desc,
                   'availability_zone': volume['availability_zone'],
                   'size': CONF.volume.volume_size}
-        new_volume = self.volumes_client.create_volume(**params)['volume']
-        self.addCleanup(self.delete_volume, self.volumes_client,
-                        new_volume['id'])
-        waiters.wait_for_volume_resource_status(self.volumes_client,
-                                                new_volume['id'], 'available')
+        new_volume = self.create_volume(wait_until='available', **params)
 
         params = {'name': volume['name'],
                   'description': volume['description']}
diff --git a/tempest/common/compute.py b/tempest/common/compute.py
index 49fcaf2..b885b83 100644
--- a/tempest/common/compute.py
+++ b/tempest/common/compute.py
@@ -255,6 +255,9 @@
         if CONF.compute.compute_volume_common_az:
             params.setdefault('availability_zone',
                               CONF.compute.compute_volume_common_az)
+        if CONF.volume.volume_type:
+            params.setdefault('volume_type',
+                              CONF.volume.volume_type)
         volume = volumes_client.create_volume(**params)
         try:
             waiters.wait_for_volume_resource_status(volumes_client,
diff --git a/zuul.d/integrated-gate.yaml b/zuul.d/integrated-gate.yaml
index 49f9ebc..be0a756 100644
--- a/zuul.d/integrated-gate.yaml
+++ b/zuul.d/integrated-gate.yaml
@@ -115,12 +115,28 @@
     description: |
       Base integration test on CentOS 9 stream
     vars:
+      devstack_localrc:
+        # TODO(ykarel) Remove this when moving to 10-stream
+        PYTHON3_VERSION: 3.11
       # 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
       tox_envlist: full
 
 - job:
+    name: tempest-full-rocky
+    parent: tempest-full-py3
+    nodeset: devstack-single-node-rockylinux-9
+    description: |
+      Tempest integration test on Rocky Linux
+    vars:
+      configure_swap_size: 4096
+      tox_envlist: full
+      devstack_localrc:
+        # TODO(ykarel) Remove this when moving to rocky10
+        PYTHON3_VERSION: 3.11
+
+- job:
     name: tempest-integrated-networking
     parent: devstack-tempest
     description: |
@@ -186,6 +202,9 @@
       and Glance related tests. This is meant to be run on Nova gate only.
       This version of the job also uses CentOS 9 stream.
     vars:
+      devstack_localrc:
+        # TODO(ykarel) Remove this when moving to 10-stream
+        PYTHON3_VERSION: 3.11
       # 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
@@ -347,27 +366,6 @@
         devstack_localrc:
           ENABLE_VOLUME_MULTIATTACH: true
 
-# TODO(gmann): As per the 2025.1 testing runtime, we need to run at least
-# one job set on Jammy. These jammy job can be removed in the next
-# cycle(2025.2).
-- job:
-    name: tempest-full-ubuntu-jammy
-    description: This is tempest-full python3 job on Ubuntu Jammy(22.04)
-    parent: tempest-full-py3
-    nodeset: openstack-single-node-jammy
-
-- job:
-    name: tempest-multinode-full-ubuntu-jammy
-    description: This is tempest-multinode-full-py3 python3 job on Ubuntu Jammy(22.04)
-    parent: tempest-multinode-full-py3
-    nodeset: openstack-two-node-jammy
-
-- job:
-    name: tempest-extra-tests-ubuntu-jammy
-    description: This is tempest-extra-tests python3 job on Ubuntu Jammy(22.04)
-    parent: tempest-extra-tests
-    nodeset: openstack-single-node-jammy
-
 - job:
     name: tempest-cinder-v2-api
     parent: devstack-tempest
@@ -390,6 +388,9 @@
     timeout: 10800
     nodeset: devstack-single-node-centos-9-stream
     vars:
+      devstack_localrc:
+        # TODO(ykarel) Remove this when moving to 10-stream
+        PYTHON3_VERSION: 3.11
       tox_envlist: full
       configure_swap_size: 4096
       nslookup_target: 'opendev.org'
diff --git a/zuul.d/project.yaml b/zuul.d/project.yaml
index f044e79..ad2680f 100644
--- a/zuul.d/project.yaml
+++ b/zuul.d/project.yaml
@@ -27,14 +27,6 @@
               - ^.gitignore$
               - ^.gitreview$
               - ^.mailmap$
-        # NOTE(gmann): Running jobs on Jammy as per the additional testing
-        # for 2025.1 cycle and these can be removed in 2025.2 cycle.
-        - tempest-full-ubuntu-jammy:
-            irrelevant-files: *tempest-irrelevant-files
-        - tempest-multinode-full-ubuntu-jammy:
-            irrelevant-files: *tempest-irrelevant-files
-        - tempest-extra-tests-ubuntu-jammy:
-            irrelevant-files: *tempest-irrelevant-files
         - tempest-extra-tests:
             irrelevant-files: *tempest-irrelevant-files
         - glance-multistore-cinder-import:
@@ -161,19 +153,13 @@
             irrelevant-files: *tempest-irrelevant-files
         - ironic-tempest-bios-ipmi-direct-tinyipa:
             irrelevant-files: *tempest-irrelevant-files
-        # NOTE(gmann): Running jobs on Jammy as per the additional testing
-        # for 2025.1 cycle and these can be removed in 2025.2 cycle.
-        - tempest-full-ubuntu-jammy:
-            irrelevant-files: *tempest-irrelevant-files
-        - tempest-multinode-full-ubuntu-jammy:
-            irrelevant-files: *tempest-irrelevant-files
-        - tempest-extra-tests-ubuntu-jammy:
-            irrelevant-files: *tempest-irrelevant-files
     experimental:
       jobs:
         - nova-multi-cell
         - tempest-with-latest-microversion
+        - tempest-full-oslo-master
         - tempest-stestr-master
+        - tempest-full-rocky
         - tempest-cinder-v2-api:
             irrelevant-files: *tempest-irrelevant-files
         - tempest-all:
@@ -220,4 +206,5 @@
         - tempest-full-py3-ipv6
         - tempest-centos9-stream-fips
         - tempest-full-centos-9-stream
+        - tempest-full-rocky
         - tempest-full-test-account-no-admin-py3
diff --git a/zuul.d/tempest-specific.yaml b/zuul.d/tempest-specific.yaml
index deb4157..b222947 100644
--- a/zuul.d/tempest-specific.yaml
+++ b/zuul.d/tempest-specific.yaml
@@ -30,8 +30,15 @@
       - opendev.org/openstack/oslo.utils
       - opendev.org/openstack/oslo.versionedobjects
       - opendev.org/openstack/oslo.vmware
+      # this is a workaround for a packaging bug in ubuntu
+      # remove when https://bugs.launchpad.net/nova/+bug/2109592
+      # is resolved and oslo config is not a dep of the novnc deb
+      # via the defunct python3-novnc package.
+      - novnc/novnc
     vars:
       tox_envlist: full
+      devstack_localrc:
+         NOVNC_FROM_PACKAGE: false
 
 - job:
     name: tempest-full-parallel