---
# ============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: 'onap-verify-deploy-test'

    project: 'onap-verify-deploy-test'

    stream:
      - 'master':
          branch: '{stream}'
          k8s-version: 'master'
          deploy-scenario: 'onap-full-nofeature'
      - 'guilin':
          branch: '{stream}'
          k8s-version: '1.15'
          deploy-scenario: 'onap-full-nofeature'
      - 'frankfurt':
          branch: '{stream}'
          k8s-version: '1.15'
          deploy-scenario: 'onap-sdc-nofeature'
      - 'elalto':
          branch: '{stream}'
          k8s-version: '1.15'
          deploy-scenario: 'onap-sdc-nofeature'

    environment-type:
      - online:
          disabled: false
          execution-mode: online-deployment
          successful: false
          failed: false
          unstable: false
          notbuilt: false
      - offline:
          disabled: false
          execution-mode: offline-deployment
          successful: false
          failed: false
          unstable: false
          notbuilt: false

    phase:
      - deploy
      - test


    type:
      - cloud:
          provisioner-type: 'heat'
          slave-type: 'jumphost'
          gated-projects: 'infra/stack/onap|infra/installer/oom'
          pdf: "https://gerrit.nordix.org/gitweb?p=infra/provisioner/heat.git;a=blob_plain;f=playbooks/roles/create-stack/files/heat-environment-ci-city-ubuntu1804-onap.yaml"
          idf: "https://gerrit.nordix.org/gitweb?p=infra/provisioner/heat.git;a=blob_plain;f=playbooks/roles/create-stack/files/heat-idf.yaml"

    distro:
      - ubuntu1804

    cloud:
      - city:
          openrc-credentials-file: 'est-jenkins-openrcfile-city-frankfurt-cicd'

    # This should be
    dependency-jobs: 'onap-verify-package-{distro}-{stream}'
    dependency-job-var: 'TRIGGER_onap_verify_package_{distro}_{stream}_BUILD_RESULT'

    jobs:
      - 'onap-verify-{environment-type}-deploy-test-{distro}-{cloud}-{type}-{stream}'
      - 'onap-verify-{environment-type}-deploy-{distro}-{cloud}-{type}-{stream}'
      - 'onap-verify-{environment-type}-deployk8s-{distro}-{cloud}-{type}-{stream}'
      - 'onap-verify-{environment-type}-xtesting-infra-healthcheck-{distro}-{cloud}-{type}-{stream}'
      - 'onap-verify-{environment-type}-xtesting-healthcheck-{distro}-{cloud}-{type}-{stream}'


- job-template:
    name: 'onap-verify-{environment-type}-deploy-test-{distro}-{cloud}-{type}-{stream}'

    project-type: multijob

    disabled: '{obj:disabled}'

    concurrent: true

    parameters:
      - string:
          name: DEPLOY_SCENARIO
          default: '{deploy-scenario}'
          description: 'Scenario to test change with.'
      - string:
          name: K8S_VERSION
          default: '{k8s-version}'
          description: 'K8S version to use for this deployment'
      - string:
          name: INVENTORY_INI
          default: /tmp/inventory.ini
          description: 'Location of the inventory file. Copied from k8s install'
      - string:
          name: DISTRO
          default: '{distro}'
          description: 'Distribution to use for configuring target nodes (networking etc.)'
      - label:
          name: SLAVE_LABEL
          default: 'engine-{slave-type}-{environment-type}-{distro}-fra'
          description: 'Slave label to schedule this job on.'
      - string:
          name: HW_TYPE
          default: '{type}'
          description: 'Hardware type - could be virtual, cloud, or baremetal'
      - string:
          name: EXECUTION_MODE
          default: '{execution-mode}'
          description: 'Execution mode to run in'
      - string:
          name: STACK_TYPE
          default: 'onap'
          description: 'Stack to package, deploy, test, release'
      - string:
          name: PDF
          default: '{pdf}'
          description: 'PDF file to use for deployment'
      - string:
          name: IDF
          default: '{idf}'
          description: 'IDF file to use for deployment'
      - string:
          name: HEAT_STACK_NAME
          default: "nordix-cicd-verify-onap-{environment-type}-{distro}-$GERRIT_CHANGE_NUMBER"
          description: 'Name of the created stack'
      - string:
          name: KEYPAIR_NAME
          default: "keypair-nordix-cicd-verify-onap-{environment-type}-{distro}-$GERRIT_CHANGE_NUMBER"
          description: 'Name of the created keypair'
      - string:
          name: USE_PREBUILT_DEPLOYMENT_IMAGE
          default: 'true'
          description: 'Use prebuilt deployment image while running as part of CI/CD'
      - string:
          name: DELETE_STACK
          default: 'false'
          description: 'Delete the stack upon completion of the build'
      - string:
          name: VERBOSITY
          default: 'true'
          description: 'Verbosity setting for the engine - true or false - default is false'
      - string:
          name: CI_LOOP
          default: "verify"
          description: 'CI loop the job belongs to'
      - project-parameters:
          project: $GERRIT_PROJECT
          branch: '{branch}'
          description: 'The project and branch which the change is proposed for'
      - nordix-gerrit-parameters

    properties:
      - logrotate
      # NOTE (fdegir): throttle categories are controlled in jenkins global configuration
      - throttle:
          enabled: true
          max-per-node: 1
          max-total: 8
          option: category
          categories:
            - engine-verify-deploy-test

    scm:
      - git-scm-gerrit:
          ssh-credentials-id: nordixinfra-nordix-gerrit-ssh
          branch: $GERRIT_BRANCH
          refspec: $GERRIT_REFSPEC
          wipe_workspace: true
          clean_before: false

    triggers:
      - gerrit:
          server-name: 'Nordix Gerrit'
          trigger-on:
            - patchset-created-event:
                exclude-drafts: 'false'
                exclude-trivial-rebase: 'false'
                exclude-no-code-change: 'false'
            - draft-published-event
            - comment-added-contains-event:
                comment-contains-value: 'recheck'
            - comment-added-contains-event:
                comment-contains-value: 'reverify'
          projects:
            - project-compare-type: 'REG_EXP'
              project-pattern: '{gated-projects}'
              branches:
                - branch-compare-type: 'ANT'
                  branch-pattern: '**/{branch}'
              disable-strict-forbidden-file-verification: 'true'
              forbidden-file-paths:
                - compare-type: ANT
                  pattern: 'docs/**|releasenotes/**'
          skip-vote:
            successful: '{obj:successful}'
            failed: '{obj:failed}'
            unstable: '{obj:unstable}'
            notbuilt: '{obj:notbuilt}'
          custom-url: '* $JOB_NAME $BUILD_URL'
          readable-message: 'true'
          dependency-jobs: '{dependency-jobs}'

    wrappers:
      - build-timeout:
          timeout: 600
      - credentials-binding:
          - file:
              credential-id: '{openrc-credentials-file}'
              variable: OPENRC_FILE
          - username-password-separated:
              credential-id: 'nordix-cicd-arm-credentials'
              username: NORDIX_ARM_USERNAME
              password: NORDIX_ARM_TOKEN
      - mask-passwords
      - openstack:
          single-use: True
      - pre-scm-buildstep:
          failOnError: true
          buildsteps:
            - system-groovy:
                command: |
                  def build = this.getProperty('binding').getVariable('build')
                  def listener = this.getProperty('binding').getVariable('listener')
                  if (build.getEnvironment(listener).{dependency-job-var} != "SUCCESS") {{
                    println "WARN  : Aborting build since dependent job did not succeed!"
                    throw new InterruptedException()
                  }}
            - shell: |
                #!/bin/bash
                sudo chown -R $USER:$USER $WORKSPACE || exit 1
                # offline nodes can not resolve Nordix Artifactory and Gerrit
                if [[ "$EXECUTION_MODE" == "offline-deployment" ]]; then
                  echo "Info  : Offline deployment. Adding City OpenStack Endpoint, Nordix Artifactory and Gerrit Public IP to /etc/hosts"
                  sudo sed -i 's/^search/# search/' /etc/resolv.conf
                  sudo bash -c "cat << EOF >> /etc/hosts
                # managed by engine
                91.106.198.25 artifactory.nordix.org
                91.106.198.142 gerrit.nordix.org
                86.107.242.50 fra1.citycloud.com
                # managed by engine
                EOF"
                  # we need to get rid of search domain as well
                  sudo sed -i 's/^search/# search/' /etc/resolv.conf
                fi

    builders:
      - 'generate-change-metadata-macro'
      - 'generate-k8sdeployment-environment-macro'
      - multijob:
          name: "{environment-type} deployment on {type} instances"
          condition: SUCCESSFUL
          execution-type: SEQUENTIALLY
          projects:
            - name: 'onap-verify-{environment-type}-deployk8s-{distro}-{cloud}-{type}-{stream}'
              current-parameters: true
              git-revision: true
              node-parameters: true
              kill-phase-on: FAILURE
              abort-all-job: false
              property-file: $WORKSPACE/k8s.properties
            - name: 'onap-verify-{environment-type}-deploy-{distro}-{cloud}-{type}-{stream}'
              current-parameters: true
              git-revision: true
              node-parameters: true
              kill-phase-on: FAILURE
              abort-all-job: false
              property-file: $WORKSPACE/change.properties
      - multijob:
          name: xTesting for infra-healthcheck and healthcheck
          condition: ALWAYS
          projects:
            - name: 'onap-verify-{environment-type}-xtesting-infra-healthcheck-{distro}-{cloud}-{type}-{stream}'
              current-parameters: true
              git-revision: true
              node-parameters: true
              kill-phase-on: FAILURE
              abort-all-job: false
            - name: 'onap-verify-{environment-type}-xtesting-healthcheck-{distro}-{cloud}-{type}-{stream}'
              current-parameters: true
              git-revision: true
              node-parameters: true
              kill-phase-on: FAILURE
              abort-all-job: false
    publishers:
      - postbuildscript:
          builders:
            - role: SLAVE
              build-on:
                - SUCCESS
                - FAILURE
                - ABORTED
                - NOT_BUILT
                - UNSTABLE
              build-steps:
                - 'wait-pkg-mgr-macro'
                - 'delete-stack-macro'

- job-template:
    name: 'onap-verify-{environment-type}-deploy-{distro}-{cloud}-{type}-{stream}'

    disabled: '{obj:disabled}'

    concurrent: true

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

    scm:
      - git-scm-gerrit:
          ssh-credentials-id: nordixinfra-nordix-gerrit-ssh
          branch: $GERRIT_BRANCH
          refspec: $GERRIT_REFSPEC
          wipe_workspace: true
          clean_before: false

    wrappers:
      - build-timeout:
          timeout: 600
      - credentials-binding:
          - file:
              credential-id: '{openrc-credentials-file}'
              variable: OPENRC_FILE
          - username-password-separated:
              credential-id: 'nordix-cicd-arm-credentials'
              username: NORDIX_ARM_USERNAME
              password: NORDIX_ARM_TOKEN
      - mask-passwords
      - fix-workspace-permissions

    builders:
      - 'generate-ssh-keypair-macro'
      - 'wait-pkg-mgr-macro'
      - 'download-deploy-artifact-macro'
      - 'deploy-macro'

- job-template:
    name: 'onap-verify-{environment-type}-deployk8s-{distro}-{cloud}-{type}-{stream}'

    disabled: '{obj:disabled}'

    concurrent: true

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

    scm:
      - git-scm-gerrit:
          ssh-credentials-id: nordixinfra-nordix-gerrit-ssh
          branch: $GERRIT_BRANCH
          refspec: $GERRIT_REFSPEC
          wipe_workspace: true
          clean_before: false

    wrappers:
      - build-timeout:
          timeout: 600
      - credentials-binding:
          - file:
              credential-id: '{openrc-credentials-file}'
              variable: OPENRC_FILE
          - username-password-separated:
              credential-id: 'nordix-cicd-arm-credentials'
              username: NORDIX_ARM_USERNAME
              password: NORDIX_ARM_TOKEN
      - mask-passwords
      - fix-workspace-permissions

    builders:
      - 'generate-ssh-keypair-macro'
      - 'wait-pkg-mgr-macro'
      - 'download-deploy-artifact-macro'
      - 'deploy-macro'
- job-template:
    name: 'onap-verify-{environment-type}-xtesting-infra-healthcheck-{distro}-{cloud}-{type}-{stream}'

    disabled: '{obj:disabled}'

    parameters:
      - string:
          name: EXECUTION_MODE
          default: '{execution-mode}'
          description: 'Execution mode'
      - 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: 'xtesting'
          description: 'Test framework to use'
      - string:
          name: TEST_SUITE
          default: 'infra-healthcheck'
          description: 'Test suite to run'

    properties:
      - logrotate
      - throttle:
          max-per-node: 1
          max-total: 3
          option: project
    wrappers:
      - build-timeout:
          timeout: 600
      - mask-passwords
      - fix-workspace-permissions

    builders:
      - 'download-deploy-artifact-macro'
      - 'xtesting-healthcheck-macro'
      - 'xtesting-infra-healthcheck-macro'

- job-template:
    name: 'onap-verify-{environment-type}-xtesting-healthcheck-{distro}-{cloud}-{type}-{stream}'

    disabled: '{obj:disabled}'

    parameters:
      - string:
          name: EXECUTION_MODE
          default: '{execution-mode}'
          description: 'Execution mode'
      - 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: 'xtesting'
          description: 'Test framework to use'
      - string:
          name: TEST_SUITE
          default: 'healthcheck'
          description: 'Test suite to run'

    properties:
      - logrotate
      - throttle:
          max-per-node: 1
          max-total: 3
          option: project
    wrappers:
      - build-timeout:
          timeout: 600
      - mask-passwords
      - fix-workspace-permissions

    builders:
      - 'wait-pkg-mgr-macro'
      - 'download-deploy-artifact-macro'
      - 'xtesting-healthcheck-macro'

