- job:
    name: nodepool-zuul-functional
    parent: tox
    description: |
      Test that zuul works with current nodepool sources.

      This test runs the zuul project ``nodepool`` environment.
    pre-run: playbooks/nodepool-zuul-functional/pre.yaml
    post-run: playbooks/nodepool-zuul-functional/post.yaml
    required-projects:
      - zuul/nodepool
      - zuul/zuul
    vars:
      zuul_work_dir: "{{ zuul.projects['opendev.org/zuul/zuul'].src_dir }}"
      tox_envlist: nodepool

- job:
    name: nodepool-functional-openstack-base
    description: |
      Test Nodepool with an OpenStack.

      Sets up a working OpenStack system, builds an image, launches a
      node, and verifies SSH access to the node.

      .. zuul:jobvar:: nodepool_extra_packages
         :type: list

         A list of extra packages to install at the start of the job
         (i.e., anything needed for the DIB build).

      .. zuul:jobvar:: nodepool_diskimage
         :type: dict

         .. zuul:jobvar:: base_element

            The base element to use when building the disk image.

         .. zuul:jobvar:: release

            The release number or name to use with the base element.

         .. zuul:jobvar:: mirror

            The URL for the package mirror to use when building the
            disk image.  This is optional.

         .. zuul:jobvar:: env-vars
            :type: dict

            A dictionary of environment variables and values to add
            to the DIB environment when building the image.

    timeout: 5400
    required-projects:
      - zuul/nodepool
    pre-run: playbooks/nodepool-functional-openstack/pre.yaml
    run: playbooks/nodepool-functional-openstack/run.yaml
    post-run: playbooks/nodepool-functional-openstack/post.yaml
    vars:
      zuul_copy_output:
        /var/log/nodepool: logs

- job:
    name: nodepool-functional-openstack
    description: Test Nodepool with an OpenStack
    parent: nodepool-functional-openstack-base
    vars: &nodepool_diskimage_vars
      nodepool_extra_packages:
        - rpm
        - yum-utils
      nodepool_diskimage:
        base_element: centos-minimal
        release: 7
        mirror: "http://{{ zuul_site_mirror_fqdn }}/centos"
        env-vars:
          DIB_SIMPLE_INIT_NETWORKMANAGER: '1'

- job:
    name: nodepool-functional-openstack-src-base
    description: Test Nodepool and OpenStack, with some projects from source
    parent: nodepool-functional-openstack-base
    required-projects:
      - name: github.com/sqlalchemy/dogpile.cache
      - name: opendev/glean
      - name: zuul/nodepool
      - name: openstack/diskimage-builder
      - name: openstack/openstacksdk

- job:
    name: nodepool-functional-openstack-src
    description: Test Nodepool and OpenStack, with some projects from source
    parent: nodepool-functional-openstack
    required-projects:
      - name: github.com/sqlalchemy/dogpile.cache
      - name: opendev/glean
      - name: zuul/nodepool
      - name: openstack/diskimage-builder
      - name: openstack/openstacksdk
    vars: *nodepool_diskimage_vars

# NOTE(ianw): this job doesn't really do anything unless you set
# "NODEPOOL_PAUSE_something_DIB: false" to unpause one or more builds.
- job:
    name: nodepool-functional-base
    parent: devstack
    # NOTE(ianw): for now, keep these jobs as Xenial only.  We will
    # add bionic variants, but we want to keep Xenial testing around
    # whilst we still run Xenial for upstream nodepool-builders too
    nodeset: openstack-single-node-xenial
    pre-run: playbooks/nodepool-functional-base/pre.yaml
    post-run: playbooks/nodepool-functional-base/post.yaml
    timeout: 5400
    required-projects:
      - zuul/nodepool
    vars:
      devstack_localrc:
        USE_PYTHON3: True
      devstack_services:
        horizon: false
        ceilometer-acentral: false
        ceilometer-acompute: false
        ceilometer-alarm-evaluator: false
        ceilometer-alarm-notifier: false
        ceilometer-anotification: false
        ceilometer-api: false
        ceilometer-collector: false
        cinder: false
        c-bak: false
        c-sch: false
        c-api: false
        c-vol: false
        s-account: false
        s-container: false
        s-object: false
        s-proxy: false
        # Nodepool doesn't need vnc access
        n-novnc: false
        # Nodepool testing uses config drive only
        n-api-meta: false
        q-meta: false
      devstack_plugins:
        nodepool: https://opendev.org/zuul/nodepool
      zuul_copy_output:
        '/var/log/nodepool/builds': 'logs'

- job:
    name: nodepool-functional-py35
    parent: nodepool-functional-base
    description: |
      Run nodepool functional tests for py35
    run: playbooks/nodepool-functional-py35/run.yaml
    vars:
      devstack_localrc:
        NODEPOOL_PAUSE_UBUNTU_XENIAL_DIB: false

- job:
    name: nodepool-functional-py35-src-base
    parent: nodepool-functional-base
    run: playbooks/nodepool-functional-py35-src/run.yaml
    required-projects:
      - name: github.com/sqlalchemy/dogpile.cache
      - name: opendev/glean
      - name: zuul/nodepool
      - name: openstack/diskimage-builder
      - name: openstack/openstacksdk

- job:
    name: nodepool-functional-py35-src
    parent: nodepool-functional-py35-src-base
    vars:
      devstack_localrc:
        NODEPOOL_PAUSE_UBUNTU_XENIAL_DIB: false

# Distro functional tests.  This is used by projects such as
# diskimage-builder and glean as live-boot tests
- job:
    name: nodepool-functional-py35-redhat-src
    parent: nodepool-functional-py35-src-base
    vars:
      devstack_localrc:
        NODEPOOL_PAUSE_CENTOS_7_DIB: false
        NODEPOOL_PAUSE_FEDORA_29_DIB: false

- job:
    name: nodepool-functional-py35-suse-src
    parent: nodepool-functional-py35-src-base
    vars:
      devstack_localrc:
        NODEPOOL_PAUSE_OPENSUSE_423_DIB: false
        NODEPOOL_PAUSE_OPENSUSE_150_DIB: false
        NODEPOOL_PAUSE_OPENSUSE_TUMBLEWEED_DIB: false

- job:
    name: nodepool-functional-py35-gentoo-src
    parent: nodepool-functional-py35-src-base
    vars:
      devstack_localrc:
        NODEPOOL_PAUSE_GENTOO_17_0_SYSTEMD_DIB: false

- job:
    name: nodepool-functional-py35-ubuntu-src
    parent: nodepool-functional-py35-src-base
    vars:
      devstack_localrc:
        NODEPOOL_PAUSE_UBUNTU_BIONIC_DIB: false
        NODEPOOL_PAUSE_UBUNTU_XENIAL_DIB: false
        NODEPOOL_PAUSE_UBUNTU_TRUSTY_DIB: false

- job:
    name: nodepool-functional-py35-debian-src
    parent: nodepool-functional-py35-src-base
    vars:
      devstack_localrc:
        NODEPOOL_PAUSE_DEBIAN_STRETCH_DIB: false
        NODEPOOL_PAUSE_DEBIAN_BUSTER_DIB: false

- job:
    description: |
      Test that nodepool works with kubernetes.
    name: nodepool-functional-k8s
    pre-run: playbooks/nodepool-functional-k8s/pre.yaml
    run: playbooks/nodepool-functional-k8s/run.yaml
    post-run: playbooks/nodepool-functional-k8s/post.yaml
    nodeset: ubuntu-xenial
    required-projects:
      - zuul/nodepool

- job:
    description: |
      Test that nodepool works with openshift.
    name: nodepool-functional-openshift
    pre-run: playbooks/nodepool-functional-openshift/pre.yaml
    run: playbooks/nodepool-functional-openshift/run.yaml
    nodeset:
      nodes:
        - name: cluster
          label: centos-7
        - name: launcher
          label: fedora-28
    required-projects:
      - zuul/nodepool

- secret:
    name: nodepool-dockerhub
    data:
      username: zuulzuul
      password: !encrypted/pkcs1-oaep
        - VV5m4XbsYvAz0/7T+WoIypvD3ijRsPYrGo4O5JuOHt6TX14s9B1KddeMwnabEEKapPdbb
          cwqbzFKoHRMi8DdXiDKxrgbTSC1jb3BvKq7XE0/xF4Bq2dM+r3yDnXS6a7BuijSqFSiMG
          /9bf0jqEAWXWCvbYUAxKOklJIRLjcKywCP5CulmW6EV8f1Iya8Y7UGpjGyL34FVQuc52Y
          5MLp+Dra95pvBJMgikbu7LtMPCXOMctUFBpwNArCjWKGhz00UZwyAmsbPPHwQWb+884ZP
          v9zi2FuRAL+rn4DRVwyIw28ZdCEr5F5EkZon3lSIhikhdQIyHPtW8VwMJTL4RxBdmgcEt
          +zZBbLlOU+0AHPGLlO/yQNvHeSzwY9pe2oIGuqSu3h6zp6Y0NIE/Q0VpiIXWpOAnLOmno
          uOd3j9tZ1beol2mg4Yk7rOaXu1Fvtfhd1K3LpLzEbiGzCMIEZuFHU2ZInAbUmtm0BtbDa
          /bYvI9dB/uqA2xgse5rVMa++v3AfWJTJhFY/wBU4fHOWlFBUZKFuSoijUcWMfnfMMyU2B
          A5CQKhv4Wmtzbvo/oneYkwFOTYaPNj2DS0BcFJFkR8FZDYmTBPnKoBH5wpwwnrzPOpCMa
          L21z+Vp1Vce1XCsaOduMrmZDvuQcK1YOKIIUeElAQw8GuwTfcXqekoPvp54SeE=

- job:
    name: nodepool-build-image
    parent: opendev-build-docker-image
    description: Build Docker images.
    vars: &nodepool_image_vars
      docker_images:
        - context: .
          repository: zuul/nodepool
          target: nodepool
        - context: .
          repository: zuul/nodepool-launcher
          target: nodepool-launcher
        - context: .
          repository: zuul/nodepool-builder
          target: nodepool-builder

- job:
    name: nodepool-upload-image
    parent: opendev-upload-docker-image
    description: Build Docker images and upload to Docker Hub.
    vars: *nodepool_image_vars
    secrets:
      - name: docker_credentials
        secret: nodepool-dockerhub
        pass-to-parent: true

- job:
    name: nodepool-promote-image
    parent: opendev-promote-docker-image
    description: Promote previously uploaded Docker images.
    vars: *nodepool_image_vars
    secrets:
      - name: docker_credentials
        secret: nodepool-dockerhub
        pass-to-parent: true

- project:
    check:
      jobs:
        - nodepool-build-image
        - tox-docs
        - tox-pep8
        - tox-py35:
            nodeset: ubuntu-xenial
        - tox-py36
        - nodepool-zuul-functional:
            voting: false
        - nodepool-functional-openstack
        - nodepool-functional-openstack-src
        - nodepool-functional-k8s
        - nodepool-functional-openshift
        - zuul-quick-start:
            dependencies: nodepool-build-image
    gate:
      jobs:
        - nodepool-upload-image
        - tox-docs
        - tox-pep8
        - tox-py35:
            nodeset: ubuntu-xenial
        - tox-py36
        - zuul-quick-start:
            dependencies: nodepool-upload-image
    post:
      jobs:
        - publish-zuul-docs
        - release-zuul-python
    promote:
      jobs:
        - nodepool-promote-image
    experimental:
      jobs:
        - nodepool-functional-py35-debian-src
    release:
      jobs:
        - release-zuul-python
        - publish-zuul-docs