- job:
    name: neutron-ovs-grenade-multinode
    parent: grenade-multinode
    required-projects:
      - openstack/grenade
      - openstack/neutron
    irrelevant-files: &openvswitch-irrelevant-files
      - ^\.pre-commit-config\.yaml$
      - ^\.pylintrc$
      - ^test-requirements.txt$
      - ^releasenotes/.*$
      - ^doc/.*$
      - ^setup.cfg$
      - ^.*\.conf\.sample$
      - ^.*\.rst$
      - ^neutron/locale/.*$
      - ^neutron/tests/.*$
      - ^tools/.*$
      - ^tox.ini$
      - ^plugin.spec$
      - ^pyproject.toml$
      - ^tools/ovn_migration/.*$
      - ^neutron/agent/ovn/.*$
      - ^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/ovn/.*$
      - ^neutron/services/trunk/drivers/ovn/.*$
      - ^neutron/cmd/ovn/.*$
      - ^neutron/common/ovn/.*$
      - ^roles/.*functional.*$
      - ^playbooks/.*functional.*$
      - ^vagrant/.*$
      # 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
    vars:
      grenade_devstack_localrc:
        shared:
          Q_AGENT: openvswitch
          Q_ML2_TENANT_NETWORK_TYPE: vxlan
          Q_ML2_PLUGIN_MECHANISM_DRIVERS: openvswitch
          NEUTRON_DEPLOY_MOD_WSGI: True
      devstack_services:
        etcd: false
        br-ex-tcpdump: true
        br-int-flows: true
        # Neutron services
        q-agt: true
        q-dhcp: true
        q-l3: true
        q-meta: true
        q-svc: false
        neutron-api: true
        neutron-rpc-server: true
        neutron-periodic-workers: true
        q-metering: true
        ovn-controller: false
        ovn-northd: 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:
        grenade_devstack_localrc:
          shared:
            Q_AGENT: openvswitch
            Q_ML2_TENANT_NETWORK_TYPE: vxlan
            Q_ML2_PLUGIN_MECHANISM_DRIVERS: openvswitch
        devstack_services:
          # Neutron services
          q-agt: true
          q-l3: true
          q-meta: true
          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

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

- job:
    name: neutron-ovs-grenade-dvr-multinode
    parent: grenade-multinode
    pre-run: playbooks/dvr-multinode-scenario-pre-run.yaml
    roles:
      - zuul: openstack/neutron-tempest-plugin
    required-projects:
      - openstack/grenade
      - openstack/neutron
    irrelevant-files: *openvswitch-irrelevant-files
    vars:
      grenade_devstack_localrc:
        shared:
          Q_AGENT: openvswitch
          Q_ML2_TENANT_NETWORK_TYPE: vxlan
          Q_ML2_PLUGIN_MECHANISM_DRIVERS: openvswitch
          NEUTRON_DEPLOY_MOD_WSGI: True
      devstack_services:
        etcd: false
        br-ex-tcpdump: true
        br-int-flows: true
        # Neutron services
        q-agt: true
        q-dhcp: true
        q-l3: true
        q-meta: true
        q-svc: false
        neutron-api: true
        neutron-rpc-server: true
        neutron-periodic-workers: true
        q-metering: true
        ovn-controller: false
        ovn-northd: 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
          "/$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
              debug_iptables_rules: True
          $NEUTRON_DHCP_CONF:
            agent:
              availability_zone: nova
    group-vars:
      subnode:
        grenade_devstack_localrc:
          shared:
            Q_AGENT: openvswitch
            Q_ML2_TENANT_NETWORK_TYPE: vxlan
            Q_ML2_PLUGIN_MECHANISM_DRIVERS: openvswitch
        devstack_services:
          br-ex-tcpdump: true
          br-int-flows: true
          # Neutron services
          q-agt: true
          q-l3: true
          q-meta: true
          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:
              DEFAULT:
                router_distributed: True
            "/$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
                debug_iptables_rules: True

- job:
    name: neutron-ovn-grenade-multinode
    parent: grenade-multinode
    timeout: 9000
    irrelevant-files:
      - ^\.pre-commit-config\.yaml$
      - ^\.pylintrc$
      - ^test-requirements.txt$
      - ^releasenotes/.*$
      - ^doc/.*$
      - ^setup.cfg$
      - ^pyproject.toml$
      - ^.*\.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/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/openvswitch/.*$
      - ^neutron/plugins/ml2/drivers/macvtap/.*$
      - ^neutron/plugins/ml2/drivers/mech_sriov/.*$
      - ^neutron/services/qos/drivers/openvswitch/.*$
      - ^neutron/services/trunk/drivers/openvswitch/.*$
      - ^neutron/scheduler/.*$
      - ^roles/.*functional.*$
      - ^playbooks/.*functional.*$
      - ^vagrant/.*$
      # 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
    roles:
      - zuul: openstack/neutron-tempest-plugin
    required-projects:
      - openstack/grenade
      - openstack/neutron
      - 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
      grenade_devstack_localrc:
        old:
          Q_BUILD_OVS_FROM_GIT: true
          OVN_BUILD_MODULES: true
          OVN_BUILD_FROM_SOURCE: True
          OVN_BRANCH: "branch-24.03"
          OVS_BRANCH: "branch-3.3"
        new:
          Q_BUILD_OVS_FROM_GIT: false
          OVN_BUILD_MODULES: false
        shared:
          Q_AGENT: ovn
          OVN_AGENT_EXTENSIONS: 'metadata'
          # NOTE(ralonsoh): during the eventlet removal, the "logger" mech
          # driver has been removed from this list. Re-add it once the removal
          # is finished or the mech driver does not call monkey_patch().
          Q_ML2_PLUGIN_MECHANISM_DRIVERS: ovn
          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
          OVN_IGMP_SNOOPING_ENABLE: True
          NEUTRON_DEPLOY_MOD_WSGI: 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'
        '{{ devstack_base_dir }}/data/ovn': 'logs'
        '/opt/stack/old/logs': 'logs'
        '/opt/stack/new/logs': 'logs'
      extensions_to_txt:
        db: true
      devstack_services:
        etcd: false
        br-ex-tcpdump: true
        br-int-flows: true
        q-ovn-metadata-agent: false
        q-ovn-agent: true
        ovn-controller: true
        ovn-northd: true
        ovs-vswitchd: true
        ovsdb-server: true
        placement-api: true
        peakmem_tracker: false
        q-svc: false
        neutron-api: true
        neutron-ovn-maintenance-worker: true
        neutron-rpc-server: false
        neutron-periodic-workers: 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: false
        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: false
          q-ovn-agent: true
          tls-proxy: false
          # Cinder services
          c-bak: false
          c-vol: false
        grenade_devstack_localrc:
          old:
            Q_BUILD_OVS_FROM_GIT: true
            OVN_BUILD_MODULES: true
            OVN_BUILD_FROM_SOURCE: True
            OVN_BRANCH: "branch-24.03"
            OVS_BRANCH: "branch-3.3"
          new:
            Q_BUILD_OVS_FROM_GIT: false
            OVN_BUILD_MODULES: false
          shared:
            Q_AGENT: ovn
            OVN_AGENT_EXTENSIONS: 'metadata'
            # NOTE(ralonsoh): during the eventlet removal, the "logger" mech
            # driver has been removed from this list. Re-add it once the removal
            # is finished or the mech driver does not call monkey_patch().
            Q_ML2_PLUGIN_MECHANISM_DRIVERS: ovn
            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

- job:
    name: neutron-ovs-grenade-multinode-skip-level
    parent: neutron-ovs-grenade-multinode
    description: |
      Grenade job that skips a release, validating that deployers can skip
      specific releases as prescribed by our process.
    vars:
      # Move this forward when master changes to a new skip-level-allowed
      # target release. Right now, this is Dalmatian (2024.2) because master is
      # Flamingo (2025.2).
      # When master is G (2026.1), this should become Epoxy (2025.1),
      # and so forth.
      grenade_from_branch: stable/2024.2
      grenade_localrc:
        NOVA_ENABLE_UPGRADE_WORKAROUND: True

- job:
    name: neutron-ovn-grenade-multinode-skip-level
    parent: neutron-ovn-grenade-multinode
    description: |
      Grenade job that skips a release, validating that deployers can skip
      specific releases as prescribed by our process.
    vars:
      # Move this forward when master changes to a new skip-level-allowed
      # target release. Right now, this is Dalmatian (2024.2) because master is
      # Flamingo (2025.2).
      # When master is G (2026.1), this should become Epoxy (2025.1),
      # and so forth.
      grenade_from_branch: stable/2024.2
      grenade_localrc:
        NOVA_ENABLE_UPGRADE_WORKAROUND: True

# NOTE(ralonsoh): to be removed in 2026.2, once the OVN Metadata agent
# replacement finishes. See LP#2112313.
- job:
    name: neutron-ovn-grenade-multinode-ovn-metadata-agent
    parent: neutron-ovn-grenade-multinode
    vars:
      devstack_services:
        q-ovn-metadata-agent: true
        q-ovn-agent: false
