---
- project:
    project: 'releng-xci'

    name: 'xci-daily'

    # -------------------------------
    # Branch Anchors
    # -------------------------------
    master: &master
      stream: master
      opnfv-releng-version: master
      gs-pathname: ''

    # -------------------------------
    # Scenarios
    # -------------------------------
    scenario:
      - 'os-nosdn-nofeature-noha':
          auto-trigger-name: 'daily-trigger-disabled'
          deploy-scenario: 'os-nosdn-nofeature'
          installer-type: 'osa'
          xci-flavor: 'mini'
      - 'os-nosdn-osm-noha':
          auto-trigger-name: 'daily-trigger-disabled'
          deploy-scenario: 'os-nosdn-osm'
          installer-type: 'osa'
          xci-flavor: 'mini'
      - 'os-odl-nofeature-noha':
          auto-trigger-name: 'daily-trigger-disabled'
          deploy-scenario: 'os-odl-nofeature'
          installer-type: 'osa'
          xci-flavor: 'mini'
      - 'os-odl-bgpvpn-noha':
          auto-trigger-name: 'daily-trigger-disabled'
          deploy-scenario: 'os-odl-bgpvpn'
          installer-type: 'osa'
          xci-flavor: 'mini'
      - 'os-odl-sfc-noha':
          auto-trigger-name: 'daily-trigger-disabled'
          deploy-scenario: 'os-odl-sfc'
          installer-type: 'osa'
          xci-flavor: 'mini'
      - 'k8-nosdn-nofeature-noha':
          auto-trigger-name: 'daily-trigger-disabled'
          deploy-scenario: 'k8-nosdn-nofeature'
          installer-type: 'kubespray'
          xci-flavor: 'mini'
      - 'k8-canal-nofeature-noha':
          auto-trigger-name: 'daily-trigger-disabled'
          deploy-scenario: 'k8-canal-nofeature'
          installer-type: 'kubespray'
          xci-flavor: 'mini'
      - 'k8-calico-nofeature-noha':
          auto-trigger-name: 'daily-trigger-disabled'
          deploy-scenario: 'k8-calico-nofeature'
          installer-type: 'kubespray'
          xci-flavor: 'mini'
      - 'k8-contiv-nofeature-noha':
          auto-trigger-name: 'daily-trigger-disabled'
          deploy-scenario: 'k8-contiv-nofeature'
          installer-type: 'kubespray'
          xci-flavor: 'mini'
      - 'k8-flannel-nofeature-noha':
          auto-trigger-name: 'daily-trigger-disabled'
          deploy-scenario: 'k8-flannel-nofeature'
          installer-type: 'kubespray'
          xci-flavor: 'mini'
      - 'k8-nosdn-istio-noha':
          auto-trigger-name: 'daily-trigger-disabled'
          deploy-scenario: 'k8-nosdn-istio'
          installer-type: 'kubespray'
          xci-flavor: 'mini'

    # -------------------------------
    # XCI PODs
    # -------------------------------
    pod:
      - virtual:
          <<: *master

    # -------------------------------
    # Supported Distros
    # -------------------------------
    distro:
      - 'ubuntu':
          disabled: false
          slave-label: xci-virtual
      - 'centos':
          disabled: true
          slave-label: xci-virtual
      - 'opensuse':
          disabled: false
          slave-label: xci-virtual

    # -------------------------------
    #        Phases
    # -------------------------------
    phase:
      - 'deploy'
      - 'functest'
      - 'yardstick'

    # -------------------------------
    # jobs
    # -------------------------------
    jobs:
      - 'xci-{scenario}-{pod}-{distro}-daily-{stream}'
      - 'xci-{phase}-{pod}-{distro}-daily-{stream}'

# -------------------------------
# job templates
# -------------------------------
- job-template:
    name: 'xci-{scenario}-{pod}-{distro}-daily-{stream}'

    disabled: '{obj:disabled}'

    concurrent: false

    properties:
      - build-blocker:
          use-build-blocker: true
          blocking-jobs:
            - '^xci-verify.*'
            - '^xci-merge.*'
            - '^xci-os.*'
            - '^xci-k8.*'
            - '^xci-deploy.*'
            - '^xci-functest.*'
            - '^bifrost-.*periodic.*'
            - '^osa-.*periodic.*'
          block-level: 'NODE'
      - logrotate-default

    parameters:
      - string:
          name: DEPLOY_SCENARIO
          default: '{deploy-scenario}'
      - string:
          name: INSTALLER_TYPE
          default: '{installer-type}'
      - string:
          name: XCI_FLAVOR
          default: '{xci-flavor}'
      - label:
          name: SLAVE_LABEL
          default: '{slave-label}'
      - string:
          name: XCI_DISTRO
          default: '{distro}'
      - string:
          name: FUNCTEST_MODE
          default: 'tier'
      - string:
          name: FUNCTEST_SUITE_NAME
          default: 'healthcheck'
      - string:
          name: CI_LOOP
          default: 'daily'
      - string:
          name: GIT_BASE
          default: https://gerrit.opnfv.org/gerrit/$PROJECT
          description: 'Git URL to use on this Jenkins Slave'

    triggers:
      - '{auto-trigger-name}'

    wrappers:
      - ssh-agent-wrapper
      - build-timeout:
          timeout: 240
      - fix-workspace-permissions

    builders:
      - description-setter:
          description: "Scenario: $DEPLOY_SCENARIO | Node: $NODE_NAME"
      - trigger-builds:
          - project: 'xci-deploy-{pod}-{distro}-daily-{stream}'
            current-parameters: false
            predefined-parameters: |
              DEPLOY_SCENARIO=$DEPLOY_SCENARIO
              INSTALLER_TYPE=$INSTALLER_TYPE
              XCI_FLAVOR=$XCI_FLAVOR
              CI_LOOP=$CI_LOOP
              XCI_DISTRO=$XCI_DISTRO
            same-node: true
            block: true
      - trigger-builds:
          - project: 'xci-functest-{pod}-{distro}-daily-{stream}'
            current-parameters: false
            predefined-parameters: |
              DEPLOY_SCENARIO=$DEPLOY_SCENARIO
              INSTALLER_TYPE=$INSTALLER_TYPE
              XCI_FLAVOR=$XCI_FLAVOR
              CI_LOOP=$CI_LOOP
              XCI_DISTRO=$XCI_DISTRO
              FUNCTEST_MODE=$FUNCTEST_MODE
              FUNCTEST_SUITE_NAME=$FUNCTEST_SUITE_NAME
            same-node: true
            block: true
            block-thresholds:
              build-step-failure-threshold: 'never'
              failure-threshold: 'never'
              unstable-threshold: 'FAILURE'
      - trigger-builds:
          - project: 'xci-yardstick-{pod}-{distro}-daily-{stream}'
            current-parameters: false
            predefined-parameters: |
              DEPLOY_SCENARIO=$DEPLOY_SCENARIO
              INSTALLER_TYPE=$INSTALLER_TYPE
              XCI_FLAVOR=$XCI_FLAVOR
              CI_LOOP=$CI_LOOP
              XCI_DISTRO=$XCI_DISTRO
            same-node: true
            block: true
            block-thresholds:
              build-step-failure-threshold: 'never'
              failure-threshold: 'never'
              unstable-threshold: 'FAILURE'

    publishers:
      # yamllint disable rule:line-length
      # yamllint enable rule:line-length
      - email-jenkins-admins-on-failure

- job-template:
    name: 'xci-{phase}-{pod}-{distro}-daily-{stream}'

    disabled: false

    concurrent: true

    properties:
      - build-blocker:
          use-build-blocker: true
          blocking-jobs:
            - '^xci-verify.*'
            - '^xci-merge.*'
            - '^xci-deploy.*'
            - '^xci-functest.*'
            - '^bifrost-.*periodic.*'
            - '^osa-.*periodic.*'
          block-level: 'NODE'
      - throttle:
          enabled: true
          max-per-node: 1
          option: 'project'
      - logrotate-default

    wrappers:
      - ssh-agent-wrapper
      - build-timeout:
          timeout: 240
      - fix-workspace-permissions

    scm:
      - git-scm

    parameters:
      - project-parameter:
          project: '{project}'
          branch: '{opnfv-releng-version}'
      - string:
          name: DEPLOY_SCENARIO
          default: 'os-nosdn-nofeature-noha'
      - string:
          name: INSTALLER_TYPE
          default: 'osa'
      - string:
          name: XCI_FLAVOR
          default: 'mini'
      - string:
          name: XCI_DISTRO
          default: 'ubuntu'
      - label:
          name: SLAVE_LABEL
          default: '{slave-label}'
      - string:
          name: FUNCTEST_MODE
          default: 'tier'
      - string:
          name: FUNCTEST_SUITE_NAME
          default: 'healthcheck'
      - string:
          name: CI_LOOP
          default: 'daily'
      - string:
          name: GIT_BASE
          default: https://gerrit.opnfv.org/gerrit/$PROJECT

    builders:
      - description-setter:
          description: "Scenario: $DEPLOY_SCENARIO | Node: $NODE_NAME"
      - 'xci-daily-{phase}-macro'

# --------------------------
# builder macros
# --------------------------
# These need to be properly fixed once the basic deployment, functest, and
# yardstick jobs are working outside of clean vm.
# One of the ugly fixes is moving test  preparation step into the
# deployment job itself since test preparation requires some of the
# things from deployment job. With clean VM, this wasn't an issue
# since everything was on clean VM. When we move things out of clean
# VM, things are done in workspaces of the jobs that are different.
#
# Apart from these things, we will need to go through the scripts
# used for verify jobs and make them updated in order to be able to
# use them for jobs that don't use clean VM.
- builder:
    name: 'xci-daily-deploy-macro'
    builders:
      - shell: |
          #!/bin/bash
          set -o errexit
          set -o pipefail

          echo "Cleaning the leftovers from the earlier run"
          echo "---------------------------------------------------------------------------------"
          for vm in $(sudo virsh list --all --name | grep -v xci_vm); do
              echo "Removing $vm"
              sudo virsh destroy $vm > /dev/null 2>&1 || true
              sudo virsh undefine $vm > /dev/null 2>&1 || true
          done
          echo "---------------------------------------------------------------------------------"

          cd $WORKSPACE/xci && ./xci-deploy.sh

          echo "Prepare OPNFV VM for Tests"
          echo "---------------------------------------------------------------------------------"
          export XCI_PATH=$WORKSPACE
          export XCI_VENV=${XCI_PATH}/venv
          source $XCI_VENV/bin/activate
          while read var; do
              declare -x "\${var}" 2>/dev/null
              echo $var
          done < ${XCI_PATH}/.cache/xci.env && cd ${XCI_PATH}/xci && \
          ansible-playbook -i playbooks/dynamic_inventory.py playbooks/prepare-tests.yml
          ssh root@192.168.122.2 "/root/prepare-tests.sh"
          echo "---------------------------------------------------------------------------------"

- builder:
    name: 'xci-daily-functest-macro'
    builders:
      - shell: |
          #!/bin/bash
          set -o errexit
          set -o pipefail

          ssh root@192.168.122.2 "/root/run-functest.sh"
- builder:
    name: 'xci-daily-yardstick-macro'
    builders:
      - shell: |
          #!/bin/bash
          set -o errexit
          set -o pipefail

          ssh root@192.168.122.2 "/root/run-yardstick.sh"