---
# ============LICENSE_START=======================================================
#  Copyright (C) 2019 Nordix Foundation.
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
# ============LICENSE_END=========================================================

- project:
    name: 'engine-periodic-offline-deploy-test'

    project: 'engine-periodic-offline-deploy-test'

    stream:
      - 'master':
          branch: '{stream}'

    distro:
      - ubuntu1804

    deploy-scenario:
      - k8-calico-nofeature
      - k8-multus-nofeature


    type:
      - baremetal:
          pod-name: est-baremetal
          provisioner-type: bifrost
          installer-type: kubespray
          slave-label: baremetal-deploy
          yardstick-dispatcher: 'influxdb'

    environment-type:
      - offline:
          disabled: false
          execution-mode: offline-deployment
          pdf: 'file:///opt/engine/offline/git/hwconfig/pods'
          idf: 'file:///opt/engine/offline/git/hwconfig/pods'

    phase:
      - deploy:
          build-timeout: 90
      - functest:
          build-timeout: 240
      - yardstick:
          build-timeout: 120

    jobs:
      - '{deploy-scenario}-{environment-type}-{distro}-{type}-periodic'
      - 'kubernetes-{environment-type}-{phase}-{distro}-{type}-periodic'

- job-template:
    name: '{deploy-scenario}-{environment-type}-{distro}-{type}-periodic'

    project-type: multijob

    disabled: '{obj:disabled}'

    concurrent: true

    parameters:
      - label:
          name: SLAVE_LABEL
          default: '{slave-label}'
          description: 'Slave label to schedule this job on.'
      - string:
          name: PROVISIONER_TYPE
          default: '{provisioner-type}'
          description: 'Provisioner type to use'
      - string:
          name: INSTALLER_TYPE
          default: '{installer-type}'
          description: 'Installer type to use'
      - string:
          name: DEPLOY_SCENARIO
          default: '{deploy-scenario}'
          description: 'Scenario to deploy and test'
      - string:
          name: PDF
          default: '{pdf}/${{NODE_NAME}}-pdf.yml'
          description: 'PDF file to use for deployment'
      - string:
          name: IDF
          default: '{idf}/${{NODE_NAME}}-idf.yml'
          description: 'IDF file to use for deployment'
      - string:
          name: TEST_REPO_URL
          default: 'https://gerrit.nordix.org/infra/test.git'
          description: 'URL to clone the test repo from'
      - string:
          name: TEST_FW
          default: 'functest'
          description: 'Test framework to use'
      - string:
          name: TEST_SUITE
          default: 'smoke'
          description: 'Test suite to run'
      - string:
          name: YARDSTICK_DISPATCHER
          default: '{yardstick-dispatcher}'
          description: 'Dispatcher to use for Yardstick reporting'

    properties:
      - logrotate
      - throttle:
          max-per-node: 1
          max-total: 3
          option: project

    wrappers:
      - build-timeout:
          timeout: 550
      - mask-passwords
      - fix-workspace-permissions

    builders:
      - description-setter:
          description: $PROVISIONER_TYPE | $INSTALLER_TYPE | $DEPLOY_SCENARIO
      - multijob:
          name: "Offline Deployment on {type}"
          condition: SUCCESSFUL
          execution-type: PARALLEL
          projects:
            - name: 'kubernetes-{environment-type}-deploy-{distro}-{type}-periodic'
              current-parameters: true
              node-parameters: true
              kill-phase-on: FAILURE
              abort-all-job: true
      - multijob:
          name: functest
          condition: ALWAYS
          projects:
            - name: 'kubernetes-{environment-type}-functest-{distro}-{type}-periodic'
              current-parameters: true
              node-parameters: true
              kill-phase-on: FAILURE
              abort-all-job: true
      - multijob:
          name: yardstick
          condition: ALWAYS
          projects:
            - name: 'kubernetes-{environment-type}-yardstick-{distro}-{type}-periodic'
              current-parameters: true
              node-parameters: true
              kill-phase-on: FAILURE
              abort-all-job: true

- job-template:
    name: 'kubernetes-{environment-type}-{phase}-{distro}-{type}-periodic'

    disabled: '{obj:disabled}'

    properties:
      - logrotate
      - throttle:
          max-per-node: 1
          max-total: 3
          option: project

    wrappers:
      - build-timeout:
          timeout: '{build-timeout}'
      - mask-passwords
      - fix-workspace-permissions

    builders:
      - shell: |
          #!/bin/bash
          env
