---
# ============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'

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

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

- job-template:
    name: '{deploy-scenario}-offline-{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: 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-offline-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-offline-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-offline-yardstick-{distro}-{type}-periodic'
              current-parameters: true
              node-parameters: true
              kill-phase-on: FAILURE
              abort-all-job: true

- job-template:
    name: 'kubernetes-offline-{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
