- nodeset:
    name: openstack-single-node
    nodes:
      - name: controller
        label: ubuntu-xenial
    groups:
      - name: tempest
        nodes:
          - controller

- nodeset:
    name: openstack-two-node
    nodes:
      - name: controller
        label: ubuntu-xenial
      - name: compute1
        label: ubuntu-xenial
    groups:
      - name: tempest
        nodes:
          - controller
      - name: compute
        nodes:
          - controller
          - compute1
      - name: subnode
        nodes:
          - compute1
      - name: switch
        nodes:
          - controller
      - name: peers
        nodes:
          - compute1

- job:
    name: devstack-base
    parent: multinode
    abstract: true
    description: |
      Base abstract Devstack job.

      Defines plays and base variables, but it does not include any project
      and it does not run any service by default. This is a common base for
      all single Devstack jobs, single or multinode.
      Variables are defined in job.vars, which is what is then used by single
      node jobs and by multi node jobs for the controller, as well as in
      job.group-vars.peers, which is what is used by multi node jobs for peer
      nodes (everything but the controller).
    required-projects:
      - openstack-dev/devstack
    roles:
      - zuul: openstack-infra/devstack-gate
      - zuul: openstack-infra/openstack-zuul-jobs
    vars:
      devstack_localrc:
        DATABASE_PASSWORD: secretdatabase
        RABBIT_PASSWORD: secretrabbit
        ADMIN_PASSWORD: secretadmin
        SERVICE_PASSWORD: secretservice
        NETWORK_GATEWAY: 10.1.0.1
        FIXED_RANGE: 10.1.0.0/20
        IPV4_ADDRS_SAFE_TO_USE: 10.1.0.0/20
        FLOATING_RANGE: 172.24.5.0/24
        PUBLIC_NETWORK_GATEWAY: 172.24.5.1
        LOGFILE: /opt/stack/logs/devstacklog.txt
        LOG_COLOR: false
        VERBOSE: true
        VERBOSE_NO_TIMESTAMP: true
        NOVNC_FROM_PACKAGE: true
        ERROR_ON_CLONE: true
        # Gate jobs can't deal with nested virt. Disable it.
        LIBVIRT_TYPE: qemu
        # NOTE(dims): etcd 3.x is not available in debian/ubuntu
        # etc. As a stop gap measure, devstack uses wget to download
        # from the location below for all the CI jobs.
        ETCD_DOWNLOAD_URL: http://tarballs.openstack.org/etcd/
      devstack_services:
        base: false
      zuul_copy_output:
        '{{ devstack_conf_dir }}/local.conf': 'logs'
        '{{ devstack_conf_dir }}/localrc': 'logs'
        '{{ devstack_conf_dir }}/.stackenv': 'logs'
        '{{ devstack_log_dir }}/dstat-csv.log': 'logs'
        '{{ devstack_log_dir }}/devstacklog.txt': 'logs'
        '{{ devstack_log_dir }}/devstacklog.txt.summary': 'logs'
        '{{ devstack_full_log}}': 'logs'
        '{{ stage_dir }}/verify_tempest_conf.log': 'logs'
        '{{ stage_dir }}/apache': 'logs'
        '{{ stage_dir }}/apache_config': 'logs'
        '{{ stage_dir }}/etc': 'logs'
        '/var/log/rabbitmq': 'logs'
        '/var/log/postgresql': 'logs'
        '/var/log/mysql.err': 'logs'
        '/var/log/mysql.log': 'logs'
        '/var/log/libvirt': 'logs'
        '/etc/sudoers': 'logs'
        '/etc/sudoers.d': 'logs'
        '{{ stage_dir }}/iptables.txt': 'logs'
        '{{ stage_dir }}/df.txt': 'logs'
        '{{ stage_dir }}/pip2-freeze.txt': 'logs'
        '{{ stage_dir }}/pip3-freeze.txt': 'logs'
        '{{ stage_dir }}/dpkg-l.txt': 'logs'
        '{{ stage_dir }}/rpm-qa.txt': 'logs'
        '{{ stage_dir }}/core': 'logs'
        '{{ stage_dir }}/listen53.txt': 'logs'
        '{{ stage_dir }}/deprecations.log': 'logs'
        '/var/log/ceph': 'logs'
        '/var/log/openvswitch': 'logs'
        '/var/log/glusterfs': 'logs'
        '/etc/glusterfs/glusterd.vol': 'logs'
        '/etc/resolv.conf': 'logs'
        '/var/log/unbound.log': 'logs'
      extensions_to_txt:
        conf: True
        log: True
        localrc: True
        stackenv: True
    group-vars:
      peers:
        devstack_localrc:
          DATABASE_PASSWORD: secretdatabase
          RABBIT_PASSWORD: secretrabbit
          ADMIN_PASSWORD: secretadmin
          SERVICE_PASSWORD: secretservice
          NETWORK_GATEWAY: 10.1.0.1
          FIXED_RANGE: 10.1.0.0/20
          IPV4_ADDRS_SAFE_TO_USE: 10.1.0.0/20
          FLOATING_RANGE: 172.24.5.0/24
          PUBLIC_NETWORK_GATEWAY: 172.24.5.1
          LOGFILE: /opt/stack/logs/devstacklog.txt
          LOG_COLOR: false
          VERBOSE: true
          VERBOSE_NO_TIMESTAMP: true
          NOVNC_FROM_PACKAGE: true
          ERROR_ON_CLONE: true
          LIBVIRT_TYPE: qemu
          ETCD_DOWNLOAD_URL: http://tarballs.openstack.org/etcd/
        devstack_services:
          base: false
    pre-run: playbooks/pre.yaml
    run: playbooks/devstack.yaml
    post-run: playbooks/post.yaml
    irrelevant-files:
      # Documentation related
      - ^.*\.rst$
      - ^api-ref/.*$
      - ^doc/.*$
      - ^releasenotes/.*$
      # Translations
      - ^.*/locale/.*po$

- job:
    name: devstack
    parent: devstack-base
    description: |
      Single node devstack job for integration gate.
    nodeset: openstack-single-node
    required-projects:
      - openstack/cinder
      - openstack/glance
      - openstack/keystone
      - openstack/neutron
      - openstack/nova
      - openstack/requirements
      - openstack/swift
    timeout: 7200
    vars:
      test_matrix_configs: [neutron, tlsproxy]
      devstack_localrc:
        # Common OpenStack services settings
        SWIFT_REPLICAS: 1
        SWIFT_START_ALL_SERVICES: false
        SWIFT_HASH: 1234123412341234
        CINDER_PERIODIC_INTERVAL: 10
        DEBUG_LIBVIRT_COREDUMPS: True
        NOVA_VNC_ENABLED: true
        VNCSERVER_LISTEN: 0.0.0.0
        VNCSERVER_PROXYCLIENT_ADDRESS: "{{ hostvars[inventory_hostname]['nodepool']['private_ipv4'] }}"
      devstack_services:
        base: true
        horizon: false
        tempest: false

- job:
    name: devstack-multinode
    parent: devstack-base
    description: Base devstack multinode job
    nodeset: openstack-two-node
    # NOTE(andreaf) The multinode job is useful to see the setup of different
    # services on different nodes, however the subnode configuration is not
    # ready yet. Until then this job should stay non-voting.
    voting: false

- job:
    name: devstack-tox-base
    parent: devstack
    description: |
      Base job for devstack-based functional tests that use tox.

      This job is not intended to be run directly. It's just here
      for organizational purposes for devstack-tox-functional and
      devstack-tox-functional-consumer.
    post-run: playbooks/tox/post.yaml
    vars:
      tox_envlist: functional
      tox_install_siblings: false

- job:
    name: devstack-tox-functional
    parent: devstack-tox-base
    description: |
      Base job for devstack-based functional tests that use tox.

      Runs devstack, then runs the tox ``functional`` environment,
      then collects tox/testr build output like normal tox jobs.

      Turns off tox sibling installation. Projects may be involved
      in the devstack deployment and so may be in the required-projects
      list, but may not want to test against master of the other
      projects in their tox env. Child jobs can set tox_install_siblings
      to True to re-enable sibling processing.
    run: playbooks/tox/run-both.yaml

- job:
    name: devstack-tox-functional-consumer
    parent: devstack
    description: |
      Base job for devstack-based functional tests for projects that
      consume the devstack cloud.

      This base job should only be used by projects that are not involved
      in the devstack deployment step, but are instead projects that are using
      devstack to get a cloud against which they can test things.

      Runs devstack in pre-run, then runs the tox ``functional`` environment,
      then collects tox/testr build output like normal tox jobs.

      Turns off tox sibling installation. Projects may be involved
      in the devstack deployment and so may be in the required-projects
      list, but may not want to test against master of the other
      projects in their tox env. Child jobs can set tox_install_siblings
      to True to re-enable sibling processing.
    pre-run:
      - playbooks/devstack.yaml
      - playbooks/tox/pre.yaml
    run: playbooks/tox/run.yaml

- job:
    name: devstack-unit-tests
    description: |
      Runs unit tests on devstack project.

      It runs  ``run_tests.sh``.
    pre-run: playbooks/unit-tests/pre.yaml
    run: playbooks/unit-tests/run.yaml

- project:
    check:
      jobs:
        - devstack
        - devstack-multinode
        - devstack-unit-tests
    gate:
      jobs:
        - devstack
        - devstack-unit-tests
    experimental:
      jobs:
        - nova-next