- job:
    name: neutron-tempest-dvr-ha-multinode-full
    parent: tempest-multinode-full-py3
    nodeset: openstack-three-node-bionic
    timeout: 10800
    roles:
      - zuul: openstack/neutron-tempest-plugin
    required-projects:
      - openstack/devstack-gate
      - openstack/neutron
      - openstack/tempest
    pre-run: playbooks/dvr-multinode-scenario-pre-run.yaml
    irrelevant-files: &irrelevant-files
      - ^(test-|)requirements.txt$
      - ^.*\.rst$
      - ^doc/.*$
      - ^neutron/locale/.*$
      - ^neutron/tests/unit/.*$
      - ^releasenotes/.*$
      - ^setup.cfg$
      - ^tools/.*$
      - ^tox.ini$
      - ^vagrant/.*$
      - ^migration/.*$
    voting: false
    vars:
      tox_envlist: integrated-network
      devstack_services:
        br-ex-tcpdump: true
        br-int-flows: true
      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
            agent:
              availability_zone: nova
          $NEUTRON_DHCP_CONF:
            agent:
              availability_zone: nova
    group-vars:
      subnode:
        devstack_services:
          q-agt: true
          q-l3: true
          q-meta: true
          br-ex-tcpdump: true
          br-int-flows: true
        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
            $NEUTRON_L3_CONF:
              DEFAULT:
                agent_mode: dvr_snat
              agent:
                availability_zone: nova

- 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/devstack-gate
      - openstack/neutron
      - openstack/neutron-tempest-plugin
      - openstack/tempest
    irrelevant-files: *irrelevant-files
    roles:
      - zuul: zuul/zuul-jobs
      - zuul: openstack/neutron-tempest-plugin
    pre-run: playbooks/multinode-setup.yaml
    vars:
      devstack_local_conf:
        test-config:
          $TEMPEST_CONFIG:
            neutron_plugin_options:
              is_igmp_snooping_enabled: True
      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: true
        OVN_L3_CREATE_PUBLIC_NETWORK: true
        OVN_DBS_LOG_LEVEL: dbg
        # 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
        DOWNLOAD_DEFAULT_IMAGES: false
        IMAGE_URLS: "http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img,https://cloud-images.ubuntu.com/releases/xenial/release/ubuntu-16.04-server-cloudimg-amd64-disk1.img"
        DEFAULT_IMAGE_NAME: cirros-0.4.0-x86_64-disk
        DEFAULT_IMAGE_FILE_NAME: cirros-0.4.0-x86_64-disk.img
        ADVANCED_IMAGE_NAME: ubuntu-16.04-server-cloudimg-amd64-disk1
        ADVANCED_INSTANCE_TYPE: ds512M
        ADVANCED_INSTANCE_USER: ubuntu
        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:
        '{{ devstack_base_dir }}/data/ovs': 'logs'
      extensions_to_txt:
        db: true
      devstack_services:
        c-bak: false
        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
        peakmem_tracker: false
        q-svc: true
        q-agt: false
        q-dhcp: false
        q-l3: false
        q-meta: false
        q-metering: false
        q-dns: true
        # 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
    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
        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
          # 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


- 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
      # blacklist when bug https://bugs.launchpad.net/neutron/+bug/1863577 will
      # be fixed
      # TODO(mjozefcz): The test test_port_security_macspoofing_port
      # and related bug https://bugs.launchpad.net/tempest/+bug/1728886
      # are fixed in Core-OVN, but tempest-slow job uses stable release of
      # core OVN now and thats why it is still failing in this job.
      # Remove this blacklist when OVN 20.06 will be releaseed and consumed.
      # In addition: on next PTG we will discuss the rules of running specific
      # jobs with OVN master and OVN release branches. Please consider
      # specyfing explicitely the version of OVN in tempest-slow jobs.
      tempest_black_regex: "\
          (?:tempest.scenario.test_network_basic_ops.TestNetworkBasicOps.test_port_security_macspoofing_port)|\
          (^tempest.scenario.test_network_v6.TestGettingAddress)"


- 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-plugin
      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))).*$"
      devstack_localrc:
        OVN_BRANCH: master
    group-vars:
      subnode:
        devstack_localrc:
          OVN_BRANCH: master