---
# Definitions of functional jobs
- job:
    name: openstacksdk-functional-devstack-minimum
    parent: devstack-tox-functional
    description: |
      Minimum job for devstack-based functional tests
    post-run: playbooks/devstack/post.yaml
    roles:
      # NOTE: We pull in roles from the tempest repo for stackviz processing.
      - zuul: opendev.org/openstack/tempest
    required-projects:
      - name: openstack/openstacksdk
      - name: openstack/os-client-config
    timeout: 9000
    vars:
      devstack_localrc:
        Q_ML2_PLUGIN_EXT_DRIVERS: qos,port_security
        Q_AGENT: openvswitch
        Q_ML2_TENANT_NETWORK_TYPE: vxlan
        Q_ML2_PLUGIN_MECHANISM_DRIVERS: openvswitch
      devstack_services:
        # OVN services
        ovn-controller: false
        ovn-northd: false
        ovs-vswitchd: false
        ovsdb-server: false
        q-ovn-agent: false
        # Neutron services
        q-agt: true
        q-dhcp: true
        q-l3: true
        q-metering: true
        q-svc: true
        # sdk doesn't need vnc access
        n-novnc: false
        # sdk testing uses config drive only
        n-api-meta: false
        q-meta: false
      tox_environment:
        # Do we really need to set this? It's cargo culted
        PYTHONUNBUFFERED: 'true'
        # Is there a way we can query the localconf variable to get these
        # rather than setting them explicitly?
        OPENSTACKSDK_HAS_DESIGNATE: 0
        OPENSTACKSDK_HAS_HEAT: 0
        OPENSTACKSDK_HAS_MAGNUM: 0
        OPENSTACKSDK_HAS_NEUTRON: 1
        OPENSTACKSDK_HAS_SWIFT: 1
      tox_install_siblings: false
      tox_envlist: functional
      zuul_copy_output:
          '{{ ansible_user_dir }}/stackviz': logs
      zuul_work_dir: src/opendev.org/openstack/openstacksdk

- job:
    name: openstacksdk-functional-devstack-base
    parent: openstacksdk-functional-devstack-minimum
    description: |
      Base job for devstack-based functional tests
    vars:
      devstack_plugins:
        neutron: https://opendev.org/openstack/neutron
      devstack_local_conf:
        post-config:
          $CINDER_CONF:
            DEFAULT:
              osapi_max_limit: 6

- job:
    name: openstacksdk-functional-devstack
    parent: openstacksdk-functional-devstack-base
    description: |
      Run openstacksdk functional tests against a master devstack
    required-projects:
      - openstack/heat
    vars:
      devstack_localrc:
        DISABLE_AMP_IMAGE_BUILD: true
        Q_SERVICE_PLUGIN_CLASSES: qos,trunk
        # TODO(frickler): drop this once heat no longer needs it
        KEYSTONE_ADMIN_ENDPOINT: true
      devstack_plugins:
        heat: https://opendev.org/openstack/heat
      tox_environment:
        OPENSTACKSDK_HAS_HEAT: 1
      devstack_services:
        neutron-qos: true
        neutron-trunk: true
        neutron-port-forwarding: true

- job:
    name: openstacksdk-functional-devstack-networking
    parent: openstacksdk-functional-devstack
    description: |
      Run openstacksdk functional tests against a devstack with advanced
      networking services enabled.
    required-projects:
      - openstack/designate
      - openstack/octavia
    vars:
      configure_swap_size: 8192
      devstack_local_conf:
        post-config:
          $OCTAVIA_CONF:
            DEFAULT:
              debug: true
            controller_worker:
              amphora_driver: amphora_noop_driver
              compute_driver: compute_noop_driver
              network_driver: network_noop_driver
            certificates:
              cert_manager: local_cert_manager
      devstack_localrc:
        Q_SERVICE_PLUGIN_CLASSES: qos,trunk
      devstack_plugins:
        designate: https://opendev.org/openstack/designate
        octavia: https://opendev.org/openstack/octavia
      devstack_services:
        designate: true
        octavia: true
        o-api: true
        o-cw: true
        o-hm: true
        o-hk: true
        neutron-dns: true
        s-account: false
        s-container: false
        s-object: false
        s-proxy: false
        h-eng: false
        h-api: false
        h-api-cfn: false
      tox_environment:
        OPENSTACKSDK_HAS_DESIGNATE: 1
        OPENSTACKSDK_HAS_SWIFT: 0
        OPENSTACKSDK_HAS_HEAT: 0

- job:
    name: openstacksdk-functional-devstack-networking-ext
    parent: openstacksdk-functional-devstack-networking
    description: |
      Run openstacksdk functional tests against a devstack with super advanced
      networking services enabled (VPNaas, FWaas) which still require ovs.
    required-projects:
      - openstack/neutron-fwaas
      - openstack/neutron-vpnaas
      - openstack/tap-as-a-service
    vars:
      INSTALL_OVN: False
      configure_swap_size: 8192
      devstack_local_conf:
        post-config:
          $OCTAVIA_CONF:
            DEFAULT:
              debug: true
            controller_worker:
              amphora_driver: amphora_noop_driver
              compute_driver: compute_noop_driver
              network_driver: network_noop_driver
            certificates:
              cert_manager: local_cert_manager
          $NEUTRON_CONF:
            DEFAULT:
              router_distributed: True
              l3_ha: True
          "/$NEUTRON_CORE_PLUGIN_CONF":
            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
      devstack_localrc:
        Q_SERVICE_PLUGIN_CLASSES: qos,trunk,taas
        NETWORK_API_EXTENSIONS: "agent,binding,dhcp_agent_scheduler,external-net,ext-gw-mode,extra_dhcp_opts,quotas,router,security-group,subnet_allocation,network-ip-availability,auto-allocated-topology,timestamp_core,tag,service-type,rbac-policies,standard-attr-description,pagination,sorting,project-id,fwaas_v2,vpnaas,taas,tap_mirror"
        Q_AGENT: openvswitch
        Q_ML2_TENANT_NETWORK_TYPE: vxlan
        Q_ML2_PLUGIN_MECHANISM_DRIVERS: openvswitch
        IPSEC_PACKAGE: libreswan
        TAAS_SERVICE_DRIVER: TAAS:TAAS:neutron_taas.services.taas.service_drivers.taas_rpc.TaasRpcDriver:default
      devstack_plugins:
        designate: https://opendev.org/openstack/designate
        octavia: https://opendev.org/openstack/octavia
        neutron-fwaas: https://opendev.org/openstack/neutron-fwaas.git
        neutron-vpnaas: https://opendev.org/openstack/neutron-vpnaas.git
        tap-as-a-service: https://opendev.org/openstack/tap-as-a-service.git
      devstack_services:
        designate: true
        octavia: true
        o-api: true
        o-cw: true
        o-hm: true
        o-hk: true
        neutron-dns: true
        s-account: false
        s-container: false
        s-object: false
        s-proxy: false
        h-eng: false
        h-api: false
        h-api-cfn: false
        q-fwaas-v2: true
        taas: true
        tap_mirror: true
      tox_environment:
        OPENSTACKSDK_HAS_DESIGNATE: 1
        OPENSTACKSDK_HAS_SWIFT: 0
        OPENSTACKSDK_HAS_HEAT: 0

- job:
    name: openstacksdk-functional-devstack-tips
    parent: openstacksdk-functional-devstack
    description: |
      Run openstacksdk functional tests with tips of library dependencies
      against a master devstack.
    required-projects:
      - openstack/keystoneauth
      - openstack/openstacksdk
      - openstack/os-client-config
    vars:
      tox_install_siblings: true

- job:
    name: openstacksdk-functional-devstack-magnum
    parent: openstacksdk-functional-devstack
    description: |
      Run openstacksdk functional tests against a master devstack with magnum
    required-projects:
      - openstack/magnum
      - openstack/python-magnumclient
    vars:
      devstack_plugins:
        magnum: https://opendev.org/openstack/magnum
      devstack_localrc:
        MAGNUM_GUEST_IMAGE_URL: https://tarballs.openstack.org/magnum/images/fedora-atomic-f23-dib.qcow2
        MAGNUM_IMAGE_NAME: fedora-atomic-f23-dib
      devstack_services:
        s-account: false
        s-container: false
        s-object: false
        s-proxy: false
      tox_environment:
        OPENSTACKSDK_HAS_SWIFT: 0
        OPENSTACKSDK_HAS_MAGNUM: 1

- job:
    name: openstacksdk-functional-devstack-ironic
    parent: openstacksdk-functional-devstack-minimum
    description: |
      Run openstacksdk functional tests against a master devstack with ironic
    required-projects:
      - openstack/ironic
      - openstack/ironic-python-agent-builder
    vars:
      devstack_localrc:
        OVERRIDE_PUBLIC_BRIDGE_MTU: 1400
        IRONIC_BAREMETAL_BASIC_OPS: true
        IRONIC_BUILD_DEPLOY_RAMDISK: false
        IRONIC_CALLBACK_TIMEOUT: 600
        IRONIC_DEPLOY_DRIVER: ipmi
        IRONIC_VM_COUNT: 2
        IRONIC_VM_LOG_DIR: '{{ devstack_base_dir }}/ironic-bm-logs'
        IRONIC_VM_SPECS_RAM: 2500
      devstack_plugins:
        ironic: https://opendev.org/openstack/ironic
      devstack_services:
        c-api: false
        c-bak: false
        c-sch: false
        c-vol: false
        cinder: false
        s-account: false
        s-container: false
        s-object: false
        s-proxy: false
        n-api: false
        n-api-meta: false
        n-cond: false
        n-cpu: false
        n-novnc: false
        n-sch: false
        nova: false
        placement-api: false
        dstat: false
      tox_environment:
        OPENSTACKSDK_HAS_IRONIC: 1
        # NOTE(dtantsur): this job cannot run many regular tests (e.g. compute
        # tests will take too long), so limiting it to baremetal tests only.
        OPENSTACKSDK_TESTS_SUBDIR: baremetal
      zuul_copy_output:
        '{{ devstack_base_dir }}/ironic-bm-logs': logs

- job:
    name: openstacksdk-ansible-functional-devstack
    parent: openstacksdk-functional-devstack
    description: |
      Run openstacksdk ansible functional tests against a master devstack
      using released version of ansible.
    vars:
      tox_envlist: ansible

- job:
    name: openstacksdk-ansible-stable-2.8-functional-devstack
    parent: openstacksdk-ansible-functional-devstack
    description: |
      Run openstacksdk ansible functional tests against a master devstack
      using git stable-2.8 branch version of ansible.
    required-projects:
      - name: github.com/ansible/ansible
        override-checkout: stable-2.8
      - name: openstack/openstacksdk
        override-checkout: master
      - name: openstack/devstack
        override-checkout: master
    vars:
      # test-matrix grabs branch from the zuul branch setting. If the job
      # is triggered by ansible, that branch will be devel which doesn't
      # make sense to devstack. Override so that we run the right thing.
      test_matrix_branch: master
      tox_install_siblings: true

- job:
    name: openstacksdk-ansible-stable-2.9-functional-devstack
    parent: openstacksdk-ansible-functional-devstack
    description: |
      Run openstacksdk ansible functional tests against a master devstack
      using git stable-2.9 branch version of ansible.
    required-projects:
      - name: github.com/ansible/ansible
        override-checkout: stable-2.9
      - name: openstack/openstacksdk
        override-checkout: master
      - name: openstack/devstack
        override-checkout: master
    vars:
      # test-matrix grabs branch from the zuul branch setting. If the job
      # is triggered by ansible, that branch will be devel which doesn't
      # make sense to devstack. Override so that we run the right thing.
      test_matrix_branch: master
      tox_install_siblings: true

- job:
    name: openstacksdk-functional-devstack-masakari
    parent: openstacksdk-functional-devstack-minimum
    description: |
      Run openstacksdk functional tests against a master devstack with masakari
    required-projects:
      - openstack/masakari
      - openstack/masakari-monitors
    vars:
      devstack_plugins:
        masakari: https://opendev.org/openstack/masakari
      devstack_services:
        masakari-api: true
        masakari-engine: true
      tox_environment:
        OPENSTACKSDK_HAS_MASAKARI: 1
        OPENSTACKSDK_TESTS_SUBDIR: instance_ha
      zuul_copy_output:
        '{{ devstack_base_dir }}/masakari-logs': logs

- job:
    name: openstacksdk-functional-devstack-manila
    parent: openstacksdk-functional-devstack-minimum
    description: |
      Run openstacksdk functional tests against a master devstack with manila
    required-projects:
      - openstack/manila
      - openstack/openstacksdk
    vars:
      devstack_localrc:
        # Set up manila with a fake driver - makes things super fast and should
        # have no impact on the API
        MANILA_INSTALL_TEMPEST_PLUGIN_SYSTEMWIDE: false
        SHARE_DRIVER: manila.tests.share.drivers.dummy.DummyDriver
        MANILA_CONFIGURE_GROUPS: alpha,beta,gamma,membernet
        MANILA_CONFIGURE_DEFAULT_TYPES: true
        MANILA_SERVICE_IMAGE_ENABLED: false
        MANILA_SHARE_MIGRATION_PERIOD_TASK_INTERVAL: 1
        MANILA_SERVER_MIGRATION_PERIOD_TASK_INTERVAL: 10
        MANILA_REPLICA_STATE_UPDATE_INTERVAL: 10
        MANILA_DEFAULT_SHARE_TYPE_EXTRA_SPECS: 'snapshot_support=True create_share_from_snapshot_support=True revert_to_snapshot_support=True mount_snapshot_support=True replication_type=readable'
        MANILA_ENABLED_BACKENDS: alpha,beta,gamma
        MANILA_OPTGROUP_alpha_driver_handles_share_servers: false
        MANILA_OPTGROUP_alpha_replication_domain: DUMMY_DOMAIN
        MANILA_OPTGROUP_alpha_share_backend_name: ALPHA
        MANILA_OPTGROUP_alpha_share_driver: manila.tests.share.drivers.dummy.DummyDriver
        MANILA_OPTGROUP_beta_driver_handles_share_servers: false
        MANILA_OPTGROUP_beta_replication_domain: DUMMY_DOMAIN
        MANILA_OPTGROUP_beta_share_backend_name: BETA
        MANILA_OPTGROUP_beta_share_driver: manila.tests.share.drivers.dummy.DummyDriver
        MANILA_OPTGROUP_gamma_driver_handles_share_servers: true
        MANILA_OPTGROUP_gamma_network_config_group: membernet
        MANILA_OPTGROUP_gamma_share_backend_name: GAMMA
        MANILA_OPTGROUP_gamma_share_driver: manila.tests.share.drivers.dummy.DummyDriver
        MANILA_OPTGROUP_gamma_admin_network_config_group: membernet
        MANILA_OPTGROUP_membernet_network_api_class: manila.network.standalone_network_plugin.StandaloneNetworkPlugin
        MANILA_OPTGROUP_membernet_network_plugin_ipv4_enabled: true
        MANILA_OPTGROUP_membernet_standalone_network_plugin_allowed_ip_ranges: 10.0.0.10-10.0.0.209
        MANILA_OPTGROUP_membernet_standalone_network_plugin_gateway: 10.0.0.1
        MANILA_OPTGROUP_membernet_standalone_network_plugin_mask: 24
        MANILA_OPTGROUP_membernet_standalone_network_plugin_network_type: vlan
        MANILA_OPTGROUP_membernet_standalone_network_plugin_segmentation_id: 1010
      devstack_plugins:
        manila: https://opendev.org/openstack/manila
      devstack_services:
        c-api: false
        c-bak: false
        c-sch: false
        c-vol: false
        cinder: false
        s-account: false
        s-container: false
        s-object: false
        s-proxy: false
        n-api: false
        n-api-meta: false
        n-cond: false
        n-cpu: false
        n-novnc: false
        n-sch: false
        nova: false
        placement-api: false
        dstat: false
      tox_environment:
        OPENSTACKSDK_HAS_MANILA: 1
        OPENSTACKSDK_TESTS_SUBDIR: shared_file_system

- job:
    name: openstacksdk-functional-devstack-compute-manila
    parent: openstacksdk-functional-devstack-minimum
    description: |
      Run openstacksdk functional tests against a master devstack with nova and manila
    pre-run: playbooks/devstack/compute-manila-pre.yaml
    required-projects:
      - openstack/manila
      - openstack/openstacksdk
    vars:
      devstack_localrc:
        # LVM Backend config options
        MANILA_SERVICE_IMAGE_ENABLED: False
        SHARE_DRIVER: manila.share.drivers.lvm.LVMShareDriver
        MANILA_ENABLED_BACKENDS: chicago,denver
        MANILA_OPTGROUP_chicago_driver_handles_share_servers: False
        MANILA_OPTGROUP_denver_driver_handles_share_servers: False
        SHARE_BACKING_FILE_SIZE: 32000M
        MANILA_DEFAULT_SHARE_TYPE_EXTRA_SPECS: 'snapshot_support=True create_share_from_snapshot_support=True revert_to_snapshot_support=True mount_snapshot_support=True'
        MANILA_CONFIGURE_DEFAULT_TYPES: True

        # Required for mounting shares
        MANILA_ALLOW_NAS_SERVER_PORTS_ON_HOST: True

      devstack_plugins:
        manila: https://opendev.org/openstack/manila

      devstack_services:
        c-api: false
        c-bak: false
        c-sch: false
        c-vol: false
        cinder: false
        s-account: false
        s-container: false
        s-object: false
        s-proxy: false
        n-api: true
        n-api-meta: true
        n-cond: true
        n-cpu: true
        n-novnc: false
        n-sch: true
        nova: true
        placement-api: true
        dstat: false

      tox_environment:
        OPENSTACKSDK_HAS_MANILA: 1
        OPENSTACKSDK_TESTS_SUBDIR: compute_shared_file_system

      # Enable file backed memory to allow virtiofs
      devstack_local_conf:
        post-config:
          $NOVA_CONF:
            DEFAULT:
              reserved_host_memory_mb: 0
              ram_allocation_ratio: 1.0
            libvirt:
              file_backed_memory: 4096
              mem_stats_period_s: 0

- project-template:
    name: openstacksdk-functional-tips
    check:
      jobs:
        - openstacksdk-functional-devstack-tips
    gate:
      jobs:
        - openstacksdk-functional-devstack-tips
