Merge "Add router check, subnet attached gateway IP update or deletion"
diff --git a/neutron_tempest_plugin/api/admin/test_routers_ha.py b/neutron_tempest_plugin/api/admin/test_routers_ha.py
index b717a10..2b18728 100644
--- a/neutron_tempest_plugin/api/admin/test_routers_ha.py
+++ b/neutron_tempest_plugin/api/admin/test_routers_ha.py
@@ -64,6 +64,9 @@
         set to False, thus making it a "Single Failure Router"
         as opposed to a "High Availability Router"
         """
+        # OVN driver doesn't accept ha=False (all OVN routers support HA)
+        if self.is_driver_ovn:
+            raise self.skipException("Test not meant for OVN driver")
         name = data_utils.rand_name('router')
         router = self._create_admin_router(name, ha=False)
         self.assertFalse(router['ha'])
@@ -81,6 +84,9 @@
         set to False. Once the router is updated, the ha
         attribute will be set to True
         """
+        # OVN driver doesn't accept ha=False (all OVN routers support HA)
+        if self.is_driver_ovn:
+            raise self.skipException("Test not meant for OVN driver")
         name = data_utils.rand_name('router')
         # router needs to be in admin state down in order to be upgraded to HA
         router = self._create_admin_router(name, ha=False,
@@ -101,6 +107,10 @@
         deleted, those segmentation data are kept in HA network. This tests
         regression of https://bugs.launchpad.net/neutron/+bug/1732543.
         """
+        # Test not meant for OVN implementation of HA
+        if self.is_driver_ovn:
+            raise self.skipException(
+                "Test not meant for OVN implementation of HA")
         for i in range(2):
             router = self._create_admin_router(
                 data_utils.rand_name('router%d' % i),
diff --git a/neutron_tempest_plugin/api/base.py b/neutron_tempest_plugin/api/base.py
index 7f96168..b659637 100644
--- a/neutron_tempest_plugin/api/base.py
+++ b/neutron_tempest_plugin/api/base.py
@@ -68,6 +68,21 @@
 
     external_network_id = CONF.network.public_network_id
 
+    __is_driver_ovn = None
+
+    @classmethod
+    def _is_driver_ovn(cls):
+        ovn_agents = cls.os_admin.network_client.list_agents(
+            binary='ovn-controller')['agents']
+        return len(ovn_agents) > 0
+
+    @property
+    def is_driver_ovn(self):
+        if self.__is_driver_ovn is None:
+            if hasattr(self, 'os_admin'):
+                self.__is_driver_ovn = self._is_driver_ovn()
+        return self.__is_driver_ovn
+
     @classmethod
     def get_client_manager(cls, credential_type=None, roles=None,
                            force_new=None):
diff --git a/neutron_tempest_plugin/api/test_revisions.py b/neutron_tempest_plugin/api/test_revisions.py
index 09bb3f1..9034cc3 100644
--- a/neutron_tempest_plugin/api/test_revisions.py
+++ b/neutron_tempest_plugin/api/test_revisions.py
@@ -342,6 +342,9 @@
     @utils.requires_ext(extension="router", service="network")
     @utils.requires_ext(extension="l3-ha", service="network")
     def test_update_router_extra_attributes_bumps_revision(self):
+        # OVN driver doesn't accept ha=False (all OVN routers support HA)
+        if self.is_driver_ovn:
+            raise self.skipException("Test not meant for OVN driver")
         # updates from CVR to CVR-HA are supported on every release,
         # but only the admin can forcibly create a non-HA router
         router_args = {'tenant_id': self.client.project_id,
diff --git a/neutron_tempest_plugin/vpnaas/api/test_vpnaas.py b/neutron_tempest_plugin/vpnaas/api/test_vpnaas.py
index b61fb1b..129680a 100644
--- a/neutron_tempest_plugin/vpnaas/api/test_vpnaas.py
+++ b/neutron_tempest_plugin/vpnaas/api/test_vpnaas.py
@@ -14,10 +14,10 @@
 #    under the License.
 
 from neutron_lib.db import constants as db_const
+from tempest.common import utils
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
-from tempest import test
 
 from neutron_tempest_plugin import config
 from neutron_tempest_plugin.vpnaas.api import base_vpnaas as base
@@ -42,7 +42,7 @@
 
     @classmethod
     def resource_setup(cls):
-        if not test.is_extension_enabled('vpnaas', 'network'):
+        if not utils.is_extension_enabled('vpnaas', 'network'):
             msg = "vpnaas extension not enabled."
             raise cls.skipException(msg)
         super(VPNaaSTestJSON, cls).resource_setup()
diff --git a/zuul.d/base-nested-switch.yaml b/zuul.d/base-nested-switch.yaml
index cb3d32e..8533e07 100644
--- a/zuul.d/base-nested-switch.yaml
+++ b/zuul.d/base-nested-switch.yaml
@@ -24,7 +24,7 @@
     parent: neutron-tempest-plugin-base
     abstract: true
     branches:
-      regex: ^(unmaintained|stable/(train|ussuri|victoria|wallaby|xena|yoga|zed)).*$
+      regex: ^(unmaintained|stable/(victoria|wallaby|xena|yoga|zed)).*$
       negate: true
     # Comment nodeset and vars to switch back to non nested nodes
     nodeset: neutron-nested-virt-ubuntu-jammy
@@ -53,4 +53,4 @@
     name: neutron-tempest-plugin-base-nested-switch
     parent: neutron-tempest-plugin-base
     abstract: true
-    branches: ^(stable/(train|ussuri|victoria|wallaby|xena)).*$
+    branches: ^(stable/(victoria|wallaby|xena)).*$
diff --git a/zuul.d/project.yaml b/zuul.d/project.yaml
index 92dc844..494e652 100644
--- a/zuul.d/project.yaml
+++ b/zuul.d/project.yaml
@@ -24,44 +24,6 @@
 
 
 - project-template:
-    name: neutron-tempest-plugin-jobs-train
-    check:
-      jobs:
-        - neutron-tempest-plugin-api-train
-        - neutron-tempest-plugin-scenario-linuxbridge-train
-        - neutron-tempest-plugin-scenario-openvswitch-train
-        - neutron-tempest-plugin-scenario-openvswitch-iptables_hybrid-train
-    gate:
-      jobs:
-        - neutron-tempest-plugin-api-train
-    #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-train
-
-
-- project-template:
-    name: neutron-tempest-plugin-jobs-ussuri
-    check:
-      jobs:
-        - neutron-tempest-plugin-api-ussuri
-        - neutron-tempest-plugin-scenario-linuxbridge-ussuri
-        - neutron-tempest-plugin-scenario-openvswitch-ussuri
-        - neutron-tempest-plugin-scenario-openvswitch-iptables_hybrid-ussuri
-        - neutron-tempest-plugin-scenario-ovn-ussuri
-        - neutron-tempest-plugin-designate-scenario-ussuri
-    gate:
-      jobs:
-        - neutron-tempest-plugin-api-ussuri
-    #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-ussuri
-
-
-- project-template:
     name: neutron-tempest-plugin-jobs-victoria
     check:
       jobs:
diff --git a/zuul.d/train_jobs.yaml b/zuul.d/train_jobs.yaml
deleted file mode 100644
index 159feb2..0000000
--- a/zuul.d/train_jobs.yaml
+++ /dev/null
@@ -1,266 +0,0 @@
-- job:
-    name: neutron-tempest-plugin-api-train
-    parent: neutron-tempest-plugin-base
-    nodeset: openstack-single-node-bionic
-    override-checkout: stable/train
-    required-projects: &required-projects-train
-      - openstack/neutron
-      - name: openstack/neutron-tempest-plugin
-        override-checkout: 1.5.0
-      - openstack/tempest
-    vars:
-      devstack_services:
-        # Disable OVN services
-        br-ex-tcpdump: false
-        br-int-flows: false
-        ovn-controller: false
-        ovn-northd: false
-        ovs-vswitchd: false
-        ovsdb-server: false
-        q-ovn-metadata-agent: false
-        # Neutron services
-        q-agt: true
-        q-dhcp: true
-        q-l3: true
-        q-meta: true
-        q-metering: true
-      tempest_concurrency: 4
-      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
-      network_api_extensions_common: &api_extensions
-        - address-scope
-        - agent
-        - allowed-address-pairs
-        - auto-allocated-topology
-        - availability_zone
-        - binding
-        - default-subnetpools
-        - dhcp_agent_scheduler
-        - dns-domain-ports
-        - dns-integration
-        - empty-string-filtering
-        - expose-port-forwarding-in-fip
-        - expose-l3-conntrack-helper
-        - ext-gw-mode
-        - external-net
-        - extra_dhcp_opt
-        - extraroute
-        - extraroute-atomic
-        - filter-validation
-        - fip-port-details
-        - flavors
-        - floating-ip-port-forwarding
-        - floatingip-pools
-        - ip-substring-filtering
-        - l3-conntrack-helper
-        - l3-flavors
-        - l3-ha
-        - l3_agent_scheduler
-        - logging
-        - metering
-        - multi-provider
-        - net-mtu
-        - net-mtu-writable
-        - network-ip-availability
-        - network_availability_zone
-        - network-segment-range
-        - pagination
-        - port-resource-request
-        - port-mac-address-regenerate
-        - port-security
-        - port-security-groups-filtering
-        - project-id
-        - provider
-        - qos
-        - qos-bw-minimum-ingress
-        - qos-fip
-        - quotas
-        - quota_details
-        - rbac-policies
-        - rbac-security-groups
-        - router
-        - router-admin-state-down-before-update
-        - router_availability_zone
-        - security-group
-        - segment
-        - service-type
-        - sorting
-        - standard-attr-description
-        - standard-attr-revisions
-        - standard-attr-segment
-        - standard-attr-tag
-        - standard-attr-timestamp
-        - subnet_allocation
-        - subnet-service-types
-        - subnetpool-prefix-ops
-        - trunk
-        - trunk-details
-        - uplink-status-propagation
-      network_api_extensions_tempest:
-        - dvr
-      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
-        Q_ML2_TENANT_NETWORK_TYPE: vxlan
-        Q_ML2_PLUGIN_MECHANISM_DRIVERS: openvswitch
-        ML2_L3_PLUGIN: router
-      devstack_local_conf:
-        post-config:
-          /$NEUTRON_CORE_PLUGIN_CONF:
-            AGENT:
-              tunnel_types: gre,vxlan
-            ml2:
-              type_drivers: flat,geneve,vlan,gre,local,vxlan
-        test-config:
-          $TEMPEST_CONFIG:
-            neutron_plugin_options:
-              available_type_drivers: flat,geneve,vlan,gre,local,vxlan
-
-- job:
-    name: neutron-tempest-plugin-scenario-openvswitch-train
-    parent: neutron-tempest-plugin-openvswitch
-    nodeset: openstack-single-node-bionic
-    override-checkout: stable/train
-    required-projects: *required-projects-train
-    vars:
-      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:
-        post-config:
-          $NEUTRON_L3_CONF:
-            DEFAULT:
-              # NOTE(slaweq): on Bionic keepalived doesn't knows this option yet
-              keepalived_use_no_track: False
-        test-config:
-          $TEMPEST_CONFIG:
-            network-feature-enabled:
-              available_features: ""
-            neutron_plugin_options:
-              ipv6_metadata: False
-
-- job:
-    name: neutron-tempest-plugin-scenario-openvswitch-iptables_hybrid-train
-    parent: neutron-tempest-plugin-openvswitch-iptables_hybrid
-    nodeset: openstack-single-node-bionic
-    override-checkout: stable/train
-    required-projects: *required-projects-train
-    vars:
-      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:
-        post-config:
-          $NEUTRON_L3_CONF:
-            DEFAULT:
-              # NOTE(slaweq): on Bionic keepalived don't knows this option yet
-              keepalived_use_no_track: False
-        test-config:
-          $TEMPEST_CONFIG:
-            network-feature-enabled:
-              available_features: ""
-            neutron_plugin_options:
-              ipv6_metadata: False
-
-- job:
-    name: neutron-tempest-plugin-scenario-linuxbridge-train
-    parent: neutron-tempest-plugin-linuxbridge
-    nodeset: openstack-single-node-bionic
-    override-checkout: stable/train
-    required-projects: *required-projects-train
-    vars:
-      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:
-        post-config:
-          $NEUTRON_L3_CONF:
-            DEFAULT:
-              # NOTE(slaweq): on Bionic keepalived don't knows this option yet
-              keepalived_use_no_track: False
-        test-config:
-          $TEMPEST_CONFIG:
-            network-feature-enabled:
-              available_features: ""
-            neutron_plugin_options:
-              ipv6_metadata: False
-
-- job:
-    name: neutron-tempest-plugin-dvr-multinode-scenario-train
-    parent: neutron-tempest-plugin-dvr-multinode-scenario
-    nodeset: openstack-two-node-bionic
-    override-checkout: stable/train
-    required-projects: *required-projects-train
-    vars:
-      network_api_extensions_common: *api_extensions
-
-- job:
-    name: neutron-tempest-plugin-sfc-train
-    parent: neutron-tempest-plugin-sfc
-    nodeset: openstack-single-node-bionic
-    override-checkout: stable/train
-    required-projects: *required-projects-train
-    vars:
-      network_api_extensions_common: *api_extensions
-
-- job:
-    name: neutron-tempest-plugin-bgpvpn-bagpipe-train
-    parent: neutron-tempest-plugin-bgpvpn-bagpipe
-    nodeset: openstack-single-node-bionic
-    override-checkout: stable/train
-    required-projects: *required-projects-train
-    vars:
-      network_api_extensions: *api_extensions
-
-- job:
-    name: neutron-tempest-plugin-fwaas-train
-    parent: neutron-tempest-plugin-fwaas-ussuri
-    nodeset: openstack-single-node-bionic
-    override-checkout: stable/train
-    required-projects: *required-projects-train
-    vars:
-      network_api_extensions_common: *api_extensions
diff --git a/zuul.d/ussuri_jobs.yaml b/zuul.d/ussuri_jobs.yaml
deleted file mode 100644
index 5abc741..0000000
--- a/zuul.d/ussuri_jobs.yaml
+++ /dev/null
@@ -1,356 +0,0 @@
-- job:
-    name: neutron-tempest-plugin-api-ussuri
-    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.6.0
-      - openstack/tempest
-    vars:
-      devstack_services:
-        # Disable OVN services
-        br-ex-tcpdump: false
-        br-int-flows: false
-        ovn-controller: false
-        ovn-northd: false
-        ovs-vswitchd: false
-        ovsdb-server: false
-        q-ovn-metadata-agent: false
-        # Neutron services
-        q-agt: true
-        q-dhcp: true
-        q-l3: true
-        q-meta: true
-        q-metering: true
-      tempest_concurrency: 4
-      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
-      network_api_extensions_common: &api_extensions
-        - address-scope
-        - agent
-        - allowed-address-pairs
-        - auto-allocated-topology
-        - availability_zone
-        - binding
-        - default-subnetpools
-        - dhcp_agent_scheduler
-        - dns-domain-ports
-        - dns-integration
-        - empty-string-filtering
-        - expose-port-forwarding-in-fip
-        - expose-l3-conntrack-helper
-        - ext-gw-mode
-        - external-net
-        - extra_dhcp_opt
-        - extraroute
-        - extraroute-atomic
-        - filter-validation
-        - fip-port-details
-        - flavors
-        - floating-ip-port-forwarding
-        - floatingip-pools
-        - ip-substring-filtering
-        - l3-conntrack-helper
-        - l3-flavors
-        - l3-ha
-        - l3_agent_scheduler
-        - logging
-        - metering
-        - multi-provider
-        - net-mtu
-        - net-mtu-writable
-        - network-ip-availability
-        - network_availability_zone
-        - network-segment-range
-        - pagination
-        - port-resource-request
-        - port-mac-address-regenerate
-        - port-security
-        - port-security-groups-filtering
-        - project-id
-        - provider
-        - qos
-        - qos-bw-minimum-ingress
-        - qos-fip
-        - quotas
-        - quota_details
-        - rbac-address-scope
-        - rbac-policies
-        - rbac-security-groups
-        - rbac-subnetpool
-        - router
-        - router-admin-state-down-before-update
-        - router_availability_zone
-        - security-group
-        - segment
-        - service-type
-        - sorting
-        - standard-attr-description
-        - standard-attr-revisions
-        - standard-attr-segment
-        - standard-attr-tag
-        - standard-attr-timestamp
-        - subnet_allocation
-        - subnet-dns-publish-fixed-ip
-        - subnet-service-types
-        - subnetpool-prefix-ops
-        - tag-ports-during-bulk-creation
-        - trunk
-        - trunk-details
-        - uplink-status-propagation
-      network_api_extensions_tempest:
-        - dvr
-      network_available_features: &available_features
-        -
-      devstack_localrc:
-        NEUTRON_DEPLOY_MOD_WSGI: false
-        NETWORK_API_EXTENSIONS: "{{ (network_api_extensions_common + network_api_extensions_tempest) | join(',') }}"
-        Q_AGENT: openvswitch
-        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:
-          /$NEUTRON_CORE_PLUGIN_CONF:
-            AGENT:
-              tunnel_types: gre,vxlan
-            ml2:
-              type_drivers: flat,geneve,vlan,gre,local,vxlan
-        test-config:
-          $TEMPEST_CONFIG:
-            neutron_plugin_options:
-              available_type_drivers: flat,geneve,vlan,gre,local,vxlan
-
-
-- job:
-    name: neutron-tempest-plugin-scenario-openvswitch-ussuri
-    parent: neutron-tempest-plugin-openvswitch
-    nodeset: openstack-single-node-bionic
-    override-checkout: stable/ussuri
-    required-projects: *required-projects-ussuri
-    vars:
-      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: &localrc_scenarios_common
-        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:
-        post-config:
-          $NEUTRON_L3_CONF:
-            DEFAULT:
-              # NOTE(slaweq): on Bionic keepalived don't knows this option yet
-              keepalived_use_no_track: False
-        test-config:
-          $TEMPEST_CONFIG:
-            network-feature-enabled:
-              available_features: ""
-            neutron_plugin_options:
-              ipv6_metadata: False
-
-
-- job:
-    name: neutron-tempest-plugin-scenario-openvswitch-iptables_hybrid-ussuri
-    parent: neutron-tempest-plugin-openvswitch-iptables_hybrid
-    nodeset: openstack-single-node-bionic
-    override-checkout: stable/ussuri
-    required-projects: *required-projects-ussuri
-    vars:
-      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
-      # TODO(akatz): remove established tcp session verification test when the
-      # bug https://bugzilla.redhat.com/show_bug.cgi?id=1965036 will be fixed
-      tempest_exclude_regex: "\
-          (^neutron_tempest_plugin.scenario.test_security_groups.NetworkSecGroupTest.test_established_tcp_session_after_re_attachinging_sg)"
-      devstack_localrc: *localrc_scenarios_common
-      devstack_local_conf:
-        post-config:
-          $NEUTRON_L3_CONF:
-            DEFAULT:
-              # NOTE(slaweq): on Bionic keepalived don't knows this option yet
-              keepalived_use_no_track: False
-        test-config:
-          $TEMPEST_CONFIG:
-            network-feature-enabled:
-              available_features: ""
-            neutron_plugin_options:
-              ipv6_metadata: False
-
-- job:
-    name: neutron-tempest-plugin-scenario-linuxbridge-ussuri
-    parent: neutron-tempest-plugin-linuxbridge
-    nodeset: openstack-single-node-bionic
-    override-checkout: stable/ussuri
-    required-projects: *required-projects-ussuri
-    vars:
-      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: *localrc_scenarios_common
-      devstack_local_conf:
-        post-config:
-          $NEUTRON_L3_CONF:
-            DEFAULT:
-              # NOTE(slaweq): on Bionic keepalived don't knows this option yet
-              keepalived_use_no_track: False
-        test-config:
-          $TEMPEST_CONFIG:
-            network-feature-enabled:
-              available_features: ""
-            neutron_plugin_options:
-              ipv6_metadata: False
-
-- job:
-    name: neutron-tempest-plugin-scenario-ovn-ussuri
-    parent: neutron-tempest-plugin-ovn
-    nodeset: openstack-single-node-bionic
-    override-checkout: stable/ussuri
-    required-projects: *required-projects-ussuri
-    vars:
-      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.
-      # TODO(slaweq): Remove test_trunk_subport_lifecycle test from the
-      # blacklist when bug https://bugs.launchpad.net/neutron/+bug/1885900 will
-      # be fixed
-      # TODO(jlibosva): Remove the NetworkWritableMtuTest test from the list
-      # once east/west fragmentation is supported in core OVN
-      tempest_exclude_regex: "\
-          (?:neutron_tempest_plugin.scenario.test_ipv6.IPv6Test)|\
-          (^neutron_tempest_plugin.scenario.test_trunk.TrunkTest.test_trunk_subport_lifecycle)|\
-          (^neutron_tempest_plugin.scenario.test_mtu.NetworkWritableMtuTest)"
-      devstack_localrc:
-        NETWORK_API_EXTENSIONS: "{{ network_api_extensions | join(',') }}"
-        # TODO(mjozefcz): Stop compiling OVS modules when meter action in kernel
-        # will be released in Ubuntu Bionic.
-        # More info: https://mail.openvswitch.org/pipermail/ovs-discuss/2018-December/048009.html
-        OVN_BUILD_MODULES: True
-        # TODO(skaplons): v2.13.1 is incompatible with kernel 4.15.0-118, sticking to commit hash until new v2.13 tag is created
-        OVS_BRANCH: 0047ca3a0290f1ef954f2c76b31477cf4b9755f5
-        OVN_BRANCH: "v20.03.0"
-        # NOTE(slaweq): IGMP Snooping requires OVN 20.12
-        OVN_IGMP_SNOOPING_ENABLE: False
-        # 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:
-            neutron_plugin_options:
-              is_igmp_snooping_enabled: False
-
-- job:
-    name: neutron-tempest-plugin-dvr-multinode-scenario-ussuri
-    parent: neutron-tempest-plugin-dvr-multinode-scenario
-    nodeset: openstack-two-node-bionic
-    override-checkout: stable/ussuri
-    required-projects: *required-projects-ussuri
-    vars:
-      network_api_extensions_common: *api_extensions
-
-- job:
-    name: neutron-tempest-plugin-designate-scenario-ussuri
-    parent: neutron-tempest-plugin-designate-scenario
-    nodeset: openstack-single-node-bionic
-    override-checkout: stable/ussuri
-    required-projects:
-      - openstack/neutron
-      - name: openstack/neutron-tempest-plugin
-        override-checkout: 1.6.0
-      - openstack/tempest
-      - name: openstack/designate-tempest-plugin
-        override-checkout: 0.7.0
-    vars:
-      network_api_extensions: *api_extensions
-      devstack_localrc: *localrc_scenarios_common
-
-- job:
-    name: neutron-tempest-plugin-sfc-ussuri
-    parent: neutron-tempest-plugin-sfc
-    nodeset: openstack-single-node-bionic
-    override-checkout: stable/ussuri
-    required-projects: *required-projects-ussuri
-    vars:
-      network_api_extensions_common: *api_extensions
-
-- job:
-    name: neutron-tempest-plugin-bgpvpn-bagpipe-ussuri
-    parent: neutron-tempest-plugin-bgpvpn-bagpipe
-    nodeset: openstack-single-node-bionic
-    override-checkout: stable/ussuri
-    required-projects: *required-projects-ussuri
-    vars:
-      network_api_extensions: *api_extensions
-
-- job:
-    name: neutron-tempest-plugin-fwaas-ussuri
-    parent: neutron-tempest-plugin-base
-    nodeset: openstack-single-node-bionic
-    timeout: 10800
-    override-checkout: stable/ussuri
-    required-projects:
-      - openstack/neutron-fwaas
-      - openstack/neutron
-      - name: openstack/neutron-tempest-plugin
-        override-checkout: 1.6.0
-      - openstack/tempest
-    vars:
-      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:
-        NETWORK_API_EXTENSIONS: "{{ (network_api_extensions_common + network_api_extensions_fwaas) | join(',') }}"
-
-- job:
-    name: neutron-tempest-plugin-dynamic-routing-ussuri
-    parent: neutron-tempest-plugin-dynamic-routing
-    nodeset: openstack-single-node-bionic
-    override-checkout: stable/ussuri
-    required-projects: *required-projects-ussuri
-    vars:
-      network_api_extensions_common: *api_extensions
-
-- job:
-    name: neutron-tempest-plugin-vpnaas-ussuri
-    parent: neutron-tempest-plugin-vpnaas
-    nodeset: openstack-single-node-bionic
-    override-checkout: stable/ussuri
-    required-projects: *required-projects-ussuri
-    vars:
-      network_api_extensions_common: *api_extensions