Merge "Remove "distutils" library"
diff --git a/neutron_tempest_plugin/tap_as_a_service/scenario/test_traffic_impact.py b/neutron_tempest_plugin/tap_as_a_service/scenario/test_traffic_impact.py
index e2b14c7..e70eb03 100644
--- a/neutron_tempest_plugin/tap_as_a_service/scenario/test_traffic_impact.py
+++ b/neutron_tempest_plugin/tap_as_a_service/scenario/test_traffic_impact.py
@@ -122,17 +122,20 @@
 
         self.monitor_client = remote_client.RemoteClient(
             mon_fip['floating_ip_address'], user,
-            pkey=self.keypair['private_key'])
+            pkey=self.keypair['private_key'],
+            ssh_key_type=CONF.validation.ssh_key_type)
         self.monitor_client.validate_authentication()
         self.left_client = remote_client.RemoteClient(
             self.left_fip['floating_ip_address'],
             CONF.validation.image_ssh_user,
-            pkey=self.keypair['private_key'])
+            pkey=self.keypair['private_key'],
+            ssh_key_type=CONF.validation.ssh_key_type)
         self.left_client.validate_authentication()
         self.right_client = remote_client.RemoteClient(
             self.right_fip['floating_ip_address'],
             CONF.validation.image_ssh_user,
-            pkey=self.keypair['private_key'])
+            pkey=self.keypair['private_key'],
+            ssh_key_type=CONF.validation.ssh_key_type)
         self.right_client.validate_authentication()
         yield
 
diff --git a/zuul.d/base-nested-switch.yaml b/zuul.d/base-nested-switch.yaml
index 69e841f..dcc0175 100644
--- a/zuul.d/base-nested-switch.yaml
+++ b/zuul.d/base-nested-switch.yaml
@@ -10,8 +10,8 @@
 
 # Base nested switch job for non EM releases
 - job:
-    name: neutron-tempest-plugin-scenario-nested-switch
-    parent: neutron-tempest-plugin-scenario
+    name: neutron-tempest-plugin-base-nested-switch
+    parent: neutron-tempest-plugin-base
     abstract: true
     branches: ^(?!stable/(queens|rocky|stein|train|ussuri)).*$
     # Comment nodeset and vars to switch back to non nested nodes
@@ -27,6 +27,6 @@
 # Base nested switch job for EM releases
 - job:
     name: neutron-tempest-plugin-scenario-nested-switch
-    parent: neutron-tempest-plugin-scenario
+    parent: neutron-tempest-plugin-base
     abstract: true
     branches: ^(stable/(queens|rocky|stein|train|ussuri)).*$
diff --git a/zuul.d/base.yaml b/zuul.d/base.yaml
deleted file mode 100644
index 4efcd0c..0000000
--- a/zuul.d/base.yaml
+++ /dev/null
@@ -1,131 +0,0 @@
-- job:
-    name: neutron-tempest-plugin-base
-    parent: devstack-tempest
-    abstract: true
-    description: |
-      Perform setup common to all Neutron tempest tests
-    roles:
-      - zuul: openstack/devstack
-    required-projects:
-      - openstack/neutron
-      - openstack/neutron-tempest-plugin
-      - openstack/tempest
-    vars:
-      tempest_concurrency: 4
-      tox_envlist: all
-      devstack_localrc:
-        USE_PYTHON3: true
-        NETWORK_API_EXTENSIONS: "{{ (network_api_extensions_common + network_api_extensions_tempest) | join(',') }}"
-        CIRROS_VERSION: 0.5.1
-        DEFAULT_IMAGE_NAME: cirros-0.5.1-x86_64-uec
-        DEFAULT_IMAGE_FILE_NAME: cirros-0.5.1-x86_64-uec.tar.gz
-        BUILD_TIMEOUT: 784
-      devstack_plugins:
-        neutron: https://opendev.org/openstack/neutron.git
-        neutron-tempest-plugin: https://opendev.org/openstack/neutron-tempest-plugin.git
-      tempest_plugins:
-        - neutron-tempest-plugin
-      devstack_services:
-        tempest: true
-        neutron-dns: true
-        neutron-qos: true
-        neutron-segments: true
-        neutron-trunk: true
-        neutron-uplink-status-propagation: true
-        neutron-network-segment-range: true
-        neutron-port-forwarding: true
-        neutron-conntrack-helper: true
-        neutron-tag-ports-during-bulk-creation: true
-        br-ex-tcpdump: true
-        br-int-flows: true
-        # Cinder services
-        c-api: false
-        c-bak: false
-        c-sch: false
-        c-vol: false
-        cinder: false
-        # We don't need Swift to be run in the Neutron jobs
-        s-account: false
-        s-container: false
-        s-object: false
-        s-proxy: false
-      devstack_local_conf:
-        post-config:
-          $NEUTRON_CONF:
-            QUOTAS:
-              quota_router: 100
-              quota_floatingip: 500
-              quota_security_group: 150
-              quota_security_group_rule: 1000
-          # NOTE(slaweq): We can get rid of this hardcoded absolute path when
-          # devstack-tempest job will be switched to use lib/neutron instead of
-          # lib/neutron-legacy
-          /$NEUTRON_CORE_PLUGIN_CONF:
-            ml2:
-              type_drivers: flat,geneve,vlan,gre,local,vxlan
-            ml2_type_vlan:
-              network_vlan_ranges: foo:1:10
-            ml2_type_vxlan:
-              vni_ranges: 1:2000
-            ml2_type_gre:
-              tunnel_id_ranges: 1:1000
-          $NEUTRON_L3_CONF:
-            agent:
-              availability_zone: nova
-          $NEUTRON_DHCP_CONF:
-            agent:
-              availability_zone: nova
-        test-config:
-          $TEMPEST_CONFIG:
-            neutron_plugin_options:
-              provider_vlans: foo,
-              agent_availability_zone: nova
-              image_is_advanced: true
-              available_type_drivers: flat,geneve,vlan,gre,local,vxlan
-              provider_net_base_segm_id: 1
-    irrelevant-files:
-      - ^(test-|)requirements.txt$
-      - lower-constraints.txt
-      - ^releasenotes/.*$
-      - ^doc/.*$
-      - ^.*\.conf\.sample$
-      - ^setup.cfg$
-      - ^.*\.rst$
-      - ^neutron/locale/.*$
-      - ^neutron/tests/unit/.*$
-      - ^neutron/tests/fullstack/.*
-      - ^neutron/tests/functional/.*
-      - ^tools/.*$
-      - ^tox.ini$
-      - ^rally-jobs/.*$
-      - ^vagrant/.*$
-      - ^zuul.d/(?!(project)).*\.yaml
-
-- job:
-    name: neutron-tempest-plugin-scenario
-    parent: neutron-tempest-plugin-base
-    abstract: true
-    description: |
-      Perform setup common to all tempest scenario test jobs.
-    vars:
-      # NOTE(slaweq): in case of some tests, which requires advanced image,
-      # default test timeout set to 1200 seconds may be not enough if job is
-      # run on slow node
-      tempest_test_timeout: 2400
-      tempest_test_regex: "\
-          (^neutron_tempest_plugin.scenario)|\
-          (^tempest.api.compute.servers.test_attach_interfaces)|\
-          (^tempest.api.compute.servers.test_multiple_create)"
-      devstack_localrc:
-        PHYSICAL_NETWORK: default
-        IMAGE_URLS: https://cloud-images.ubuntu.com/minimal/releases/focal/release/ubuntu-20.04-minimal-cloudimg-amd64.img
-        ADVANCED_IMAGE_NAME: ubuntu-20.04-minimal-cloudimg-amd64
-        ADVANCED_INSTANCE_TYPE: ntp_image_256M
-        ADVANCED_INSTANCE_USER: ubuntu
-        CUSTOMIZE_IMAGE: true
-        BUILD_TIMEOUT: 784
-      tempest_concurrency: 3  # out of 4
-      zuul_copy_output:
-        '/var/log/ovn': 'logs'
-        '/var/log/openvswitch': 'logs'
-        '/var/lib/ovn': 'logs'
diff --git a/zuul.d/master_jobs.yaml b/zuul.d/master_jobs.yaml
index 53e85f3..7bb7149 100644
--- a/zuul.d/master_jobs.yaml
+++ b/zuul.d/master_jobs.yaml
@@ -1,7 +1,53 @@
 - job:
-    name: neutron-tempest-plugin-api
-    parent: neutron-tempest-plugin-base
+    name: neutron-tempest-plugin-base
+    parent: devstack-tempest
+    abstract: true
+    description: |
+      Perform setup common to all Neutron tempest tests
+    roles:
+      - zuul: openstack/devstack
+    required-projects:
+      - openstack/neutron
+      - openstack/neutron-tempest-plugin
+      - openstack/tempest
     vars:
+      tempest_concurrency: 3  # out of 4
+      tox_envlist: all
+      # NOTE(slaweq): in case of some tests, which requires advanced image,
+      # default test timeout set to 1200 seconds may be not enough if job is
+      # run on slow node
+      tempest_test_timeout: 2400
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.api)|\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
+      devstack_localrc:
+        USE_PYTHON3: true
+        NETWORK_API_EXTENSIONS: "{{ (network_api_extensions_common + network_api_extensions_tempest) | join(',') }}"
+        PHYSICAL_NETWORK: public
+        IMAGE_URLS: https://cloud-images.ubuntu.com/minimal/releases/focal/release/ubuntu-20.04-minimal-cloudimg-amd64.img
+        CIRROS_VERSION: 0.5.1
+        DEFAULT_IMAGE_NAME: cirros-0.5.1-x86_64-uec
+        DEFAULT_IMAGE_FILE_NAME: cirros-0.5.1-x86_64-uec.tar.gz
+        ADVANCED_IMAGE_NAME: ubuntu-20.04-minimal-cloudimg-amd64
+        ADVANCED_INSTANCE_TYPE: ntp_image_256M
+        ADVANCED_INSTANCE_USER: ubuntu
+        CUSTOMIZE_IMAGE: true
+        BUILD_TIMEOUT: 784
+        # TODO(lucasagomes): Re-enable MOD_WSGI after
+        # https://bugs.launchpad.net/neutron/+bug/1912359 is implemented
+        NEUTRON_DEPLOY_MOD_WSGI: false
+        # TODO(ralonsoh): remove OVN_BUILD_FROM_SOURCE once the OS packages
+        # include at least OVN v20.12.0.
+        OVN_BUILD_FROM_SOURCE: True
+        OVN_BRANCH: "v21.03.0"
+        OVS_BRANCH: "8dc1733eaea866dce033b3c44853e1b09bf59fc7"
+      devstack_plugins:
+        neutron: https://opendev.org/openstack/neutron.git
+        neutron-tempest-plugin: https://opendev.org/openstack/neutron-tempest-plugin.git
+      tempest_plugins:
+        - neutron-tempest-plugin
       # TODO(slaweq): find a way to put this list of extensions in
       # neutron repository and keep it different per branch,
       # then it could be removed from here
@@ -36,7 +82,6 @@
         - l3-flavors
         - l3-ha
         - l3_agent_scheduler
-        - logging
         - metering
         - multi-provider
         - net-mtu
@@ -54,7 +99,6 @@
         - project-id
         - provider
         - qos
-        - qos-bw-minimum-ingress
         - qos-fip
         - quotas
         - quota_details
@@ -64,7 +108,6 @@
         - rbac-security-groups
         - rbac-subnetpool
         - router
-        - router-admin-state-down-before-update
         - router_availability_zone
         - security-group
         - security-groups-remote-address-group
@@ -85,33 +128,67 @@
         - trunk
         - trunk-details
         - uplink-status-propagation
-      network_api_extensions_tempest:
-        - dvr
-      network_available_features: &available_features
-        - ipv6_metadata
-      tempest_test_regex: ^neutron_tempest_plugin\.api
       devstack_services:
+        tempest: true
+        neutron-dns: true
         neutron-log: true
-      devstack_localrc:
-        # TODO(lucasagomes): Re-enable MOD_WSGI after
-        # https://bugs.launchpad.net/neutron/+bug/1912359 is implemented
-        NEUTRON_DEPLOY_MOD_WSGI: false
-        # TODO(ralonsoh): remove OVN_BUILD_FROM_SOURCE once the OS packages
-        # include at least OVN v20.12.0.
-        OVN_BUILD_FROM_SOURCE: True
-        OVN_BRANCH: "v21.03.0"
-        OVS_BRANCH: "8dc1733eaea866dce033b3c44853e1b09bf59fc7"
-        NETWORK_API_EXTENSIONS: "{{ network_api_extensions_common | join(',') }}"
+        neutron-qos: true
+        neutron-segments: true
+        neutron-trunk: true
+        neutron-uplink-status-propagation: true
+        neutron-network-segment-range: true
+        neutron-port-forwarding: true
+        neutron-conntrack-helper: true
+        neutron-tag-ports-during-bulk-creation: true
+        br-ex-tcpdump: true
+        br-int-flows: true
+        # Cinder services
+        c-api: false
+        c-bak: false
+        c-sch: false
+        c-vol: false
+        cinder: false
+        # We don't need Swift to be run in the Neutron jobs
+        s-account: false
+        s-container: false
+        s-object: false
+        s-proxy: false
       devstack_local_conf:
         post-config:
+          $NEUTRON_CONF:
+            QUOTAS:
+              quota_router: 100
+              quota_floatingip: 500
+              quota_security_group: 150
+              quota_security_group_rule: 1000
           # NOTE(slaweq): We can get rid of this hardcoded absolute path when
           # devstack-tempest job will be switched to use lib/neutron instead of
           # lib/neutron-legacy
           /$NEUTRON_CORE_PLUGIN_CONF:
-            AGENT:
-              tunnel_types: gre,vxlan
+            ml2:
+              type_drivers: flat,geneve,vlan,gre,local,vxlan
+            ml2_type_vlan:
+              network_vlan_ranges: foo:1:10
+            ml2_type_vxlan:
+              vni_ranges: 1:2000
+            ml2_type_gre:
+              tunnel_id_ranges: 1:1000
             network_log:
               local_output_log_base: /tmp/test_log.log
+          $NEUTRON_L3_CONF:
+            agent:
+              availability_zone: nova
+          $NEUTRON_DHCP_CONF:
+            agent:
+              availability_zone: nova
+        test-config:
+          $TEMPEST_CONFIG:
+            neutron_plugin_options:
+              provider_vlans: foo,
+              agent_availability_zone: nova
+              image_is_advanced: true
+              available_type_drivers: flat,geneve,vlan,gre,local,vxlan
+              provider_net_base_segm_id: 1
     irrelevant-files:
       - ^(test-|)requirements.txt$
       - lower-constraints.txt
@@ -131,12 +208,14 @@
       - ^neutron_lib/tests/unit/.*$
       - ^neutron_tempest_plugin/scenario/.*$
       - ^rally-jobs/.*$
+      - ^roles/.*functional.*$
+      - ^playbooks/.*functional.*$
       - ^vagrant/.*$
       - ^zuul.d/(?!(project)).*\.yaml
 
 - job:
-    name: neutron-tempest-plugin-scenario-openvswitch
-    parent: neutron-tempest-plugin-scenario-nested-switch
+    name: neutron-tempest-plugin-openvswitch
+    parent: neutron-tempest-plugin-base-nested-switch
     timeout: 10000
     vars:
       devstack_services:
@@ -155,15 +234,16 @@
         q-l3: true
         q-meta: true
         q-metering: true
-      network_api_extensions: *api_extensions
       network_api_extensions_openvswitch:
         - local_ip
-      network_available_features: *available_features
+        - qos-bw-minimum-ingress
+      network_available_features: &available_features
+        - ipv6_metadata
       devstack_localrc:
         Q_AGENT: openvswitch
         Q_ML2_TENANT_NETWORK_TYPE: vxlan
         Q_ML2_PLUGIN_MECHANISM_DRIVERS: openvswitch
-        NETWORK_API_EXTENSIONS: "{{ (network_api_extensions + network_api_extensions_openvswitch) | join(',') }}"
+        NETWORK_API_EXTENSIONS: "{{ (network_api_extensions_common + network_api_extensions_openvswitch) | join(',') }}"
       devstack_local_conf:
         post-config:
           $NEUTRON_CONF:
@@ -220,12 +300,14 @@
       - ^neutron_tempest_plugin/(bgpvpn|fwaas|neutron_dynamic_routing|sfc|tap_as_a_service|vpnaas).*$
       - ^neutron_tempest_plugin/services/bgp/.*$
       - ^rally-jobs/.*$
+      - ^roles/.*functional.*$
+      - ^playbooks/.*functional.*$
       - ^vagrant/.*$
       - ^zuul.d/(?!(project)).*\.yaml
 
 - job:
-    name: neutron-tempest-plugin-scenario-openvswitch-iptables_hybrid
-    parent: neutron-tempest-plugin-scenario-nested-switch
+    name: neutron-tempest-plugin-openvswitch-iptables_hybrid
+    parent: neutron-tempest-plugin-base-nested-switch
     timeout: 10000
     vars:
       devstack_services:
@@ -244,9 +326,9 @@
         q-l3: true
         q-meta: true
         q-metering: true
-      network_api_extensions: *api_extensions
       network_api_extensions_openvswitch:
         - local_ip
+        - logging
       network_available_features: *available_features
       # TODO(slaweq): remove trunks subport_connectivity test from blacklist
       # when bug https://bugs.launchpad.net/neutron/+bug/1838760 will be fixed
@@ -259,7 +341,7 @@
         Q_AGENT: openvswitch
         Q_ML2_TENANT_NETWORK_TYPE: vxlan
         Q_ML2_PLUGIN_MECHANISM_DRIVERS: openvswitch
-        NETWORK_API_EXTENSIONS: "{{ (network_api_extensions + network_api_extensions_openvswitch) | join(',') }}"
+        NETWORK_API_EXTENSIONS: "{{ (network_api_extensions_common + network_api_extensions_openvswitch) | join(',') }}"
       devstack_local_conf:
         post-config:
           $NEUTRON_CONF:
@@ -318,12 +400,22 @@
       - ^neutron_tempest_plugin/(bgpvpn|fwaas|neutron_dynamic_routing|sfc|tap_as_a_service|vpnaas).*$
       - ^neutron_tempest_plugin/services/bgp/.*$
       - ^rally-jobs/.*$
+      - ^roles/.*functional.*$
+      - ^playbooks/.*functional.*$
       - ^vagrant/.*$
       - ^zuul.d/(?!(project)).*\.yaml
 
+# TODO(slaweq): remove that job's definition as soon as new job
+# "neutron-tempest-plugin-openvswitch-iptables_hybrid" will be used in the
+# neutron repo as a parent for a
+# "neutron-ovs-tempest-plugin-scenario-iptables_hybrid-nftables" job
 - job:
-    name: neutron-tempest-plugin-scenario-openvswitch-distributed-dhcp
-    parent: neutron-tempest-plugin-scenario-openvswitch
+    name: neutron-tempest-plugin-scenario-openvswitch-iptables_hybrid
+    parent: neutron-tempest-plugin-openvswitch-iptables_hybrid
+
+- job:
+    name: neutron-tempest-plugin-openvswitch-distributed-dhcp
+    parent: neutron-tempest-plugin-openvswitch
     timeout: 10000
     vars:
       # NOTE: DHCP extra options and dns services aren't supported with
@@ -336,8 +428,8 @@
         q-distributed-dhcp: true
 
 - job:
-    name: neutron-tempest-plugin-scenario-openvswitch-iptables_hybrid-distributed-dhcp
-    parent: neutron-tempest-plugin-scenario-openvswitch-iptables_hybrid
+    name: neutron-tempest-plugin-openvswitch-iptables_hybrid-distributed-dhcp
+    parent: neutron-tempest-plugin-openvswitch-iptables_hybrid
     timeout: 10000
     vars:
       # NOTE: DHCP extra options and dns services aren't supported with
@@ -350,8 +442,8 @@
         q-distributed-dhcp: true
 
 - job:
-    name: neutron-tempest-plugin-scenario-linuxbridge
-    parent: neutron-tempest-plugin-scenario-nested-switch
+    name: neutron-tempest-plugin-linuxbridge
+    parent: neutron-tempest-plugin-base-nested-switch
     timeout: 10000
     roles:
       - zuul: openstack/neutron
@@ -372,7 +464,8 @@
         q-l3: true
         q-meta: true
         q-metering: true
-      network_api_extensions: *api_extensions
+        # SG logging isn't supported by linuxbridge backend
+        neutron-log: false
       network_api_extensions_linuxbridge:
         - vlan-transparent
       network_available_features: *available_features
@@ -391,7 +484,7 @@
           (^neutron_tempest_plugin.scenario.test_floatingip.FloatingIPPortDetailsTest.test_floatingip_port_details)"
       devstack_localrc:
         Q_AGENT: linuxbridge
-        NETWORK_API_EXTENSIONS: "{{ (network_api_extensions + network_api_extensions_linuxbridge) | join(',') }}"
+        NETWORK_API_EXTENSIONS: "{{ (network_api_extensions_common + network_api_extensions_linuxbridge) | join(',') }}"
         Q_ML2_TENANT_NETWORK_TYPE: vxlan
         Q_ML2_PLUGIN_MECHANISM_DRIVERS: openvswitch,linuxbridge
       devstack_local_conf:
@@ -453,15 +546,23 @@
       - ^neutron_tempest_plugin/(bgpvpn|fwaas|neutron_dynamic_routing|sfc|tap_as_a_service|vpnaas).*$
       - ^neutron_tempest_plugin/services/bgp/.*$
       - ^rally-jobs/.*$
+      - ^roles/.*functional.*$
+      - ^playbooks/.*functional.*$
       - ^vagrant/.*$
       - ^zuul.d/(?!(project)).*\.yaml
 
+# TODO(slaweq): remove that job's definition as soon as new job
+# "neutron-tempest-plugin-linuxbridge" will be used in the neutron repo as
+# a parent for a "neutron-linuxbridge-tempest-plugin-scenario-nftables" job
 - job:
-    name: neutron-tempest-plugin-scenario-ovn
-    parent: neutron-tempest-plugin-scenario-nested-switch
+    name: neutron-tempest-plugin-scenario-linuxbridge
+    parent: neutron-tempest-plugin-linuxbridge
+
+- job:
+    name: neutron-tempest-plugin-ovn
+    parent: neutron-tempest-plugin-base-nested-switch
     timeout: 10800
     vars:
-      network_api_extensions: *api_extensions
       network_api_extensions_ovn:
         - vlan-transparent
       # TODO(jlibosva): Remove the NetworkWritableMtuTest test from the list
@@ -470,12 +571,11 @@
           (^neutron_tempest_plugin.scenario.test_mtu.NetworkWritableMtuTest)"
       devstack_localrc:
         Q_AGENT: ovn
-        NETWORK_API_EXTENSIONS: "{{ (network_api_extensions + network_api_extensions_ovn) | join(',') }}"
+        NETWORK_API_EXTENSIONS: "{{ (network_api_extensions_common + network_api_extensions_ovn) | join(',') }}"
         Q_ML2_PLUGIN_MECHANISM_DRIVERS: ovn,logger
         Q_ML2_PLUGIN_TYPE_DRIVERS: local,flat,vlan,geneve
         Q_ML2_TENANT_NETWORK_TYPE: geneve
         Q_USE_PROVIDERNET_FOR_PUBLIC: true
-        PHYSICAL_NETWORK: public
         # NOTE(slaweq): In the job with OVN backend we can't use Ubuntu minimal
         # image because kernel in that image don't supports MULTICAST traffic
         # thus multicast scenario test with IGMP snooping enabled would fail
@@ -542,6 +642,9 @@
         '{{ devstack_base_dir }}/data/ovn': 'logs'
         '{{ devstack_log_dir }}/ovsdb-server-nb.log': 'logs'
         '{{ devstack_log_dir }}/ovsdb-server-sb.log': 'logs'
+        '/var/log/ovn': 'logs'
+        '/var/log/openvswitch': 'logs'
+        '/var/lib/ovn': 'logs'
     irrelevant-files:
       - ^(test-|)requirements.txt$
       - lower-constraints.txt
@@ -580,9 +683,18 @@
       - ^neutron_tempest_plugin/(bgpvpn|fwaas|neutron_dynamic_routing|sfc|tap_as_a_service|vpnaas).*$
       - ^neutron_tempest_plugin/services/bgp/.*$
       - ^rally-jobs/.*$
+      - ^roles/.*functional.*$
+      - ^playbooks/.*functional.*$
       - ^vagrant/.*$
       - ^zuul.d/(?!(project)).*\.yaml
 
+# TODO(slaweq): remove that job's definition as soon as new job
+# "neutron-tempest-plugin-ovn" will be used in the neutron-lib repo as
+# instead of old "neutron-tempest-plugin-api" job
+- job:
+    name: neutron-tempest-plugin-api
+    parent: neutron-tempest-plugin-ovn
+
 - job:
     name: neutron-tempest-plugin-dvr-multinode-scenario
     parent: tempest-multinode-full
@@ -774,7 +886,7 @@
 
 - job:
     name: neutron-tempest-plugin-designate-scenario
-    parent: neutron-tempest-plugin-scenario-nested-switch
+    parent: neutron-tempest-plugin-base-nested-switch
     description: Neutron designate integration scenario
     required-projects:
       - openstack/designate
@@ -822,6 +934,8 @@
       - ^neutron_tempest_plugin/(bgpvpn|fwaas|neutron_dynamic_routing|sfc|tap_as_a_service|vpnaas).*$
       - ^neutron_tempest_plugin/services/bgp/.*$
       - ^rally-jobs/.*$
+      - ^roles/.*functional.*$
+      - ^playbooks/.*functional.*$
       - ^vagrant/.*$
       - ^zuul.d/(?!(project)).*\.yaml
 
@@ -850,7 +964,6 @@
         q-l3: true
         q-meta: true
         q-metering: true
-      network_api_extensions_common: *api_extensions
       tempest_test_regex: ^neutron_tempest_plugin\.sfc
       devstack_plugins:
         networking-sfc: https://opendev.org/openstack/networking-sfc
@@ -885,6 +998,8 @@
       - ^tools/.*$
       - ^tox.ini$
       - ^rally-jobs/.*$
+      - ^roles/.*functional.*$
+      - ^playbooks/.*functional.*$
       - ^vagrant/.*$
       - ^zuul.d/(?!(project)).*\.yaml
 
@@ -911,7 +1026,6 @@
         q-meta: true
         q-metering: true
       tempest_test_regex: ^neutron_tempest_plugin\.bgpvpn
-      network_api_extensions: *api_extensions
       network_api_extensions_bgpvpn:
         - bgpvpn
         - bgpvpn-routes-control
@@ -922,7 +1036,7 @@
         NETWORKING_BGPVPN_DRIVER: "BGPVPN:BaGPipe:networking_bgpvpn.neutron.services.service_drivers.bagpipe.bagpipe_v2.BaGPipeBGPVPNDriver:default"
         BAGPIPE_DATAPLANE_DRIVER_IPVPN: "ovs"
         BAGPIPE_BGP_PEERS: "-"
-        NETWORK_API_EXTENSIONS: "{{ (network_api_extensions + network_api_extensions_bgpvpn) | join(',') }}"
+        NETWORK_API_EXTENSIONS: "{{ (network_api_extensions_common + network_api_extensions_bgpvpn) | join(',') }}"
       devstack_plugins:
         networking-bgpvpn: https://git.openstack.org/openstack/networking-bgpvpn
         networking-bagpipe: https://git.openstack.org/openstack/networking-bagpipe
@@ -944,6 +1058,8 @@
       - ^tools/.*$
       - ^tox.ini$
       - ^rally-jobs/.*$
+      - ^roles/.*functional.*$
+      - ^playbooks/.*functional.*$
       - ^vagrant/.*$
       - ^zuul.d/(?!(project)).*\.yaml
 
@@ -962,7 +1078,6 @@
       devstack_plugins:
         neutron-dynamic-routing: https://opendev.org/openstack/neutron-dynamic-routing
         neutron-tempest-plugin: https://opendev.org/openstack/neutron-tempest-plugin
-      network_api_extensions_common: *api_extensions
       network_api_extensions_bgp:
         - bgp
         - bgp_dragent_scheduler
@@ -1008,6 +1123,8 @@
       - ^tools/.*$
       - ^tox.ini$
       - ^rally-jobs/.*$
+      - ^roles/.*functional.*$
+      - ^playbooks/.*functional.*$
       - ^vagrant/.*$
       - ^zuul.d/(?!(project)).*\.yaml
 
@@ -1022,11 +1139,11 @@
       - openstack/neutron-tempest-plugin
       - openstack/tempest
     vars:
+      tempest_concurrency: 4
       tempest_test_regex: ^neutron_tempest_plugin\.fwaas
       devstack_plugins:
         neutron-fwaas: https://opendev.org/openstack/neutron-fwaas.git
         neutron-tempest-plugin: https://opendev.org/openstack/neutron-tempest-plugin.git
-      network_api_extensions_common: *api_extensions
       network_api_extensions_fwaas:
         - fwaas_v2
       devstack_localrc:
@@ -1047,6 +1164,28 @@
         q-meta: true
         q-metering: true
         q-l3: true
+        neutron-log: false
+    irrelevant-files:
+      - ^(test-|)requirements.txt$
+      - ^releasenotes/.*$
+      - ^doc/.*$
+      - ^.*\.conf\.sample$
+      - ^setup.cfg$
+      - ^.*\.rst$
+      - ^neutron/locale/.*$
+      - ^neutron/tests/unit/.*$
+      - ^neutron/tests/fullstack/.*
+      - ^neutron/tests/functional/.*
+      - ^neutron_tempest_plugin/api/test_.*$
+      - ^neutron_tempest_plugin/(bgpvpn|neutron_dynamic_routing|sfc|tap_as_a_service|vpnaas).*$
+      - ^neutron_tempest_plugin/services/bgp/.*$
+      - ^tools/.*$
+      - ^tox.ini$
+      - ^rally-jobs/.*$
+      - ^roles/.*functional.*$
+      - ^playbooks/.*functional.*$
+      - ^vagrant/.*$
+      - ^zuul.d/(?!(project)).*\.yaml
 
 - job:
     name: neutron-tempest-plugin-vpnaas
@@ -1104,6 +1243,8 @@
       - ^tools/.*$
       - ^tox.ini$
       - ^rally-jobs/.*$
+      - ^roles/.*functional.*$
+      - ^playbooks/.*functional.*$
       - ^vagrant/.*$
       - ^zuul.d/(?!(project)).*\.yaml
 
@@ -1123,7 +1264,6 @@
     vars:
       tempest_test_regex: ^neutron_tempest_plugin\.tap_as_a_service
       tox_envlist: all
-      network_api_extensions_common: *api_extensions
       network_api_extensions_tempest:
         - taas
         - taas-vlan-filter
@@ -1211,5 +1351,7 @@
       - ^tools/.*$
       - ^tox.ini$
       - ^rally-jobs/.*$
+      - ^roles/.*functional.*$
+      - ^playbooks/.*functional.*$
       - ^vagrant/.*$
       - ^zuul.d/(?!(project)).*\.yaml
diff --git a/zuul.d/project.yaml b/zuul.d/project.yaml
index 0584523..307355a 100644
--- a/zuul.d/project.yaml
+++ b/zuul.d/project.yaml
@@ -2,26 +2,24 @@
     name: neutron-tempest-plugin-jobs
     check:
       jobs:
-        - neutron-tempest-plugin-api
-        - neutron-tempest-plugin-scenario-linuxbridge
-        - neutron-tempest-plugin-scenario-openvswitch
-        - neutron-tempest-plugin-scenario-openvswitch-iptables_hybrid
-        - neutron-tempest-plugin-scenario-ovn
+        - neutron-tempest-plugin-linuxbridge
+        - neutron-tempest-plugin-openvswitch
+        - neutron-tempest-plugin-openvswitch-iptables_hybrid
+        - neutron-tempest-plugin-ovn
         - neutron-tempest-plugin-designate-scenario
     gate:
       jobs:
-        - neutron-tempest-plugin-api
-        - neutron-tempest-plugin-scenario-linuxbridge
-        - neutron-tempest-plugin-scenario-openvswitch
-        - neutron-tempest-plugin-scenario-ovn
-        - neutron-tempest-plugin-scenario-openvswitch-iptables_hybrid
+        - neutron-tempest-plugin-linuxbridge
+        - neutron-tempest-plugin-openvswitch
+        - neutron-tempest-plugin-ovn
+        - neutron-tempest-plugin-openvswitch-iptables_hybrid
     #TODO(slaweq): Move neutron-tempest-plugin-dvr-multinode-scenario out of
     #              the experimental queue when it will be more stable
     experimental:
       jobs:
         - neutron-tempest-plugin-dvr-multinode-scenario
-        - neutron-tempest-plugin-scenario-openvswitch-distributed-dhcp
-        - neutron-tempest-plugin-scenario-openvswitch-iptables_hybrid-distributed-dhcp
+        - neutron-tempest-plugin-openvswitch-distributed-dhcp
+        - neutron-tempest-plugin-openvswitch-iptables_hybrid-distributed-dhcp
 
 
 - project-template:
@@ -200,7 +198,6 @@
     templates:
       - build-openstack-docs-pti
       - neutron-tempest-plugin-jobs
-      - neutron-tempest-plugin-jobs-victoria
       - neutron-tempest-plugin-jobs-wallaby
       - neutron-tempest-plugin-jobs-xena
       - neutron-tempest-plugin-jobs-yoga
@@ -210,23 +207,19 @@
     check:
       jobs:
         - neutron-tempest-plugin-sfc
-        - neutron-tempest-plugin-sfc-victoria
         - neutron-tempest-plugin-sfc-wallaby
         - neutron-tempest-plugin-sfc-xena
         - neutron-tempest-plugin-sfc-yoga
         - neutron-tempest-plugin-bgpvpn-bagpipe
-        - neutron-tempest-plugin-bgpvpn-bagpipe-victoria
         - neutron-tempest-plugin-bgpvpn-bagpipe-wallaby
         - neutron-tempest-plugin-bgpvpn-bagpipe-xena
         - neutron-tempest-plugin-bgpvpn-bagpipe-yoga
         - neutron-tempest-plugin-dynamic-routing
-        - neutron-tempest-plugin-dynamic-routing-victoria
         - neutron-tempest-plugin-dynamic-routing-wallaby
         - neutron-tempest-plugin-dynamic-routing-xena
         - neutron-tempest-plugin-dynamic-routing-yoga
         - neutron-tempest-plugin-fwaas
         - neutron-tempest-plugin-vpnaas
-        - neutron-tempest-plugin-vpnaas-victoria
         - neutron-tempest-plugin-vpnaas-wallaby
         - neutron-tempest-plugin-vpnaas-xena
         - neutron-tempest-plugin-vpnaas-yoga
diff --git a/zuul.d/queens_jobs.yaml b/zuul.d/queens_jobs.yaml
index 214df60..35fba1b 100644
--- a/zuul.d/queens_jobs.yaml
+++ b/zuul.d/queens_jobs.yaml
@@ -1,7 +1,7 @@
 - job:
     name: neutron-tempest-plugin-api-queens
     nodeset: openstack-single-node-xenial
-    parent: neutron-tempest-plugin-api
+    parent: neutron-tempest-plugin-base
     override-checkout: stable/queens
     required-projects:
       - openstack/neutron
@@ -25,6 +25,7 @@
         q-meta: true
         q-metering: true
       branch_override: stable/queens
+      tempest_test_regex: ^neutron_tempest_plugin\.api
       # TODO(slaweq): find a way to put this list of extensions in
       # neutron repository and keep it different per branch,
       # then it could be removed from here
@@ -113,7 +114,7 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-openvswitch-queens
-    parent: neutron-tempest-plugin-scenario-openvswitch
+    parent: neutron-tempest-plugin-openvswitch
     nodeset: openstack-single-node-xenial
     override-checkout: stable/queens
     required-projects:
@@ -123,6 +124,10 @@
       - openstack/tempest
     vars:
       branch_override: stable/queens
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
       network_api_extensions: *api_extensions
       network_available_features: *available_features
       devstack_local_conf:
@@ -155,7 +160,7 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-linuxbridge-queens
-    parent: neutron-tempest-plugin-scenario
+    parent: neutron-tempest-plugin-base
     nodeset: openstack-single-node-xenial
     timeout: 10000
     roles:
@@ -168,6 +173,10 @@
       - openstack/tempest
     vars:
       branch_override: stable/queens
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
       network_api_extensions: *api_extensions
       network_available_features: *available_features
       # NOTE(bcafarel): remove DNS test as queens pinned version does not have
diff --git a/zuul.d/rocky_jobs.yaml b/zuul.d/rocky_jobs.yaml
index 9915575..62e57bf 100644
--- a/zuul.d/rocky_jobs.yaml
+++ b/zuul.d/rocky_jobs.yaml
@@ -1,7 +1,7 @@
 - job:
     name: neutron-tempest-plugin-api-rocky
     nodeset: openstack-single-node-xenial
-    parent: neutron-tempest-plugin-api
+    parent: neutron-tempest-plugin-base
     description: |
       This job run on py2 for stable/rocky gate.
     override-checkout: stable/rocky
@@ -27,6 +27,7 @@
         q-meta: true
         q-metering: true
       branch_override: stable/rocky
+      tempest_test_regex: ^neutron_tempest_plugin\.api
       # TODO(slaweq): find a way to put this list of extensions in
       # neutron repository and keep it different per branch,
       # then it could be removed from here
@@ -119,7 +120,7 @@
 - job:
     name: neutron-tempest-plugin-api-rocky
     nodeset: openstack-single-node-xenial
-    parent: neutron-tempest-plugin-api
+    parent: neutron-tempest-plugin-base
     description: |
       This job run on py3 for other than stable/rocky gate
       which is nothing but neutron-tempest-pluign master gate.
@@ -133,7 +134,7 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-openvswitch-rocky
-    parent: neutron-tempest-plugin-scenario
+    parent: neutron-tempest-plugin-base
     description: |
       This job run on py2 for stable/rocky gate.
     nodeset: openstack-single-node-xenial
@@ -141,6 +142,10 @@
     override-checkout: stable/rocky
     required-projects: *required-projects-rocky
     vars: &scenario_vars_rocky
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
       devstack_services:
         # Disable OVN services
         br-ex-tcpdump: false
@@ -236,7 +241,7 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-openvswitch-rocky
-    parent: neutron-tempest-plugin-scenario-openvswitch
+    parent: neutron-tempest-plugin-openvswitch
     nodeset: openstack-single-node-xenial
     description: |
       This job run on py3 for other than stable/rocky gate
@@ -253,7 +258,7 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-openvswitch-iptables_hybrid-rocky
-    parent: neutron-tempest-plugin-scenario
+    parent: neutron-tempest-plugin-base
     nodeset: openstack-single-node-xenial
     timeout: 10000
     description: |
@@ -343,7 +348,7 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-openvswitch-iptables_hybrid-rocky
-    parent: neutron-tempest-plugin-scenario
+    parent: neutron-tempest-plugin-base
     nodeset: openstack-single-node-xenial
     timeout: 10000
     description: |
@@ -361,7 +366,7 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-linuxbridge-rocky
-    parent: neutron-tempest-plugin-scenario
+    parent: neutron-tempest-plugin-base
     timeout: 10000
     description: |
       This job run on py2 for stable/rocky gate.
@@ -372,6 +377,10 @@
     required-projects: *required-projects-rocky
     vars: &linuxbridge_vars_rocky
       branch_override: stable/rocky
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
       network_api_extensions: *api_extensions
       devstack_localrc:
         USE_PYTHON3: false
@@ -416,7 +425,7 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-linuxbridge-rocky
-    parent: neutron-tempest-plugin-scenario
+    parent: neutron-tempest-plugin-base
     nodeset: openstack-single-node-xenial
     timeout: 10000
     description: |
diff --git a/zuul.d/stein_jobs.yaml b/zuul.d/stein_jobs.yaml
index b229296..e9e8137 100644
--- a/zuul.d/stein_jobs.yaml
+++ b/zuul.d/stein_jobs.yaml
@@ -1,6 +1,6 @@
 - job:
     name: neutron-tempest-plugin-api-stein
-    parent: neutron-tempest-plugin-api
+    parent: neutron-tempest-plugin-base
     nodeset: openstack-single-node-bionic
     override-checkout: stable/stein
     required-projects: &required-projects-stein
@@ -25,6 +25,7 @@
         q-meta: true
         q-metering: true
       branch_override: stable/stein
+      tempest_test_regex: ^neutron_tempest_plugin\.api
       # TODO(slaweq): find a way to put this list of extensions in
       # neutron repository and keep it different per branch,
       # then it could be removed from here
@@ -128,12 +129,16 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-openvswitch-stein
-    parent: neutron-tempest-plugin-scenario-openvswitch
+    parent: neutron-tempest-plugin-openvswitch
     nodeset: openstack-single-node-bionic
     override-checkout: stable/stein
     required-projects: *required-projects-stein
     vars:
       branch_override: stable/stein
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
       network_api_extensions: *api_extensions
       network_available_features: *available_features
       tempest_black_regex: *stein_tempest_exclude
@@ -160,13 +165,17 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-openvswitch-iptables_hybrid-stein
-    parent: neutron-tempest-plugin-scenario
+    parent: neutron-tempest-plugin-base
     nodeset: openstack-single-node-bionic
     timeout: 10000
     override-checkout: stable/stein
     required-projects: *required-projects-stein
     vars:
       branch_override: stable/stein
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
       devstack_services:
         # Disable OVN services
         br-ex-tcpdump: false
@@ -247,7 +256,7 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-linuxbridge-stein
-    parent: neutron-tempest-plugin-scenario
+    parent: neutron-tempest-plugin-base
     nodeset: openstack-single-node-bionic
     timeout: 10000
     roles:
@@ -257,6 +266,10 @@
     required-projects: *required-projects-stein
     vars:
       branch_override: stable/stein
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
       devstack_services:
         # Disable OVN services
         br-ex-tcpdump: false
diff --git a/zuul.d/train_jobs.yaml b/zuul.d/train_jobs.yaml
index e3e4600..961b3b7 100644
--- a/zuul.d/train_jobs.yaml
+++ b/zuul.d/train_jobs.yaml
@@ -1,6 +1,6 @@
 - job:
     name: neutron-tempest-plugin-api-train
-    parent: neutron-tempest-plugin-api
+    parent: neutron-tempest-plugin-base
     nodeset: openstack-single-node-bionic
     override-checkout: stable/train
     required-projects: &required-projects-train
@@ -25,6 +25,7 @@
         q-meta: true
         q-metering: true
       branch_override: stable/train
+      tempest_test_regex: ^neutron_tempest_plugin\.api
       # TODO(slaweq): find a way to put this list of extensions in
       # neutron repository and keep it different per branch,
       # then it could be removed from here
@@ -102,6 +103,12 @@
       network_available_features: &available_features
         -
       devstack_localrc:
+        # NOTE(bcafarel) guestmount binary not available on host OS
+        IMAGE_URLS: https://cloud-images.ubuntu.com/releases/bionic/release/ubuntu-18.04-server-cloudimg-amd64.img
+        ADVANCED_IMAGE_NAME: ubuntu-18.04-server-cloudimg-amd64
+        ADVANCED_INSTANCE_TYPE: ds512M
+        ADVANCED_INSTANCE_USER: ubuntu
+        CUSTOMIZE_IMAGE: false
         NEUTRON_DEPLOY_MOD_WSGI: false
         NETWORK_API_EXTENSIONS: "{{ (network_api_extensions_common + network_api_extensions_tempest) | join(',') }}"
         Q_AGENT: openvswitch
@@ -125,12 +132,16 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-openvswitch-train
-    parent: neutron-tempest-plugin-scenario-openvswitch
+    parent: neutron-tempest-plugin-openvswitch
     nodeset: openstack-single-node-bionic
     override-checkout: stable/train
     required-projects: *required-projects-train
     vars:
       branch_override: stable/train
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
       network_api_extensions: *api_extensions
       network_available_features: *available_features
       devstack_localrc:
@@ -156,12 +167,16 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-openvswitch-iptables_hybrid-train
-    parent: neutron-tempest-plugin-scenario-openvswitch-iptables_hybrid
+    parent: neutron-tempest-plugin-openvswitch-iptables_hybrid
     nodeset: openstack-single-node-bionic
     override-checkout: stable/train
     required-projects: *required-projects-train
     vars:
       branch_override: stable/train
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
       network_api_extensions: *api_extensions
       network_available_features: *available_features
       devstack_localrc:
@@ -187,12 +202,16 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-linuxbridge-train
-    parent: neutron-tempest-plugin-scenario-linuxbridge
+    parent: neutron-tempest-plugin-linuxbridge
     nodeset: openstack-single-node-bionic
     override-checkout: stable/train
     required-projects: *required-projects-train
     vars:
       branch_override: stable/train
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
       network_api_extensions: *api_extensions
       network_available_features: *available_features
       devstack_localrc:
diff --git a/zuul.d/ussuri_jobs.yaml b/zuul.d/ussuri_jobs.yaml
index be9e0f0..28fccc6 100644
--- a/zuul.d/ussuri_jobs.yaml
+++ b/zuul.d/ussuri_jobs.yaml
@@ -1,12 +1,12 @@
 - job:
     name: neutron-tempest-plugin-api-ussuri
-    parent: neutron-tempest-plugin-api
+    parent: neutron-tempest-plugin-base
     nodeset: openstack-single-node-bionic
     override-checkout: stable/ussuri
     required-projects: &required-projects-ussuri
       - openstack/neutron
       - name: openstack/neutron-tempest-plugin
-        override-checkout: 1.8.0
+        override-checkout: 1.6.0
       - openstack/tempest
     vars:
       devstack_services:
@@ -25,6 +25,7 @@
         q-meta: true
         q-metering: true
       branch_override: stable/ussuri
+      tempest_test_regex: ^neutron_tempest_plugin\.api
       # TODO(slaweq): find a way to put this list of extensions in
       # neutron repository and keep it different per branch,
       # then it could be removed from here
@@ -112,6 +113,12 @@
         Q_ML2_TENANT_NETWORK_TYPE: vxlan
         Q_ML2_PLUGIN_MECHANISM_DRIVERS: openvswitch
         ML2_L3_PLUGIN: router
+        # NOTE(bcafarel) guestmount binary not available on host OS
+        IMAGE_URLS: https://cloud-images.ubuntu.com/releases/bionic/release/ubuntu-18.04-server-cloudimg-amd64.img
+        ADVANCED_IMAGE_NAME: ubuntu-18.04-server-cloudimg-amd64
+        ADVANCED_INSTANCE_TYPE: ds512M
+        ADVANCED_INSTANCE_USER: ubuntu
+        CUSTOMIZE_IMAGE: false
       devstack_local_conf:
         post-config:
           # NOTE(slaweq): We can get rid of this hardcoded absolute path when
@@ -130,12 +137,16 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-openvswitch-ussuri
-    parent: neutron-tempest-plugin-scenario-openvswitch
+    parent: neutron-tempest-plugin-openvswitch
     nodeset: openstack-single-node-bionic
     override-checkout: stable/ussuri
     required-projects: *required-projects-ussuri
     vars:
       branch_override: stable/ussuri
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
       network_api_extensions: *api_extensions
       network_available_features: *available_features
       devstack_localrc:
@@ -156,12 +167,16 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-openvswitch-iptables_hybrid-ussuri
-    parent: neutron-tempest-plugin-scenario-openvswitch-iptables_hybrid
+    parent: neutron-tempest-plugin-openvswitch-iptables_hybrid
     nodeset: openstack-single-node-bionic
     override-checkout: stable/ussuri
     required-projects: *required-projects-ussuri
     vars:
       branch_override: stable/ussuri
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
       network_api_extensions: *api_extensions
       network_available_features: *available_features
       devstack_localrc:
@@ -181,12 +196,16 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-linuxbridge-ussuri
-    parent: neutron-tempest-plugin-scenario-linuxbridge
+    parent: neutron-tempest-plugin-linuxbridge
     nodeset: openstack-single-node-bionic
     override-checkout: stable/ussuri
     required-projects: *required-projects-ussuri
     vars:
       branch_override: stable/ussuri
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
       network_api_extensions: *api_extensions
       network_available_features: *available_features
       devstack_localrc:
@@ -206,12 +225,16 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-ovn-ussuri
-    parent: neutron-tempest-plugin-scenario-ovn
+    parent: neutron-tempest-plugin-ovn
     nodeset: openstack-single-node-bionic
     override-checkout: stable/ussuri
     required-projects: *required-projects-ussuri
     vars:
       branch_override: stable/ussuri
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
       network_api_extensions: *api_extensions
       # TODO(haleyb): Remove IPv6Test from blacklist when
       # https://bugs.launchpad.net/neutron/+bug/1881558 is fixed.
@@ -259,7 +282,7 @@
     required-projects:
       - openstack/neutron
       - name: openstack/neutron-tempest-plugin
-        override-checkout: 1.8.0
+        override-checkout: 1.6.0
       - openstack/tempest
       - openstack/designate-tempest-plugin
     vars:
@@ -296,7 +319,7 @@
       - openstack/neutron-fwaas
       - openstack/neutron
       - name: openstack/neutron-tempest-plugin
-        override-checkout: 1.8.0
+        override-checkout: 1.6.0
       - openstack/tempest
     vars:
       branch_override: stable/ussuri
diff --git a/zuul.d/victoria_jobs.yaml b/zuul.d/victoria_jobs.yaml
index d648aa8..67737a7 100644
--- a/zuul.d/victoria_jobs.yaml
+++ b/zuul.d/victoria_jobs.yaml
@@ -1,7 +1,12 @@
 - job:
     name: neutron-tempest-plugin-api-victoria
-    parent: neutron-tempest-plugin-api
+    parent: neutron-tempest-plugin-base
     override-checkout: stable/victoria
+    required-projects: &required-projects-victoria
+      - openstack/neutron
+      - name: openstack/neutron-tempest-plugin
+        override-checkout: 1.6.0
+      - openstack/tempest
     vars:
       devstack_services:
         # Disable OVN services
@@ -19,6 +24,7 @@
         q-meta: true
         q-metering: true
       branch_override: stable/victoria
+      tempest_test_regex: ^neutron_tempest_plugin\.api
       # TODO(slaweq): find a way to put this list of extensions in
       # neutron repository and keep it different per branch,
       # then it could be removed from here
@@ -106,6 +112,12 @@
         Q_ML2_TENANT_NETWORK_TYPE: vxlan
         Q_ML2_PLUGIN_MECHANISM_DRIVERS: openvswitch
         ML2_L3_PLUGIN: router
+        # NOTE(bcafarel) guestmount binary not available on host OS
+        IMAGE_URLS: https://cloud-images.ubuntu.com/releases/bionic/release/ubuntu-18.04-server-cloudimg-amd64.img
+        ADVANCED_IMAGE_NAME: ubuntu-18.04-server-cloudimg-amd64
+        ADVANCED_INSTANCE_TYPE: ds512M
+        ADVANCED_INSTANCE_USER: ubuntu
+        CUSTOMIZE_IMAGE: false
       devstack_local_conf:
         post-config:
           # NOTE(slaweq): We can get rid of this hardcoded absolute path when
@@ -123,14 +135,25 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-openvswitch-victoria
-    parent: neutron-tempest-plugin-scenario-openvswitch
+    parent: neutron-tempest-plugin-openvswitch
     override-checkout: stable/victoria
+    required-projects: *required-projects-victoria
     vars:
       branch_override: stable/victoria
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
       network_api_extensions: *api_extensions
       network_available_features: *available_features
       devstack_localrc:
         NETWORK_API_EXTENSIONS: "{{ network_api_extensions | join(',') }}"
+        # NOTE(bcafarel) guestmount binary not available on host OS
+        IMAGE_URLS: https://cloud-images.ubuntu.com/releases/bionic/release/ubuntu-18.04-server-cloudimg-amd64.img
+        ADVANCED_IMAGE_NAME: ubuntu-18.04-server-cloudimg-amd64
+        ADVANCED_INSTANCE_TYPE: ds512M
+        ADVANCED_INSTANCE_USER: ubuntu
+        CUSTOMIZE_IMAGE: false
       devstack_local_conf:
         test-config:
           $TEMPEST_CONFIG:
@@ -141,14 +164,25 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-openvswitch-iptables_hybrid-victoria
-    parent: neutron-tempest-plugin-scenario-openvswitch-iptables_hybrid
+    parent: neutron-tempest-plugin-openvswitch-iptables_hybrid
     override-checkout: stable/victoria
+    required-projects: *required-projects-victoria
     vars:
       branch_override: stable/victoria
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
       network_api_extensions: *api_extensions
       network_available_features: *available_features
       devstack_localrc:
         NETWORK_API_EXTENSIONS: "{{ network_api_extensions | join(',') }}"
+        # NOTE(bcafarel) guestmount binary not available on host OS
+        IMAGE_URLS: https://cloud-images.ubuntu.com/releases/bionic/release/ubuntu-18.04-server-cloudimg-amd64.img
+        ADVANCED_IMAGE_NAME: ubuntu-18.04-server-cloudimg-amd64
+        ADVANCED_INSTANCE_TYPE: ds512M
+        ADVANCED_INSTANCE_USER: ubuntu
+        CUSTOMIZE_IMAGE: false
       devstack_local_conf:
         test-config:
           $TEMPEST_CONFIG:
@@ -159,14 +193,25 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-linuxbridge-victoria
-    parent: neutron-tempest-plugin-scenario-linuxbridge
+    parent: neutron-tempest-plugin-linuxbridge
     override-checkout: stable/victoria
+    required-projects: *required-projects-victoria
     vars:
       branch_override: stable/victoria
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
       network_api_extensions: *api_extensions
       network_available_features: *available_features
       devstack_localrc:
         NETWORK_API_EXTENSIONS: "{{ network_api_extensions | join(',') }}"
+        # NOTE(bcafarel) guestmount binary not available on host OS
+        IMAGE_URLS: https://cloud-images.ubuntu.com/releases/bionic/release/ubuntu-18.04-server-cloudimg-amd64.img
+        ADVANCED_IMAGE_NAME: ubuntu-18.04-server-cloudimg-amd64
+        ADVANCED_INSTANCE_TYPE: ds512M
+        ADVANCED_INSTANCE_USER: ubuntu
+        CUSTOMIZE_IMAGE: false
       devstack_local_conf:
         test-config:
           $TEMPEST_CONFIG:
@@ -177,13 +222,24 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-ovn-victoria
-    parent: neutron-tempest-plugin-scenario-ovn
+    parent: neutron-tempest-plugin-ovn
     override-checkout: stable/victoria
+    required-projects: *required-projects-victoria
     vars:
       branch_override: stable/victoria
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
       network_api_extensions: *api_extensions
       devstack_localrc:
         NETWORK_API_EXTENSIONS: "{{ network_api_extensions | join(',') }}"
+        # NOTE(bcafarel) guestmount binary not available on host OS
+        IMAGE_URLS: https://cloud-images.ubuntu.com/releases/bionic/release/ubuntu-18.04-server-cloudimg-amd64.img
+        ADVANCED_IMAGE_NAME: ubuntu-18.04-server-cloudimg-amd64
+        ADVANCED_INSTANCE_TYPE: ds512M
+        ADVANCED_INSTANCE_USER: ubuntu
+        CUSTOMIZE_IMAGE: false
       devstack_local_conf:
         test-config:
           $TEMPEST_CONFIG:
@@ -194,6 +250,7 @@
     name: neutron-tempest-plugin-dvr-multinode-scenario-victoria
     parent: neutron-tempest-plugin-dvr-multinode-scenario
     override-checkout: stable/victoria
+    required-projects: *required-projects-victoria
     vars:
       network_api_extensions_common: *api_extensions
       branch_override: stable/victoria
@@ -202,14 +259,29 @@
     name: neutron-tempest-plugin-designate-scenario-victoria
     parent: neutron-tempest-plugin-designate-scenario
     override-checkout: stable/victoria
+    required-projects:
+      - openstack/neutron
+      - name: openstack/neutron-tempest-plugin
+        override-checkout: 1.6.0
+      - openstack/tempest
+      - name: openstack/designate-tempest-plugin
+        override-checkout: 0.12.0
     vars:
       branch_override: stable/victoria
       network_api_extensions_common: *api_extensions
+      devstack_localrc:
+        # NOTE(bcafarel) guestmount binary not available on host OS
+        IMAGE_URLS: https://cloud-images.ubuntu.com/releases/bionic/release/ubuntu-18.04-server-cloudimg-amd64.img
+        ADVANCED_IMAGE_NAME: ubuntu-18.04-server-cloudimg-amd64
+        ADVANCED_INSTANCE_TYPE: ds512M
+        ADVANCED_INSTANCE_USER: ubuntu
+        CUSTOMIZE_IMAGE: false
 
 - job:
     name: neutron-tempest-plugin-sfc-victoria
     parent: neutron-tempest-plugin-sfc
     override-checkout: stable/victoria
+    required-projects: *required-projects-victoria
     vars:
       branch_override: stable/victoria
       network_api_extensions_common: *api_extensions
@@ -218,6 +290,7 @@
     name: neutron-tempest-plugin-bgpvpn-bagpipe-victoria
     parent: neutron-tempest-plugin-bgpvpn-bagpipe
     override-checkout: stable/victoria
+    required-projects: *required-projects-victoria
     vars:
       branch_override: stable/victoria
       network_api_extensions: *api_extensions
@@ -226,6 +299,7 @@
     name: neutron-tempest-plugin-dynamic-routing-victoria
     parent: neutron-tempest-plugin-dynamic-routing
     override-checkout: stable/victoria
+    required-projects: *required-projects-victoria
     vars:
       branch_override: stable/victoria
       network_api_extensions_common: *api_extensions
@@ -234,6 +308,7 @@
     name: neutron-tempest-plugin-vpnaas-victoria
     parent: neutron-tempest-plugin-vpnaas
     override-checkout: stable/victoria
+    required-projects: *required-projects-victoria
     vars:
       branch_override: stable/victoria
       network_api_extensions_common: *api_extensions
diff --git a/zuul.d/wallaby_jobs.yaml b/zuul.d/wallaby_jobs.yaml
index c79667a..746ee9c 100644
--- a/zuul.d/wallaby_jobs.yaml
+++ b/zuul.d/wallaby_jobs.yaml
@@ -1,8 +1,9 @@
 - job:
     name: neutron-tempest-plugin-api-wallaby
-    parent: neutron-tempest-plugin-api
+    parent: neutron-tempest-plugin-base
     override-checkout: stable/wallaby
     vars:
+      tempest_test_regex: ^neutron_tempest_plugin\.api
       # TODO(slaweq): find a way to put this list of extensions in
       # neutron repository and keep it different per branch,
       # then it could be removed from here
@@ -89,10 +90,14 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-openvswitch-wallaby
-    parent: neutron-tempest-plugin-scenario-openvswitch
+    parent: neutron-tempest-plugin-openvswitch
     override-checkout: stable/wallaby
     vars:
       branch_override: stable/wallaby
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
       network_api_extensions: *api_extensions
       network_available_features: *available_features
       devstack_localrc:
@@ -105,10 +110,14 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-openvswitch-iptables_hybrid-wallaby
-    parent: neutron-tempest-plugin-scenario-openvswitch-iptables_hybrid
+    parent: neutron-tempest-plugin-openvswitch-iptables_hybrid
     override-checkout: stable/wallaby
     vars:
       branch_override: stable/wallaby
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
       network_api_extensions: *api_extensions
       network_available_features: *available_features
       devstack_localrc:
@@ -121,10 +130,14 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-linuxbridge-wallaby
-    parent: neutron-tempest-plugin-scenario-linuxbridge
+    parent: neutron-tempest-plugin-linuxbridge
     override-checkout: stable/wallaby
     vars:
       branch_override: stable/wallaby
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
       network_api_extensions: *api_extensions
       network_available_features: *available_features
       devstack_localrc:
@@ -137,10 +150,14 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-ovn-wallaby
-    parent: neutron-tempest-plugin-scenario-ovn
+    parent: neutron-tempest-plugin-ovn
     override-checkout: stable/wallaby
     vars:
       branch_override: stable/wallaby
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
       network_api_extensions: *api_extensions
       devstack_localrc:
         NETWORK_API_EXTENSIONS: "{{ network_api_extensions | join(',') }}"
diff --git a/zuul.d/xena_jobs.yaml b/zuul.d/xena_jobs.yaml
index 3d8ce43..1e6eb80 100644
--- a/zuul.d/xena_jobs.yaml
+++ b/zuul.d/xena_jobs.yaml
@@ -1,8 +1,9 @@
 - job:
     name: neutron-tempest-plugin-api-xena
-    parent: neutron-tempest-plugin-api
+    parent: neutron-tempest-plugin-base
     override-checkout: stable/xena
     vars:
+      tempest_test_regex: ^neutron_tempest_plugin\.api
       # TODO(slaweq): find a way to put this list of extensions in
       # neutron repository and keep it different per branch,
       # then it could be removed from here
@@ -91,10 +92,14 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-openvswitch-xena
-    parent: neutron-tempest-plugin-scenario-openvswitch
+    parent: neutron-tempest-plugin-openvswitch
     override-checkout: stable/xena
     vars:
       branch_override: stable/xena
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
       network_api_extensions: *api_extensions
       network_available_features: *available_features
       devstack_localrc:
@@ -107,10 +112,14 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-openvswitch-iptables_hybrid-xena
-    parent: neutron-tempest-plugin-scenario-openvswitch-iptables_hybrid
+    parent: neutron-tempest-plugin-openvswitch-iptables_hybrid
     override-checkout: stable/xena
     vars:
       branch_override: stable/xena
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
       network_api_extensions: *api_extensions
       network_available_features: *available_features
       devstack_localrc:
@@ -123,10 +132,14 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-linuxbridge-xena
-    parent: neutron-tempest-plugin-scenario-linuxbridge
+    parent: neutron-tempest-plugin-linuxbridge
     override-checkout: stable/xena
     vars:
       branch_override: stable/xena
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
       network_api_extensions: *api_extensions
       network_available_features: *available_features
       devstack_localrc:
@@ -139,10 +152,14 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-ovn-xena
-    parent: neutron-tempest-plugin-scenario-ovn
+    parent: neutron-tempest-plugin-ovn
     override-checkout: stable/xena
     vars:
       branch_override: stable/xena
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
       network_api_extensions: *api_extensions
       devstack_localrc:
         NETWORK_API_EXTENSIONS: "{{ network_api_extensions | join(',') }}"
diff --git a/zuul.d/yoga_jobs.yaml b/zuul.d/yoga_jobs.yaml
index 35720a0..87db14e 100644
--- a/zuul.d/yoga_jobs.yaml
+++ b/zuul.d/yoga_jobs.yaml
@@ -1,8 +1,9 @@
 - job:
     name: neutron-tempest-plugin-api-yoga
-    parent: neutron-tempest-plugin-api
+    parent: neutron-tempest-plugin-base
     override-checkout: stable/yoga
     vars:
+      tempest_test_regex: ^neutron_tempest_plugin\.api
       # TODO(slaweq): find a way to put this list of extensions in
       # neutron repository and keep it different per branch,
       # then it could be removed from here
@@ -93,10 +94,14 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-openvswitch-yoga
-    parent: neutron-tempest-plugin-scenario-openvswitch
+    parent: neutron-tempest-plugin-openvswitch
     override-checkout: stable/yoga
     vars:
       branch_override: stable/yoga
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
       network_api_extensions: *api_extensions
       network_available_features: *available_features
       devstack_localrc:
@@ -109,10 +114,14 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-openvswitch-iptables_hybrid-yoga
-    parent: neutron-tempest-plugin-scenario-openvswitch-iptables_hybrid
+    parent: neutron-tempest-plugin-openvswitch-iptables_hybrid
     override-checkout: stable/yoga
     vars:
       branch_override: stable/yoga
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
       network_api_extensions: *api_extensions
       network_available_features: *available_features
       devstack_localrc:
@@ -125,10 +134,14 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-linuxbridge-yoga
-    parent: neutron-tempest-plugin-scenario-linuxbridge
+    parent: neutron-tempest-plugin-linuxbridge
     override-checkout: stable/yoga
     vars:
       branch_override: stable/yoga
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
       network_api_extensions: *api_extensions
       network_available_features: *available_features
       devstack_localrc:
@@ -141,10 +154,14 @@
 
 - job:
     name: neutron-tempest-plugin-scenario-ovn-yoga
-    parent: neutron-tempest-plugin-scenario-ovn
+    parent: neutron-tempest-plugin-ovn
     override-checkout: stable/yoga
     vars:
       branch_override: stable/yoga
+      tempest_test_regex: "\
+          (^neutron_tempest_plugin.scenario)|\
+          (^tempest.api.compute.servers.test_attach_interfaces)|\
+          (^tempest.api.compute.servers.test_multiple_create)"
       network_api_extensions: *api_extensions
       network_api_extensions_ovn:
         - vlan-transparent