Migrate tempest jobs to Ubuntu Jammy (22.04)

As per 2023.1 cycle testing runtime and community goal[1] we need to migrate
upstream CI/CD to Ubuntu Jammy(22.04). Most of the Tempest jobs will be migrate
automatically once devstack base job start running on Jammy(Depends-On).
As we need to run at least one job on Ubuntu Focal(20.04), I am adding
a new job tempest-full-ubuntu-focal.

Few job like tempest-full-multinode-py3 and plugin sanity job needs to override
the nodeset. multinode job needs to run on Focal till stable/zed and on Jammy
from master(2023.1) onwards. Stable branch jobs testing stable branch needs to
keep running on their supported distro version which is Focal.

Depends-On: https://review.opendev.org/c/openstack/devstack/+/860795
Depends-On: https://review.opendev.org/c/openstack/openstack-zuul-jobs/+/861116

[1] https://governance.openstack.org/tc/goals/selected/migrate-ci-jobs-to-ubuntu-jammy.html

Change-Id: I2e37603b098880b778100613800496b01167b22f
diff --git a/setup.cfg b/setup.cfg
index a531eb4..8fb10cb 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -16,7 +16,7 @@
     Programming Language :: Python
     Programming Language :: Python :: 3
     Programming Language :: Python :: 3.8
-    Programming Language :: Python :: 3.9
+    Programming Language :: Python :: 3.10
     Programming Language :: Python :: 3 :: Only
     Programming Language :: Python :: Implementation :: CPython
 
diff --git a/zuul.d/integrated-gate.yaml b/zuul.d/integrated-gate.yaml
index 4c08ad9..121e04d 100644
--- a/zuul.d/integrated-gate.yaml
+++ b/zuul.d/integrated-gate.yaml
@@ -86,6 +86,15 @@
         # Enbale horizon so that we can run horizon test.
         horizon: true
 
+# TODO(gmann): As per the 2023.1 testing runtime, we need to run at least
+# one job on Focal. This job can be removed as per the future testing
+# runtime (whenever we drop the Ubuntu Focal testing).
+- job:
+    name: tempest-full-ubuntu-focal
+    description: This is tempest-full python3 job on Ubuntu Focal(20.04)
+    parent: tempest-full-py3
+    nodeset: openstack-single-node-focal
+
 - job:
     name: tempest-full-centos-9-stream
     parent: tempest-full-py3
@@ -225,22 +234,11 @@
         TEMPEST_PLACEMENT_MIN_MICROVERSION: 'latest'
 
 - job:
-    name: tempest-multinode-full
-    parent: tempest-multinode-full-base
-    nodeset: openstack-two-node-focal
-    # This job runs on Focal from stable/victoria on.
-    branches: ^(?!stable/(ocata|pike|queens|rocky|stein|train|ussuri)).*$
-    vars:
-      devstack_localrc:
-        USE_PYTHON3: False
-    group-vars:
-      subnode:
-        devstack_localrc:
-          USE_PYTHON3: False
-
-- job:
     name: tempest-multinode-full-py3
-    parent: tempest-multinode-full
+    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)).*$
     vars:
       devstack_localrc:
         USE_PYTHON3: true
diff --git a/zuul.d/project.yaml b/zuul.d/project.yaml
index 2824677..6412e78 100644
--- a/zuul.d/project.yaml
+++ b/zuul.d/project.yaml
@@ -28,6 +28,8 @@
               - ^.mailmap$
         - tempest-full-py3:
             irrelevant-files: *tempest-irrelevant-files
+        - tempest-full-ubuntu-focal:
+            irrelevant-files: *tempest-irrelevant-files
         - tempest-full-py3-ipv6:
             voting: false
             irrelevant-files: *tempest-irrelevant-files
@@ -136,6 +138,8 @@
         - openstack-tox-py310
         - tempest-slow-py3:
             irrelevant-files: *tempest-irrelevant-files
+        - tempest-full-ubuntu-focal:
+            irrelevant-files: *tempest-irrelevant-files
         - neutron-ovs-grenade-multinode:
             irrelevant-files: *tempest-irrelevant-files
         - tempest-full-py3:
diff --git a/zuul.d/stable-jobs.yaml b/zuul.d/stable-jobs.yaml
index 6d97fad..82c3e71 100644
--- a/zuul.d/stable-jobs.yaml
+++ b/zuul.d/stable-jobs.yaml
@@ -2,41 +2,49 @@
 - job:
     name: tempest-full-zed
     parent: tempest-full-py3
+    nodeset: openstack-single-node-focal
     override-checkout: stable/zed
 
 - job:
     name: tempest-full-yoga
     parent: tempest-full-py3
+    nodeset: openstack-single-node-focal
     override-checkout: stable/yoga
 
 - job:
     name: tempest-full-xena
     parent: tempest-full-py3
+    nodeset: openstack-single-node-focal
     override-checkout: stable/xena
 
 - job:
     name: tempest-full-wallaby-py3
     parent: tempest-full-py3
+    nodeset: openstack-single-node-focal
     override-checkout: stable/wallaby
 
 - job:
     name: tempest-slow-zed
     parent: tempest-slow-py3
+    nodeset: openstack-two-node-focal
     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-slow-xena
     parent: tempest-slow-py3
+    nodeset: openstack-two-node-focal
     override-checkout: stable/xena
 
 - job:
     name: tempest-slow-wallaby
     parent: tempest-slow-py3
+    nodeset: openstack-two-node-focal
     override-checkout: stable/wallaby
 
 - job:
@@ -95,6 +103,51 @@
         neutron-qos: 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/stein
+      - stable/train
+      - stable/ussuri
+      - stable/victoria
+      - stable/wallaby
+      - stable/xena
+      - stable/yoga
+      - stable/zed
+    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
+    parent: tempest-multinode-full-base
+    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
+    vars:
+      devstack_localrc:
+        USE_PYTHON3: False
+    group-vars:
+      subnode:
+        devstack_localrc:
+          USE_PYTHON3: False
+
+- job:
     name: tempest-multinode-full
     parent: tempest-multinode-full-base
     nodeset: openstack-two-node-bionic
diff --git a/zuul.d/tempest-specific.yaml b/zuul.d/tempest-specific.yaml
index 822feaa..ca9ba7f 100644
--- a/zuul.d/tempest-specific.yaml
+++ b/zuul.d/tempest-specific.yaml
@@ -73,7 +73,7 @@
     parent: tox
     description: |
       Run tempest plugin sanity check script using tox.
-    nodeset: ubuntu-focal
+    nodeset: ubuntu-jammy
     vars:
       tox_envlist: plugin-sanity-check
     timeout: 5000