Merge "Remove test duplication between tempest and n-t-p QuotasTest"
diff --git a/bindep.txt b/bindep.txt
index 7d34939..3eb3bbd 100644
--- a/bindep.txt
+++ b/bindep.txt
@@ -5,7 +5,6 @@
 libffi-devel [platform:rpm]
 gcc [platform:rpm]
 gcc [platform:dpkg]
-python-devel [platform:rpm]
 python3-dev [platform:dpkg]
 python3-devel [platform:rpm]
 openssl-devel [platform:rpm]
diff --git a/tempest/api/compute/admin/test_assisted_volume_snapshots.py b/tempest/api/compute/admin/test_assisted_volume_snapshots.py
index 5e30444..b7be796 100644
--- a/tempest/api/compute/admin/test_assisted_volume_snapshots.py
+++ b/tempest/api/compute/admin/test_assisted_volume_snapshots.py
@@ -26,6 +26,13 @@
 
     create_default_network = True
 
+    # TODO(gmann): Remove the admin access to service user
+    # once nova change the default of this API to service
+    # role. To merge the nova changing the policy default
+    # we need to use token with admin as well as service
+    # role and later we can use only service token.
+    credentials = ['primary', 'admin', ['service_user', 'admin', 'service']]
+
     @classmethod
     def skip_checks(cls):
         super(VolumesAssistedSnapshotsTest, cls).skip_checks()
@@ -37,7 +44,7 @@
     def setup_clients(cls):
         super(VolumesAssistedSnapshotsTest, cls).setup_clients()
         cls.assisted_v_client = (
-            cls.os_admin.assisted_volume_snapshots_client)
+            cls.os_service_user.assisted_volume_snapshots_client)
         cls.volumes_client = cls.os_admin.volumes_client_latest
         cls.servers_client = cls.os_admin.servers_client
 
diff --git a/tempest/api/compute/admin/test_live_migration.py b/tempest/api/compute/admin/test_live_migration.py
index a02820a..d68334f 100644
--- a/tempest/api/compute/admin/test_live_migration.py
+++ b/tempest/api/compute/admin/test_live_migration.py
@@ -258,7 +258,8 @@
         port = self.ports_client.show_port(port_id)['port']
         return port['status'] == 'ACTIVE'
 
-    @decorators.unstable_test(bug='2027605')
+    @decorators.unstable_test(bug='2024160')
+    @decorators.unstable_test(bug='2033887')
     @decorators.attr(type='multinode')
     @decorators.idempotent_id('0022c12e-a482-42b0-be2d-396b5f0cffe3')
     @utils.requires_ext(service='network', extension='trunk')
diff --git a/tempest/api/compute/admin/test_server_external_events.py b/tempest/api/compute/admin/test_server_external_events.py
index 1c5c295..d867a39 100644
--- a/tempest/api/compute/admin/test_server_external_events.py
+++ b/tempest/api/compute/admin/test_server_external_events.py
@@ -19,6 +19,13 @@
 class ServerExternalEventsTest(base.BaseV2ComputeAdminTest):
     """Test server external events test"""
 
+    # TODO(gmann): Remove the admin access to service user
+    # once nova change the default of this API to service
+    # role. To merge the nova changing the policy default
+    # we need to use token with admin as well as service
+    # role and later we can use only service token.
+    credentials = ['primary', 'admin', ['service_user', 'admin', 'service']]
+
     @decorators.idempotent_id('6bbf4723-61d2-4372-af55-7ba27f1c9ba6')
     def test_create_server_external_events(self):
         """Test create a server and add some external events"""
@@ -29,7 +36,7 @@
                 "server_uuid": server_id,
             }
         ]
-        client = self.os_admin.server_external_events_client
+        client = self.os_service_user.server_external_events_client
         events_resp = client.create_server_external_events(
             events=events)['events'][0]
         self.assertEqual(server_id, events_resp['server_uuid'])
diff --git a/tempest/api/identity/v3/test_access_rules.py b/tempest/api/identity/v3/test_access_rules.py
index 608eb59..64a6959 100644
--- a/tempest/api/identity/v3/test_access_rules.py
+++ b/tempest/api/identity/v3/test_access_rules.py
@@ -17,6 +17,7 @@
 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
 
@@ -37,10 +38,6 @@
         super(AccessRulesV3Test, cls).resource_setup()
         cls.user_id = cls.os_primary.credentials.user_id
         cls.project_id = cls.os_primary.credentials.project_id
-
-    def setUp(self):
-        super(AccessRulesV3Test, self).setUp()
-        ac = self.non_admin_app_creds_client
         access_rules = [
             {
                 "path": "/v2.1/servers/*/ips",
@@ -48,11 +45,15 @@
                 "service": "compute"
             }
         ]
-        self.app_cred = ac.create_application_credential(
-            self.user_id,
+        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'),
             access_rules=access_rules
         )['application_credential']
+        cls.addClassResourceCleanup(
+            cls.ac.delete_application_credential,
+            cls.user_id, cls.app_cred['id'])
 
     @decorators.idempotent_id('2354c498-5119-4ba5-9f0d-44f16f78fb0e')
     def test_list_access_rules(self):
@@ -67,18 +68,33 @@
 
     @decorators.idempotent_id('278757e9-e193-4bf8-adf2-0b0a229a17d0')
     def test_delete_access_rule(self):
-        access_rule_id = self.app_cred['access_rules'][0]['id']
-        app_cred_id = self.app_cred['id']
+        access_rules = [
+            {
+                "path": "/v2.1/servers/*/ips",
+                "method": "GET",
+                "service": "monitoring"
+            }
+        ]
+        app_cred = self.ac.create_application_credential(
+            self.user_id,
+            name=data_utils.rand_name('application_credential'),
+            access_rules=access_rules
+        )['application_credential']
+        self.addCleanup(
+            test_utils.call_and_ignore_notfound_exc,
+            self.ac.delete_application_credential,
+            self.user_id, app_cred['id'])
+        access_rule_id = app_cred['access_rules'][0]['id']
         self.assertRaises(
             lib_exc.Forbidden,
             self.non_admin_access_rules_client.delete_access_rule,
             self.user_id,
             access_rule_id)
-        self.non_admin_app_creds_client.delete_application_credential(
-            self.user_id, app_cred_id)
+        self.ac.delete_application_credential(
+            self.user_id, app_cred['id'])
         ar = self.non_admin_access_rules_client.list_access_rules(self.user_id)
-        self.assertEqual(1, len(ar['access_rules']))
+        self.assertIn(access_rule_id, [x['id'] for x in ar['access_rules']])
         self.non_admin_access_rules_client.delete_access_rule(
             self.user_id, access_rule_id)
         ar = self.non_admin_access_rules_client.list_access_rules(self.user_id)
-        self.assertEqual(0, len(ar['access_rules']))
+        self.assertNotIn(access_rule_id, [x['id'] for x in ar['access_rules']])
diff --git a/tempest/lib/services/object_storage/container_client.py b/tempest/lib/services/object_storage/container_client.py
index ee87726..bdca0d0 100644
--- a/tempest/lib/services/object_storage/container_client.py
+++ b/tempest/lib/services/object_storage/container_client.py
@@ -43,7 +43,7 @@
         url = str(container_name)
 
         resp, body = self.put(url, body=None, headers=headers)
-        self.expected_success([201, 202], resp.status)
+        self.expected_success([201, 202, 204], resp.status)
         return resp, body
 
     # NOTE: This alias is for the usability because PUT can be used for both
diff --git a/tox.ini b/tox.ini
index 47ef5eb..fc882cf 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,10 +1,8 @@
 [tox]
 envlist = pep8,py39,bashate,pip-check-reqs
 minversion = 3.18.0
-ignore_basepython_conflict = True
 
 [tempestenv]
-basepython = python3
 sitepackages = False
 setenv =
     VIRTUAL_ENV={envdir}
@@ -15,7 +13,6 @@
     -r{toxinidir}/requirements.txt
 
 [testenv]
-basepython = python3
 setenv =
     VIRTUAL_ENV={envdir}
     OS_LOG_CAPTURE=1
@@ -72,7 +69,6 @@
 [testenv:all]
 envdir = .tox/tempest
 sitepackages = {[tempestenv]sitepackages}
-basepython = {[tempestenv]basepython}
 # 'all' includes slow tests
 setenv =
     {[tempestenv]setenv}
@@ -93,7 +89,6 @@
 # 'all' includes slow tests
 setenv =
     {[tempestenv]setenv}
-basepython = {[tempestenv]basepython}
 deps = {[tempestenv]deps}
 commands =
     echo "WARNING: The all-plugin env is deprecated and will be removed"
@@ -106,7 +101,6 @@
 # 'all' includes slow tests
 setenv =
     {[tempestenv]setenv}
-basepython = {[tempestenv]basepython}
 deps = {[tempestenv]deps}
 commands =
     find . -type f -name "*.pyc" -delete
@@ -115,7 +109,6 @@
 [testenv:full]
 envdir = .tox/tempest
 sitepackages = {[tempestenv]sitepackages}
-basepython = {[tempestenv]basepython}
 setenv = {[tempestenv]setenv}
 deps = {[tempestenv]deps}
 # The regex below is used to select which tests to run and exclude the slow tag:
@@ -129,7 +122,6 @@
 [testenv:integrated-full]
 envdir = .tox/tempest
 sitepackages = {[tempestenv]sitepackages}
-basepython = {[tempestenv]basepython}
 setenv = {[tempestenv]setenv}
 deps = {[tempestenv]deps}
 # The regex below is used to select which tests to run. It exclude the extra
@@ -146,7 +138,6 @@
 [testenv:extra-tests]
 envdir = .tox/tempest
 sitepackages = {[tempestenv]sitepackages}
-basepython = {[tempestenv]basepython}
 setenv = {[tempestenv]setenv}
 deps = {[tempestenv]deps}
 # The regex below is used to select extra tests mentioned in
@@ -161,7 +152,6 @@
 [testenv:full-parallel]
 envdir = .tox/tempest
 sitepackages = {[tempestenv]sitepackages}
-basepython = {[tempestenv]basepython}
 setenv = {[tempestenv]setenv}
 deps = {[tempestenv]deps}
 # But exlcude the extra tests mentioned in tools/tempest-extra-tests-list.txt
@@ -173,7 +163,6 @@
 [testenv:api-microversion-tests]
 envdir = .tox/tempest
 sitepackages = {[tempestenv]sitepackages}
-basepython = {[tempestenv]basepython}
 setenv = {[tempestenv]setenv}
 deps = {[tempestenv]deps}
 regex = '(^tempest\.api\.compute)|(^tempest\.api\.volume)'
@@ -186,7 +175,6 @@
 [testenv:integrated-network]
 envdir = .tox/tempest
 sitepackages = {[tempestenv]sitepackages}
-basepython = {[tempestenv]basepython}
 setenv = {[tempestenv]setenv}
 deps = {[tempestenv]deps}
 regex1 = '(?!.*\[.*\bslow\b.*\])(^tempest\.api)'
@@ -201,7 +189,6 @@
 [testenv:integrated-compute]
 envdir = .tox/tempest
 sitepackages = {[tempestenv]sitepackages}
-basepython = {[tempestenv]basepython}
 setenv = {[tempestenv]setenv}
 deps = {[tempestenv]deps}
 regex1 = '(?!.*\[.*\bslow\b.*\])(^tempest\.api)'
@@ -216,7 +203,6 @@
 [testenv:integrated-placement]
 envdir = .tox/tempest
 sitepackages = {[tempestenv]sitepackages}
-basepython = {[tempestenv]basepython}
 setenv = {[tempestenv]setenv}
 deps = {[tempestenv]deps}
 regex1 = '(?!.*\[.*\bslow\b.*\])(^tempest\.api)'
@@ -231,7 +217,6 @@
 [testenv:integrated-storage]
 envdir = .tox/tempest
 sitepackages = {[tempestenv]sitepackages}
-basepython = {[tempestenv]basepython}
 setenv = {[tempestenv]setenv}
 deps = {[tempestenv]deps}
 regex1 = '(?!.*\[.*\bslow\b.*\])(^tempest\.api)'
@@ -246,7 +231,6 @@
 [testenv:integrated-object-storage]
 envdir = .tox/tempest
 sitepackages = {[tempestenv]sitepackages}
-basepython = {[tempestenv]basepython}
 setenv = {[tempestenv]setenv}
 deps = {[tempestenv]deps}
 regex1 = '(?!.*\[.*\bslow\b.*\])(^tempest\.api)'
@@ -261,7 +245,6 @@
 [testenv:full-serial]
 envdir = .tox/tempest
 sitepackages = {[tempestenv]sitepackages}
-basepython = {[tempestenv]basepython}
 setenv = {[tempestenv]setenv}
 deps = {[tempestenv]deps}
 regex = '(?!.*\[.*\bslow\b.*\])(^tempest\.(api|scenario|serial_tests))'
@@ -275,7 +258,6 @@
 [testenv:scenario]
 envdir = .tox/tempest
 sitepackages = {[tempestenv]sitepackages}
-basepython = {[tempestenv]basepython}
 setenv = {[tempestenv]setenv}
 deps = {[tempestenv]deps}
 regex = '(^tempest\.scenario)'
@@ -287,7 +269,6 @@
 [testenv:smoke]
 envdir = .tox/tempest
 sitepackages = {[tempestenv]sitepackages}
-basepython = {[tempestenv]basepython}
 setenv = {[tempestenv]setenv}
 deps = {[tempestenv]deps}
 regex = '\[.*\bsmoke\b.*\]'
@@ -298,7 +279,6 @@
 [testenv:smoke-serial]
 envdir = .tox/tempest
 sitepackages = {[tempestenv]sitepackages}
-basepython = {[tempestenv]basepython}
 setenv = {[tempestenv]setenv}
 deps = {[tempestenv]deps}
 regex = '\[.*\bsmoke\b.*\]'
@@ -312,7 +292,6 @@
 [testenv:slow-serial]
 envdir = .tox/tempest
 sitepackages = {[tempestenv]sitepackages}
-basepython = {[tempestenv]basepython}
 setenv = {[tempestenv]setenv}
 deps = {[tempestenv]deps}
 regex = '\[.*\bslow\b.*\]'
@@ -324,7 +303,6 @@
 [testenv:slow]
 envdir = .tox/tempest
 sitepackages = {[tempestenv]sitepackages}
-basepython = {[tempestenv]basepython}
 setenv = {[tempestenv]setenv}
 deps = {[tempestenv]deps}
 # The regex below is used to select the slow tagged tests:
@@ -336,7 +314,6 @@
 [testenv:multinode]
 envdir = .tox/tempest
 sitepackages = {[tempestenv]sitepackages}
-basepython = {[tempestenv]basepython}
 setenv = {[tempestenv]setenv}
 deps = {[tempestenv]deps}
 # The regex below is used to select the multinode and smoke tagged tests
@@ -348,7 +325,6 @@
 [testenv:ipv6-only]
 envdir = .tox/tempest
 sitepackages = {[tempestenv]sitepackages}
-basepython = {[tempestenv]basepython}
 setenv = {[tempestenv]setenv}
 deps = {[tempestenv]deps}
 regex = '\[.*\bsmoke|ipv6|test_network_v6\b.*\]'
@@ -369,7 +345,6 @@
 [testenv:venv-tempest]
 envdir = .tox/tempest
 sitepackages = {[tempestenv]sitepackages}
-basepython = {[tempestenv]basepython}
 setenv = {[tempestenv]setenv}
 deps = {[tempestenv]deps}
 commands = {posargs}
@@ -513,7 +488,6 @@
 [testenv:stestr-master]
 envdir = .tox/tempest
 sitepackages = {[tempestenv]sitepackages}
-basepython = {[tempestenv]basepython}
 setenv = {[tempestenv]setenv}
 deps = {[tempestenv]deps}
 regex = '\[.*\bsmoke\b.*\]'
diff --git a/zuul.d/integrated-gate.yaml b/zuul.d/integrated-gate.yaml
index 2d4b8d9..87b8af0 100644
--- a/zuul.d/integrated-gate.yaml
+++ b/zuul.d/integrated-gate.yaml
@@ -20,8 +20,6 @@
 - job:
     name: tempest-ipv6-only
     parent: devstack-tempest-ipv6
-    # This currently works from stable/pike on.
-    branches: ^(?!stable/ocata).*$
     description: |
       Integration test of IPv6-only deployments. This job runs
       smoke and IPv6 relates tests only. Basic idea is to test
@@ -33,10 +31,6 @@
 - job:
     name: tempest-full
     parent: devstack-tempest
-    # This currently works from stable/pike on.
-    # Before stable/pike, legacy version of tempest-full
-    # 'legacy-tempest-dsvm-neutron-full' run.
-    branches: ^(?!stable/ocata).*$
     description: |
       Base integration test with Neutron networking and py27.
       This job is supposed to run until stable/train setup only.
@@ -78,7 +72,9 @@
     # available in old tempest used till stable/wallaby,
     # this job definition is only for stable/xena onwards
     # and separate job definition until stable/wallaby
-    branches: ^(?!stable/(ocata|pike|queens|rocky|stein|train|ussuri|victoria|wallaby)).*$
+    branches:
+      regex: ^stable/(stein|train|ussuri|victoria|wallaby)$
+      negate: true
     description: |
       Base integration test with Neutron networking, horizon, swift enable,
       and py3.
@@ -110,7 +106,9 @@
     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)).*$
+    branches:
+      regex: ^stable/(stein|train|ussuri|victoria|wallaby|xena)$
+      negate: true
     description: |
       Base integration test on CentOS 9 stream
     vars:
@@ -122,7 +120,6 @@
 - job:
     name: tempest-integrated-networking
     parent: devstack-tempest
-    branches: ^(?!stable/ocata).*$
     description: |
       This  job runs integration tests for networking. This is subset of
       'tempest-full-py3' job and run only Neutron and Nova related tests.
@@ -142,7 +139,6 @@
 - job:
     name: tempest-integrated-compute
     parent: devstack-tempest
-    branches: ^(?!stable/ocata).*$
     description: |
       This job runs integration tests for compute. This is
       subset of 'tempest-full-py3' job and run Nova, Neutron, Cinder (except backup tests)
@@ -171,7 +167,9 @@
     parent: tempest-integrated-compute
     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)).*$
+    branches:
+      regex: ^stable/(stein|train|ussuri|victoria|wallaby|xena)$
+      negate: true
     description: |
       This job runs integration tests for compute. This is
       subset of 'tempest-full-py3' job and run Nova, Neutron, Cinder (except backup tests)
@@ -185,7 +183,6 @@
 - job:
     name: tempest-integrated-placement
     parent: devstack-tempest
-    branches: ^(?!stable/ocata).*$
     description: |
       This job runs integration tests for placement. This is
       subset of 'tempest-full-py3' job and run Nova and Neutron
@@ -211,7 +208,6 @@
 - job:
     name: tempest-integrated-storage
     parent: devstack-tempest
-    branches: ^(?!stable/ocata).*$
     description: |
       This job runs integration tests for image & block storage. This is
       subset of 'tempest-full-py3' job and run Cinder, Glance, Swift and Nova
@@ -227,7 +223,6 @@
 - job:
     name: tempest-integrated-object-storage
     parent: devstack-tempest
-    branches: ^(?!stable/ocata).*$
     description: |
       This job runs integration tests for object storage. This is
       subset of 'tempest-full-py3' job and run Swift, Cinder and Glance
@@ -259,7 +254,9 @@
     parent: tempest-multinode-full-base
     nodeset: openstack-two-node-jammy
     # This job runs on ubuntu Jammy and after stable/zed.
-    branches: ^(?!stable/(pike|queens|rocky|stein|train|ussuri|victoria|wallaby|xena|yoga|zed)).*$
+    branches:
+      regex: ^stable/(stein|train|ussuri|victoria|wallaby|xena|yoga|zed)$
+      negate: true
     vars:
       # NOTE(gmann): Default concurrency is higher (number of cpu -2) which
       # end up 6 in upstream CI. Higher concurrency means high parallel
@@ -294,8 +291,6 @@
         * legacy-tempest-dsvm-neutron-scenario-multinode-lvm-multibackend
         * tempest-scenario-multinode-lvm-multibackend
     timeout: 10800
-    # This job runs on stable/stein onwards.
-    branches: ^(?!stable/(ocata|pike|queens|rocky)).*$
     vars:
       tox_envlist: slow-serial
       devstack_localrc:
@@ -323,7 +318,9 @@
     # As the 'slow' tox env which is not available in old tempest used
     # till stable/wallaby, this job definition is only for stable/xena
     # onwards and separate job definition until stable/wallaby
-    branches: ^(?!stable/(ocata|pike|queens|rocky|stein|train|ussuri|victoria|wallaby)).*$
+    branches:
+      regex: ^stable/(stein|train|ussuri|victoria|wallaby)$
+      negate: true
     vars:
       tox_envlist: slow
       devstack_localrc:
@@ -450,7 +447,9 @@
         # and job is broken up to wallaby branch due to the issue
         # described in https://review.opendev.org/872341
         - openstacksdk-functional-devstack:
-            branches: ^(?!stable/(ussuri|victoria|wallaby)).*$
+            branches:
+              regex: ^stable/(ussuri|victoria|wallaby)$
+              negate: true
     gate:
       jobs:
         - grenade
@@ -460,7 +459,9 @@
         # and job is broken up to wallaby branch due to the issue
         # described in https://review.opendev.org/872341
         - openstacksdk-functional-devstack:
-            branches: ^(?!stable/(ussuri|victoria|wallaby)).*$
+            branches:
+              regex: ^stable/(ussuri|victoria|wallaby)$
+              negate: true
 
 - project-template:
     name: integrated-gate-compute
@@ -498,7 +499,9 @@
         # and job is broken up to wallaby branch due to the issue
         # described in https://review.opendev.org/872341
         - openstacksdk-functional-devstack:
-            branches: ^(?!stable/(ussuri|victoria|wallaby)).*$
+            branches:
+              regex: ^stable/(ussuri|victoria|wallaby)$
+              negate: true
     gate:
       jobs:
         - grenade-skip-level-always:
@@ -506,12 +509,16 @@
               - master
         - tempest-integrated-compute
         - openstacksdk-functional-devstack:
-            branches: ^(?!stable/(ussuri|victoria|wallaby)).*$
+            branches:
+              regex: ^stable/(ussuri|victoria|wallaby)$
+              negate: true
     periodic-weekly:
       jobs:
         # 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)).*$
+            branches:
+              regex: ^stable/(stein|train|ussuri|victoria|wallaby|xena|yoga)$
+              negate: true
 
 - project-template:
     name: integrated-gate-placement
@@ -533,7 +540,9 @@
         # and job is broken up to wallaby branch due to the issue
         # described in https://review.opendev.org/872341
         - openstacksdk-functional-devstack:
-            branches: ^(?!stable/(ussuri|victoria|wallaby)).*$
+            branches:
+              regex: ^stable/(ussuri|victoria|wallaby)$
+              negate: true
     gate:
       jobs:
         - grenade
@@ -543,7 +552,9 @@
         # and job is broken up to wallaby branch due to the issue
         # described in https://review.opendev.org/872341
         - openstacksdk-functional-devstack:
-            branches: ^(?!stable/(ussuri|victoria|wallaby)).*$
+            branches:
+              regex: ^stable/(ussuri|victoria|wallaby)$
+              negate: true
 
 - project-template:
     name: integrated-gate-storage
@@ -565,7 +576,9 @@
         # and job is broken up to wallaby branch due to the issue
         # described in https://review.opendev.org/872341
         - openstacksdk-functional-devstack:
-            branches: ^(?!stable/(ussuri|victoria|wallaby)).*$
+            branches:
+              regex: ^stable/(ussuri|victoria|wallaby)$
+              negate: true
     gate:
       jobs:
         - grenade
@@ -575,7 +588,9 @@
         # and job is broken up to wallaby branch due to the issue
         # described in https://review.opendev.org/872341
         - openstacksdk-functional-devstack:
-            branches: ^(?!stable/(ussuri|victoria|wallaby)).*$
+            branches:
+              regex: ^stable/(ussuri|victoria|wallaby)$
+              negate: true
 
 - project-template:
     name: integrated-gate-object-storage
@@ -593,7 +608,9 @@
         # and job is broken up to wallaby branch due to the issue
         # described in https://review.opendev.org/872341
         - openstacksdk-functional-devstack:
-            branches: ^(?!stable/(ussuri|victoria|wallaby)).*$
+            branches:
+              regex: ^stable/(ussuri|victoria|wallaby)$
+              negate: true
     gate:
       jobs:
         - grenade
@@ -603,4 +620,6 @@
         # and job is broken up to wallaby branch due to the issue
         # described in https://review.opendev.org/872341
         - openstacksdk-functional-devstack:
-            branches: ^(?!stable/(ussuri|victoria|wallaby)).*$
+            branches:
+              regex: ^stable/(ussuri|victoria|wallaby)$
+              negate: true
diff --git a/zuul.d/stable-jobs.yaml b/zuul.d/stable-jobs.yaml
index d399556..51559f4 100644
--- a/zuul.d/stable-jobs.yaml
+++ b/zuul.d/stable-jobs.yaml
@@ -39,7 +39,7 @@
     name: tempest-slow-2023-1
     parent: tempest-slow-py3
     nodeset: openstack-two-node-jammy
-    override-checkout: stable/2023-1
+    override-checkout: stable/2023.1
 
 - job:
     name: tempest-full-enforce-scope-new-defaults-zed
@@ -95,9 +95,6 @@
     # This job version is with swift disabled on py3
     # as swift was not ready on py3 until stable/train.
     branches:
-      - stable/pike
-      - stable/queens
-      - stable/rocky
       - stable/stein
       - stable/train
     description: |
@@ -227,72 +224,11 @@
           USE_PYTHON3: False
 
 - job:
-    name: tempest-multinode-full
-    parent: tempest-multinode-full-base
-    nodeset: openstack-two-node-xenial
-    # This job runs on Xenial and this is for stable/pike, stable/queens
-    # and stable/rocky. This job is prepared to make sure all stable branches
-    # before stable/stein will keep running on xenial. This job can be
-    # removed once stable/rocky is EOL.
-    branches:
-      - stable/pike
-      - stable/queens
-      - stable/rocky
-    vars:
-      devstack_localrc:
-        USE_PYTHON3: False
-    group-vars:
-      subnode:
-        devstack_localrc:
-          USE_PYTHON3: False
-
-- job:
-    name: tempest-slow
-    parent: tempest-multinode-full
-    description: |
-      This multinode integration job will run all the tests tagged as slow.
-      It enables the lvm multibackend setup to cover few scenario tests.
-      This job will run only slow tests (API or Scenario) serially.
-      Former names for this job were:
-        * legacy-tempest-dsvm-neutron-scenario-multinode-lvm-multibackend
-        * tempest-scenario-multinode-lvm-multibackend
-    timeout: 10800
-    branches:
-      - stable/pike
-      - stable/queens
-      - stable/rocky
-    vars:
-      tox_envlist: slow-serial
-      devstack_localrc:
-        CINDER_ENABLED_BACKENDS: lvm:lvmdriver-1,lvm:lvmdriver-2
-        ENABLE_VOLUME_MULTIATTACH: true
-        # to avoid https://bugs.launchpad.net/neutron/+bug/1914037
-        # as we couldn't backport the fix to rocky and older releases
-        IPV6_PUBLIC_RANGE: 2001:db8:0:10::/64
-        IPV6_PUBLIC_NETWORK_GATEWAY: 2001:db8:0:10::2
-        IPV6_ROUTER_GW_IP: 2001:db8:0:10::1
-      devstack_plugins:
-        neutron: https://opendev.org/openstack/neutron
-      devstack_services:
-        neutron-placement: true
-        neutron-qos: true
-    group-vars:
-      # NOTE(mriedem): The ENABLE_VOLUME_MULTIATTACH variable is used on both
-      # the controller and subnode prior to Rocky so we have to make sure the
-      # variable is set in both locations.
-      subnode:
-        devstack_localrc:
-          ENABLE_VOLUME_MULTIATTACH: true
-
-- 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/pike
-      - stable/queens
-      - stable/rocky
       - stable/stein
       - stable/train
     vars:
@@ -333,9 +269,6 @@
     # This job is not used after stable/xena and can be
     # removed once stable/xena is EOL.
     branches:
-      - stable/pike
-      - stable/queens
-      - stable/rocky
       - stable/stein
       - stable/train
       - stable/ussuri
diff --git a/zuul.d/tempest-specific.yaml b/zuul.d/tempest-specific.yaml
index ca63fcc..10490b4 100644
--- a/zuul.d/tempest-specific.yaml
+++ b/zuul.d/tempest-specific.yaml
@@ -54,7 +54,6 @@
 - job:
     name: tempest-full-py3-ipv6
     parent: devstack-tempest-ipv6
-    branches: ^(?!stable/ocata).*$
     description: |
       Base integration test with Neutron networking, IPv6 and py3.
     vars: