- job:
    name: neutron-tempest-base
    description: Base job for tempest to test Neutron
    parent: tempest-integrated-networking
    abstract: true
    timeout: 10800
    required-projects:
      - openstack/neutron
      - openstack/tempest
    pre-run: playbooks/configure_ebtables.yaml
    vars:
      tempest_concurrency: 4
      devstack_localrc:
        MYSQL_GATHER_PERFORMANCE: false
        Q_ML2_TENANT_NETWORK_TYPE: vxlan
        MYSQL_REDUCE_MEMORY: true
      devstack_plugins:
        neutron: https://opendev.org/openstack/neutron.git
      devstack_services:
        # OVN services
        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
        q-svc: true
        # Cinder services
        c-api: false
        c-bak: false
        c-sch: false
        c-vol: false
        cinder: false
        # Swift services
        s-account: false
        s-container: false
        s-object: false
        s-proxy: false
      devstack_local_conf:
        post-config:
          $NEUTRON_L3_CONF:
            agent:
              debug_iptables_rules: True

- job:
    name: neutron-ovs-tempest-base
    description: Base job for tempest to test Neutron with ML2/OVS driver
    parent: neutron-tempest-base
    vars:
      devstack_localrc:
        MYSQL_GATHER_PERFORMANCE: false
        Q_AGENT: openvswitch
        Q_ML2_PLUGIN_MECHANISM_DRIVERS: openvswitch
    irrelevant-files: &openvswitch-irrelevant-files
      - ^\.pylintrc$
      - ^test-requirements.txt$
      - ^.*\.conf\.sample$
      - ^.*\.rst$
      - ^doc/.*$
      - ^neutron/locale/.*$
      - ^neutron/tests/.*$
      - ^releasenotes/.*$
      - ^setup.cfg$
      - ^tools/.*$
      - ^tox.ini$
      - ^plugin.spec$
      - ^tools/ovn_migration/.*$
      - ^vagrant/.*$
      - ^neutron/agent/ovn/.*$
      - ^neutron/agent/windows/.*$
      - ^neutron/plugins/ml2/drivers/linuxbridge/.*$
      - ^neutron/plugins/ml2/drivers/macvtap/.*$
      - ^neutron/plugins/ml2/drivers/mech_sriov/.*$
      - ^neutron/plugins/ml2/drivers/ovn/.*$
      - ^neutron/services/ovn_l3/.*$
      - ^neutron/services/logapi/drivers/ovn/.*$
      - ^neutron/services/portforwarding/drivers/ovn/.*$
      - ^neutron/services/qos/drivers/linuxbridge/.*$
      - ^neutron/services/qos/drivers/ovn/.*$
      - ^neutron/services/trunk/drivers/linuxbridge/.*$
      - ^neutron/services/trunk/drivers/ovn/.*$
      - ^neutron/cmd/ovn/.*$
      - ^neutron/common/ovn/.*$
      - ^roles/.*functional.*$
      - ^playbooks/.*functional.*$
      # Ignore everything except for zuul.d/project.yaml
      - ^zuul.d/base.yaml
      - ^zuul.d/grenade.yaml
      - ^zuul.d/job-templates.yaml
      - ^zuul.d/rally.yaml
      - ^zuul.d/tempest-multinode.yaml
      - ^zuul.d/tempest-singlenode.yaml

- job:
    name: neutron-ovs-tempest-dvr
    parent: neutron-ovs-tempest-base
    vars:
      devstack_localrc:
        Q_DVR_MODE: dvr_snat
      devstack_services:
        br-ex-tcpdump: true
        br-int-flows: true

# TODO(ralonsoh): remove this duplicated definition when "devstack",
# "tempest" and "nova" adopt the new name.
- job:
    name: neutron-tempest-dvr
    parent: neutron-ovs-tempest-dvr

- job:
    name: neutron-linuxbridge-tempest
    parent: neutron-tempest-base
    vars:
      devstack_localrc:
        Q_AGENT: linuxbridge
        Q_ML2_PLUGIN_MECHANISM_DRIVERS: linuxbridge
      devstack_local_conf:
        post-config:
          "/$NEUTRON_CORE_PLUGIN_CONF":
            experimental:
              linuxbridge: true
    irrelevant-files:
      - ^\.pylintrc$
      - ^test-requirements.txt$
      - ^.*\.conf\.sample$
      - ^.*\.rst$
      - ^doc/.*$
      - ^neutron/locale/.*$
      - ^neutron/tests/.*$
      - ^releasenotes/.*$
      - ^setup.cfg$
      - ^tools/.*$
      - ^tox.ini$
      - ^plugin.spec$
      - ^tools/ovn_migration/.*$
      - ^vagrant/.*$
      - ^neutron/agent/linux/openvswitch_firewall/.*$
      - ^neutron/agent/ovn/.*$
      - ^neutron/agent/windows/.*$
      - ^neutron/plugins/ml2/drivers/openvswitch/.*$
      - ^neutron/plugins/ml2/drivers/macvtap/.*$
      - ^neutron/plugins/ml2/drivers/mech_sriov/.*$
      - ^neutron/plugins/ml2/drivers/ovn/.*$
      - ^neutron/services/ovn_l3/.*$
      - ^neutron/services/logapi/drivers/openvswitch/.*$
      - ^neutron/services/logapi/drivers/ovn/.*$
      - ^neutron/services/portforwarding/drivers/ovn/.*$
      - ^neutron/services/qos/drivers/openvswitch/.*$
      - ^neutron/services/qos/drivers/ovn/.*$
      - ^neutron/services/trunk/drivers/openvswitch/.*$
      - ^neutron/services/trunk/drivers/ovn/.*$
      - ^neutron/cmd/ovn/.*$
      - ^neutron/common/ovn/.*$
      - ^roles/.*functional.*$
      - ^playbooks/.*functional.*$
      # Ignore everything except for zuul.d/project.yaml
      - ^zuul.d/base.yaml
      - ^zuul.d/grenade.yaml
      - ^zuul.d/job-templates.yaml
      - ^zuul.d/rally.yaml
      - ^zuul.d/tempest-multinode.yaml
      - ^zuul.d/tempest-singlenode.yaml

- job:
    name: neutron-ovs-tempest-iptables_hybrid
    parent: neutron-ovs-tempest-base
    vars:
      devstack_plugins:
        neutron: https://opendev.org/openstack/neutron.git
      devstack_services:
        tls-proxy: true
        tempest: true
        neutron-dns: true
        neutron-qos: true
        neutron-segments: true
        neutron-trunk: true
        neutron-uplink-status-propagation: true
        br-ex-tcpdump: true
        br-int-flows: true
      devstack_local_conf:
        post-config:
          $NEUTRON_CONF:
            QUOTAS:
              quota_router: 100
              quota_floatingip: 500
              quota_security_group: 100
              quota_security_group_rule: 1000
          "/$NEUTRON_CORE_PLUGIN_CONF":
            ml2_type_vlan:
              network_vlan_ranges: foo:1:10
            agent:
              enable_distributed_routing: True
              l2_population: True
              tunnel_types: vxlan,gre
              arp_responder: True
            securitygroup:
              firewall_driver: iptables_hybrid
          $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

# TODO(ralonsoh): remove this duplicated definition when "nova" adopts the
# new name.
- job:
    name: neutron-tempest-iptables_hybrid
    parent: neutron-ovs-tempest-iptables_hybrid

- job:
    name: neutron-ovn-tempest-postgres-full
    parent: tempest-integrated-networking
    timeout: 10800
    required-projects:
      - openstack/neutron
      - openstack/tempest
    vars:
      devstack_plugins:
        neutron: https://opendev.org/openstack/neutron.git
      devstack_services:
        postgresql: true
        mysql: false
        br-ex-tcpdump: true
        br-int-flows: true
        # Cinder services
        c-api: false
        c-bak: false
        c-sch: false
        c-vol: false
        cinder: false
        # Swift services
        s-account: false
        s-container: false
        s-object: false
        s-proxy: false
      zuul_copy_output:
        '/var/log/ovn': 'logs'
        '/var/log/openvswitch': 'logs'
        '/var/lib/ovn': 'logs'
    irrelevant-files: &tempest-db-irrelevant-files
      - ^\.pylintrc$
      - ^test-requirements.txt$
      - ^.*\.conf\.sample$
      - ^.*\.rst$
      - ^doc/.*$
      - ^neutron/locale/.*$
      - ^neutron/tests/.*$
      - ^releasenotes/.*$
      - ^setup.cfg$
      - ^tools/.*$
      - ^tox.ini$
      - ^plugin.spec$
      - ^tools/ovn_migration/.*$
      - ^vagrant/.*$
      - ^neutron/agent/.*$
      - ^neutron/plugins/ml2/drivers/.*$
      - ^roles/.*functional.*$
      - ^playbooks/.*functional.*$
      # Ignore everything except for zuul.d/project.yaml
      - ^zuul.d/base.yaml
      - ^zuul.d/grenade.yaml
      - ^zuul.d/job-templates.yaml
      - ^zuul.d/rally.yaml
      - ^zuul.d/tempest-multinode.yaml
      - ^zuul.d/tempest-singlenode.yaml

- job:
    name: neutron-ovn-tempest-mariadb-full
    parent: tempest-integrated-networking
    timeout: 10800
    required-projects:
      - openstack/neutron
      - openstack/tempest
    vars:
      devstack_localrc:
        MYSQL_GATHER_PERFORMANCE: false
        MYSQL_SERVICE_NAME: mariadb
        MYSQL_REDUCE_MEMORY: true
      devstack_plugins:
        neutron: https://opendev.org/openstack/neutron.git
      devstack_services:
        br-ex-tcpdump: true
        br-int-flows: true
        # Cinder services
        c-api: false
        c-bak: false
        c-sch: false
        c-vol: false
        cinder: false
        # Swift services
        s-account: false
        s-container: false
        s-object: false
        s-proxy: false
      zuul_copy_output:
        '/var/log/ovn': 'logs'
        '/var/log/openvswitch': 'logs'
        '/var/lib/ovn': 'logs'
    # NOTE(ralonsoh): once MariaDB default version in Ubuntu is bumped to
    # >10.1, this workaround can be removed (bug 1855912)
    pre-run: playbooks/add_mariadb_repo.yaml
    irrelevant-files: *tempest-db-irrelevant-files

- job:
    name: neutron-ovn-tempest-with-uwsgi
    parent: tempest-integrated-networking
    description: Run neutron Tempest tests with uwsgi
    timeout: 10800
    vars:
      devstack_localrc:
        MYSQL_GATHER_PERFORMANCE: false
        # TODO(ykarel) can be enabled once
        # https://bugs.launchpad.net/neutron/+bug/1912359 fixed
        NEUTRON_DEPLOY_MOD_WSGI: false
        MYSQL_REDUCE_MEMORY: true
      devstack_plugins:
        neutron: https://opendev.org/openstack/neutron.git
      devstack_services:
        br-ex-tcpdump: true
        br-int-flows: true
        # Cinder services
        c-api: false
        c-bak: false
        c-sch: false
        c-vol: false
        cinder: false
        # Swift services
        s-account: false
        s-container: false
        s-object: false
        s-proxy: false
      devstack_local_conf:
        post-config:
          $NEUTRON_L3_CONF:
            agent:
              debug_iptables_rules: True
      zuul_copy_output:
        '/var/log/ovn': 'logs'
        '/var/log/openvswitch': 'logs'
        '/var/lib/ovn': 'logs'
    irrelevant-files: &irrelevant-files
      - ^\.pylintrc$
      - ^test-requirements.txt$
      - ^.*\.conf\.sample$
      - ^.*\.rst$
      - ^doc/.*$
      - ^neutron/locale/.*$
      - ^neutron/tests/.*$
      - ^releasenotes/.*$
      - ^setup.cfg$
      - ^tools/.*$
      - ^tox.ini$
      - ^plugin.spec$
      - ^tools/ovn_migration/.*$
      - ^vagrant/.*$
      - ^roles/.*functional.*$
      - ^playbooks/.*functional.*$
      # Ignore everything except for zuul.d/project.yaml
      - ^zuul.d/base.yaml
      - ^zuul.d/grenade.yaml
      - ^zuul.d/job-templates.yaml
      - ^zuul.d/rally.yaml
      - ^zuul.d/tempest-multinode.yaml
      - ^zuul.d/tempest-singlenode.yaml

- job:
    name: neutron-ovn-tempest-with-uwsgi-loki
    parent: neutron-ovn-tempest-with-uwsgi
    timeout: 10800
    vars:
      devstack_services:
        neutron-loki: true
    irrelevant-files: *irrelevant-files

- job:
    name: neutron-ovn-base
    description: Base job for devstack/tempest to test Neutron with ovn driver.
    parent: tempest-integrated-networking
    timeout: 10800
    required-projects: &ovn-base-required-projects
      - openstack/neutron
      - openstack/tempest
    vars: &ovn-base-vars
      tempest_concurrency: 4
      devstack_local_conf:
        test-config:
          $TEMPEST_CONFIG:
            neutron_plugin_options:
              is_igmp_snooping_enabled: True
        post-config:
          $NEUTRON_CONF:
            DEFAULT:
              rpc_workers: 0
      devstack_localrc:
        MYSQL_GATHER_PERFORMANCE: false
        MYSQL_REDUCE_MEMORY: true
        CIRROS_VERSION: 0.6.2
        DEFAULT_IMAGE_NAME: cirros-0.6.2-x86_64-uec
        DEFAULT_IMAGE_FILE_NAME: cirros-0.6.2-x86_64-uec.tar.gz
        Q_AGENT: ovn
        ML2_L3_PLUGIN: ovn-router,trunk
        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
        ENABLE_CHASSIS_AS_GW: true
        OVN_L3_CREATE_PUBLIC_NETWORK: true
        OVN_DBS_LOG_LEVEL: dbg
        USE_PYTHON3: True
        BUILD_TIMEOUT: 784
        ENABLE_TLS: True
        OVN_IGMP_SNOOPING_ENABLE: True
        # Don't change that value in the base job's definition.
        # It should by default use OVS and OVN provided in the packages by the
        # distribution used by the job.
        # In case when there is need for a job which will install OVS/OVN from
        # sources, new job, inheriting from this one, should be created and
        # that option should be overwritten there.
        OVN_BUILD_FROM_SOURCE: False
      devstack_plugins:
        neutron: https://opendev.org/openstack/neutron
      zuul_copy_output:
        '/var/log/ovn': 'logs'
        '/var/log/openvswitch': 'logs'
        '/var/lib/ovn': 'logs'
      extensions_to_txt:
        db: true
      devstack_services:
        br-ex-tcpdump: true
        br-int-flows: true
        dstat: true
        g-api: true
        g-reg: true
        keystone: true
        n-api-meta: true
        n-api: true
        n-cauth: true
        n-cond-cell1: true
        n-cpu: true
        n-novnc-cell1: true
        n-sch: true
        n-super-cond: true
        q-ovn-metadata-agent: true
        ovn-controller: true
        ovn-northd: true
        ovs-vswitchd: true
        ovsdb-server: true
        placement-api: true
        q-svc: true
        q-dns: true
        etcd: false
        q-agt: false
        q-dhcp: false
        q-l3: false
        q-meta: false
        q-metering: false
        s-account: false
        s-container-sync: false
        s-container: false
        s-object: false
        s-proxy: false
        tls-proxy: true
        q-qos: true
        q-port-forwarding: true
        # Cinder services
        c-api: false
        c-bak: false
        c-sch: false
        c-vol: false
        cinder: false
    irrelevant-files: &ovn-irrelevant-files
      - ^\.pylintrc$
      - ^test-requirements.txt$
      - ^releasenotes/.*$
      - ^doc/.*$
      - ^setup.cfg$
      - ^.*\.conf\.sample$
      - ^.*\.rst$
      - ^neutron/locale/.*$
      - ^neutron/tests/.*$
      - ^tools/.*$
      - ^tox.ini$
      - ^plugin.spec$
      - ^tools/ovn_migration/.*$
      - ^neutron/agent/dhcp/.*$
      - ^neutron/agent/l2/.*$
      - ^neutron/agent/l3/.*$
      - ^neutron/agent/metadata/.*$
      - ^neutron/agent/windows/.*$
      - ^neutron/agent/dhcp_agent.py
      - ^neutron/agent/l3_agent.py
      - ^neutron/agent/metadata_agent.py
      - ^neutron/agent/resource_cache.py
      - ^neutron/agent/rpc.py
      - ^neutron/agent/securitygroup_rpc.py
      - ^neutron/plugins/ml2/drivers/linuxbridge/.*$
      - ^neutron/plugins/ml2/drivers/openvswitch/.*$
      - ^neutron/plugins/ml2/drivers/macvtap/.*$
      - ^neutron/plugins/ml2/drivers/mech_sriov/.*$
      - ^neutron/services/qos/drivers/linuxbridge/.*$
      - ^neutron/services/qos/drivers/openvswitch/.*$
      - ^neutron/services/trunk/drivers/linuxbridge/.*$
      - ^neutron/services/trunk/drivers/openvswitch/.*$
      - ^neutron/scheduler/.*$
      - ^roles/.*functional.*$
      - ^playbooks/.*functional.*$
      # Ignore everything except for zuul.d/project.yaml
      - ^zuul.d/base.yaml
      - ^zuul.d/grenade.yaml
      - ^zuul.d/job-templates.yaml
      - ^zuul.d/rally.yaml
      - ^zuul.d/tempest-multinode.yaml
      - ^zuul.d/tempest-singlenode.yaml

- job:
    name: neutron-ovn-tempest-ovs-release
    description: Job testing for devstack/tempest testing Neutron with ovn driver and latest OVN version provided by the packages released in the operating system this job is deployed on
    parent: neutron-ovn-base

- job:
    name: neutron-ovs-tempest-fips
    parent: neutron-ovs-tempest-base
    nodeset: devstack-single-node-centos-9-stream
    description: |
      Scenario testing for a FIPS enabled Centos 9 system
    pre-run: playbooks/enable-fips.yaml
    vars:
      nslookup_target: 'opendev.org'
      configure_swap_size: 4096
      devstack_services:
        br-ex-tcpdump: true
        br-int-flows: true
      devstack_local_conf:
        test-config:
          "$TEMPEST_CONFIG":
            validation:
              ssh_key_type: 'ecdsa'

- job:
    name: neutron-ovn-tempest-ovs-release-fips
    parent: neutron-ovn-tempest-ovs-release
    nodeset: devstack-single-node-centos-9-stream
    description: |
      Scenario testing for a FIPS enabled Centos 9 system
    pre-run: playbooks/enable-fips.yaml
    vars:
      nslookup_target: 'opendev.org'
      configure_swap_size: 4096
      devstack_local_conf:
        test-config:
          "$TEMPEST_CONFIG":
            validation:
              ssh_key_type: 'ecdsa'

# TODO(slaweq): move this to be multinode job when it will be possible in Zuul
- job:
    name: neutron-ovn-tempest-ipv6-only-base
    abstract: true
    parent: tempest-ipv6-only
    timeout: 10800
    vars:
      tox_envlist: integrated-network
      devstack_localrc:
        MYSQL_GATHER_PERFORMANCE: false
        MYSQL_REDUCE_MEMORY: true
        CIRROS_VERSION: 0.6.2
        DEFAULT_IMAGE_NAME: cirros-0.6.2-x86_64-uec
        DEFAULT_IMAGE_FILE_NAME: cirros-0.6.2-x86_64-uec.tar.gz
      devstack_plugins:
        neutron: https://opendev.org/openstack/neutron.git
      devstack_services:
        br-ex-tcpdump: true
        br-int-flows: true
        # Cinder services
        c-api: false
        c-bak: false
        c-sch: false
        c-vol: false
        cinder: false
        # Swift services
        s-account: false
        s-container: false
        s-object: false
        s-proxy: false
      devstack_local_conf:
        post-config:
          $NEUTRON_CONF:
            DEFAULT:
              rpc_workers: 0
      zuul_copy_output:
        '/var/log/ovn': 'logs'
        '/var/log/openvswitch': 'logs'
        '/var/lib/ovn': 'logs'
    irrelevant-files: *ovn-irrelevant-files

- job:
    name: neutron-ovn-tempest-ipv6-only-ovs-release
    parent: neutron-ovn-tempest-ipv6-only-base
    vars:
      # TODO(ykarel) remove once ubuntu jammy contains fixed version
      # of ovn https://bugs.launchpad.net/neutron/+bug/2007166
      tempest_exclude_regex: "\
          (test_update_delete_extra_route)|\
          (test_update_router_admin_state)|\
          (test_dhcp_stateful_router)|\
          (TestSecurityGroupsBasicOps)"
