- job:
    name: neutron-ovs-tempest-dvr-ha-multinode-full
    parent: tempest-multinode-full-py3
    timeout: 10800
    roles:
      - zuul: openstack/neutron-tempest-plugin
    required-projects:
      - openstack/neutron
      - openstack/tempest
    pre-run: playbooks/dvr-multinode-scenario-pre-run.yaml
    irrelevant-files: &openvswitch-irrelevant-files
      - ^(test-|)requirements.txt$
      - ^releasenotes/.*$
      - ^doc/.*$
      - ^setup.cfg$
      - ^.*\.rst$
      - ^neutron/locale/.*$
      - ^neutron/tests/unit/.*$
      - ^tools/.*$
      - ^tox.ini$
      - ^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/.*$
    voting: false
    vars:
      tox_envlist: integrated-network
      devstack_localrc:
        Q_ML2_TENANT_NETWORK_TYPE: vxlan
        Q_ML2_PLUGIN_MECHANISM_DRIVERS: openvswitch,linuxbridge
        Q_AGENT: openvswitch
      devstack_services:
        br-ex-tcpdump: true
        br-int-flows: true
        # Neutron services
        q-agt: true
        q-dhcp: true
        q-l3: true
        q-meta: true
        q-metering: true
        q-svc: true
        # OVN services
        ovn-controller: false
        ovn-northd: false
        ovs-vswitchd: false
        ovsdb-server: false
        q-ovn-metadata-agent: false
        # 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_plugins:
        neutron: https://opendev.org/openstack/neutron.git
      devstack_local_conf:
        post-config:
          $NEUTRON_CONF:
            DEFAULT:
              router_distributed: True
              l3_ha: True
          # 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:
              mechanism_drivers: openvswitch,l2population
            agent:
              enable_distributed_routing: True
              l2_population: True
              tunnel_types: vxlan
              arp_responder: True
            ovs:
              tunnel_bridge: br-tun
              bridge_mappings: public:br-ex
          $NEUTRON_L3_CONF:
            DEFAULT:
              agent_mode: dvr_snat
            agent:
              availability_zone: nova
              debug_iptables_rules: True
          $NEUTRON_DHCP_CONF:
            agent:
              availability_zone: nova
    group-vars:
      subnode:
        devstack_plugins:
          neutron: https://opendev.org/openstack/neutron.git
        devstack_localrc:
          Q_ML2_TENANT_NETWORK_TYPE: vxlan
          Q_ML2_PLUGIN_MECHANISM_DRIVERS: openvswitch,linuxbridge
          Q_AGENT: openvswitch
        devstack_services:
          q-agt: true
          q-l3: true
          q-meta: true
          br-ex-tcpdump: true
          br-int-flows: true
          # OVN services
          ovn-controller: false
          ovs-vswitchd: false
          ovsdb-server: false
          q-ovn-metadata-agent: false
          # 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:
                router_distributed: True
            # 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:
                enable_distributed_routing: True
                l2_population: True
                tunnel_types: vxlan
                arp_responder: True
              ovs:
                tunnel_bridge: br-tun
                bridge_mappings: public:br-ex
                resource_provider_bandwidths: br-ex:1000000:1000000
            $NEUTRON_L3_CONF:
              DEFAULT:
                agent_mode: dvr_snat
              agent:
                availability_zone: nova
                debug_iptables_rules: True

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

- job:
    name: neutron-ovs-tempest-multinode-full
    parent: tempest-multinode-full-py3
    timeout: 10800
    irrelevant-files: *openvswitch-irrelevant-files
    vars:
      tox_envlist: integrated-network
      devstack_localrc:
        Q_ML2_TENANT_NETWORK_TYPE: vxlan
        Q_ML2_PLUGIN_MECHANISM_DRIVERS: openvswitch,linuxbridge
        Q_AGENT: openvswitch
      devstack_plugins:
        neutron: https://opendev.org/openstack/neutron.git
      devstack_services:
        br-ex-tcpdump: true
        br-int-flows: true
        # Neutron services
        q-agt: true
        q-dhcp: true
        q-l3: true
        q-meta: true
        q-metering: true
        q-svc: true
        # OVN services
        ovn-controller: false
        ovn-northd: false
        ovs-vswitchd: false
        ovsdb-server: false
        q-ovn-metadata-agent: false
        # 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:
            nova:
              live_migration_events: True
          $NEUTRON_L3_CONF:
            agent:
              debug_iptables_rules: True
    group-vars:
      subnode:
        devstack_localrc:
          Q_ML2_TENANT_NETWORK_TYPE: vxlan
          Q_ML2_PLUGIN_MECHANISM_DRIVERS: openvswitch,linuxbridge
          Q_AGENT: openvswitch
        devstack_services:
          q-agt: true
          # OVN services
          ovn-controller: false
          ovs-vswitchd: false
          ovsdb-server: false
          q-ovn-metadata-agent: false
          # Cinder services
          c-bak: false
          c-vol: false
        devstack_local_conf:
          post-config:
            $NEUTRON_CONF:
              nova:
                live_migration_events: True
            $NEUTRON_L3_CONF:
              agent:
                debug_iptables_rules: True

- job:
    name: neutron-ovs-tempest-slow
    parent: tempest-slow-py3
    timeout: 10800
    irrelevant-files: *openvswitch-irrelevant-files
    vars:
      devstack_plugins:
        neutron: https://opendev.org/openstack/neutron.git
      devstack_localrc:
        Q_ML2_TENANT_NETWORK_TYPE: vxlan
        Q_ML2_PLUGIN_MECHANISM_DRIVERS: openvswitch,linuxbridge
        Q_AGENT: openvswitch
      devstack_services:
        br-ex-tcpdump: true
        br-int-flows: true
        # Neutron services
        q-agt: true
        q-dhcp: true
        q-l3: true
        q-meta: true
        q-metering: true
        q-svc: true
        # OVN services
        ovn-controller: false
        ovn-northd: false
        ovs-vswitchd: false
        ovsdb-server: false
        q-ovn-metadata-agent: false
        # 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
    group-vars:
      subnode:
        devstack_localrc:
          Q_ML2_TENANT_NETWORK_TYPE: vxlan
          Q_ML2_PLUGIN_MECHANISM_DRIVERS: openvswitch,linuxbridge
          Q_AGENT: openvswitch
        devstack_services:
          q-agt: true
          # OVN services
          ovn-controller: false
          ovs-vswitchd: false
          ovsdb-server: false
          q-ovn-metadata-agent: false
          # Cinder services
          c-bak: false
          c-vol: false
        devstack_local_conf:
          post-config:
            $NEUTRON_L3_CONF:
              agent:
                debug_iptables_rules: True

- job:
    name: neutron-ovn-multinode-base
    description: Base multinode job for devstack/tempest to test Neutron with ovn driver.
    abstract: true
    parent: tempest-multinode-full-py3
    timeout: 10800
    required-projects:
      - openstack/neutron
      - openstack/neutron-tempest-plugin
      - openstack/tempest
    irrelevant-files:
      - ^(test-|)requirements.txt$
      - ^releasenotes/.*$
      - ^doc/.*$
      - ^setup.cfg$
      - ^.*\.rst$
      - ^neutron/locale/.*$
      - ^neutron/tests/unit/.*$
      - ^tools/.*$
      - ^tox.ini$
      - ^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/scheduler/.*$
    roles:
      - zuul: zuul/zuul-jobs
      - zuul: openstack/neutron-tempest-plugin
    pre-run: playbooks/prepare-ovn-multinode.yaml
    vars:
      devstack_local_conf:
        test-config:
          $TEMPEST_CONFIG:
            neutron_plugin_options:
              is_igmp_snooping_enabled: True
        post-config:
          "/$NEUTRON_CORE_PLUGIN_CONF":
            ovn:
              enable_distributed_floating_ip: True
      devstack_localrc:
        Q_AGENT: ovn
        ML2_L3_PLUGIN: ovn-router,trunk
        Q_ML2_PLUGIN_MECHANISM_DRIVERS: ovn,logger
        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
        BUILD_TIMEOUT: 784
        ENABLE_TLS: True
        OVN_IGMP_SNOOPING_ENABLE: True
      devstack_plugins:
        neutron: https://opendev.org/openstack/neutron
        neutron-tempest-plugin: https://opendev.org/openstack/neutron-tempest-plugin
      zuul_copy_output:
        '/var/log/ovn': 'logs'
        '/var/log/openvswitch': 'logs'
        '/var/lib/ovn': 'logs'
      extensions_to_txt:
        db: true
      devstack_services:
        etcd: false
        br-ex-tcpdump: true
        br-int-flows: 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-agt: false
        q-dhcp: false
        q-l3: false
        q-meta: false
        q-metering: false
        q-dns: true
        # Cinder services
        c-api: false
        c-bak: false
        c-sch: false
        c-vol: false
        cinder: false
        # When running python3 Swift should be disabled for now
        s-account: false
        s-container: false
        s-object: false
        s-proxy: false
        tls-proxy: true
        q-qos: true
        neutron-segments: True
        q-port-forwarding: true
        dstat: true
    group-vars:
      subnode:
        devstack_services:
          br-ex-tcpdump: true
          br-int-flows: true
          ovn-controller: true
          ovn-northd: false
          ovs-vswitchd: true
          ovsdb-server: true
          # NOTE(slaweq): it's just to check if this will force devstack to
          # configure neutron and ML2 plugin on subnodes
          q-fake: true
          q-svc: false
          q-agt: false
          q-dhcp: false
          q-l3: false
          q-meta: false
          q-metering: false
          q-ovn-metadata-agent: true
          tls-proxy: true
          dstat: true
          # Cinder services
          c-bak: false
          c-vol: false
        devstack_localrc:
          Q_AGENT: ovn
          Q_ML2_PLUGIN_MECHANISM_DRIVERS: ovn,logger
          Q_ML2_TENANT_NETWORK_TYPE: geneve
          Q_USE_PROVIDERNET_FOR_PUBLIC: true
          PHYSICAL_NETWORK: public
          ENABLE_CHASSIS_AS_GW: false
          OVN_DBS_LOG_LEVEL: dbg
          USE_PYTHON3: True
          ENABLE_TLS: True


- job:
    name: neutron-ovn-tempest-slow
    parent: neutron-ovn-multinode-base
    vars:
      tox_envlist: slow-serial
      tempest_test_regex: ""
      # TODO(slaweq): remove tests from
      # tempest.scenario.test_network_v6.TestGettingAddress module from
      # prohibit list when bug https://bugs.launchpad.net/neutron/+bug/1863577
      # will be fixed
      # TODO(ralonsoh): "test_update_router_admin_state" excluded until bug
      # https://bugs.launchpad.net/neutron/+bug/1890445 is fixed.
      tempest_exclude_regex: "\
          (^tempest.scenario.test_network_v6.TestGettingAddress)|\
          (^tempest.scenario.test_network_basic_ops.TestNetworkBasicOps.test_update_router_admin_state)"


- job:
    # TODO(slaweq): propose job with ovs-release and move -master one to
    # experimental queue
    name: neutron-ovn-tempest-full-multinode-ovs-master
    parent: neutron-ovn-multinode-base
    vars:
      tox_envlist: all
      tempest_test_regex: "^(?!.*\
          (?:.*\\[.*slow.*\\])|\
          (?:tempest.api.network.admin.test_quotas.QuotasTest.test_lbaas_quotas.*)|\
          (?:tempest.api.network.test_load_balancer.*)|\
          (?:tempest.scenario.test_load_balancer.*)|\
          (?:tempest.api.network.admin.test_load_balancer.*)|\
          (?:tempest.api.network.admin.test_lbaas.*)|\
          (?:tempest.api.network.test_fwaas_extensions.*)|\
          (?:tempest.api.network.test_metering_extensions.*)|\
          (?:tempest.thirdparty.boto.test_s3.*)|\
          (?:tempest.api.identity*)|\
          (?:tempest.api.image*)|\
          (?:tempest.api.volume*)|\
          (?:tempest.api.compute.images*)|\
          (?:tempest.api.compute.keypairs*)|\
          (?:tempest.api.compute.certificates*)|\
          (?:tempest.api.compute.flavors*)|\
          (?:tempest.api.compute.test_quotas*)|\
          (?:tempest.api.compute.test_versions*)|\
          (?:tempest.api.compute.volumes*)|\
          (?:tempest.api.compute.admin.test_flavor*)|\
          (?:tempest.api.compute.admin.test_volume*)|\
          (?:tempest.api.compute.admin.test_hypervisor*)|\
          (?:tempest.api.compute.admin.test_aggregate*)|\
          (?:tempest.api.compute.admin.test_quota*)|\
          (?:tempest.scenario.test_volume*))\
          ((^neutron_tempest_plugin.api)|\
          (^neutron_tempest_plugin.scenario)|\
          (tempest.(api|scenario|thirdparty))).*$"
      zuul_copy_output:
        '{{ devstack_base_dir }}/data/ovs': 'logs'
        '{{ devstack_base_dir }}/data/ovn': 'logs'
        '{{ devstack_log_dir }}/ovsdb-server-nb.log': 'logs'
        '{{ devstack_log_dir }}/ovsdb-server-sb.log': 'logs'
      devstack_localrc:
        OVN_BUILD_FROM_SOURCE: True
        OVN_BRANCH: master
        OVS_BRANCH: master
    group-vars:
      subnode:
        devstack_localrc:
          OVN_BUILD_FROM_SOURCE: True
          OVN_BRANCH: master
          OVS_BRANCH: master