/* Copyright ETSI Contributors and Others
 *
 * All Rights Reserved.
 *
 *   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.
 */

pipeline {
    parameters {
        // string(defaultValue: 'artifactory-osm', description: '', name: 'ARTIFACTORY_SERVER')

        // Parameters to define the specific OSM version to test
        // --> Defaults to latest stable version of Release FOURTEEN
        string(defaultValue: 'https://osm-download.etsi.org/ftp/osm-17.0-seventeen/install_osm.sh', description: 'URL to OSM installer', name: 'INSTALLER_URL')
        string(defaultValue: 'releaseseventeen-daily', description: 'Release for OSM binaries (REPO_BASE)', name: 'REPO_BASE')
        string(defaultValue: 'releaseseventeen-daily', description: 'OSM docker tag (DOCKER_TAG)', name: 'DOCKER_TAG')
        string(defaultValue: 'testing', description: 'Repository name for OSM packages (REPO_NAME)', name: 'REPO_NAME')

        // Parameters for docker run
        string(defaultValue: 'opensourcemano/tests', description: 'Name of docker image for client-side of Robot tests', name: 'TEST_IMAGE')
        string(defaultValue: 'releaseseventeen-daily', description: 'Tag of docker image for client-side', name: 'TEST_TAG')

        // Parameters to define SSH keys (Jenkins secret) used when creating VMs
        string(defaultValue: '', description: 'Jenkins credential containing SSH private key used in VMs', name: 'SSH_PRIVATE_KEY')
        string(defaultValue: '', description: 'Jenkins credential containing SSH public key used in VMs', name: 'SSH_PUBLIC_KEY')

        // Parameter to set the target environment
        // Parameter to set the name of secret in Jenkins for Azure JSON credentials
        string(defaultValue: 'azure-credentials', description: 'Jenkins secret that contains Azure JSON credentials', name: 'AZURE_CREDENTIALS')
        // File format (take care of brackets in clientId):
        // {
        // "clientId": "{<client-id>}",
        // "clientSecret": "<secret>",
        // "subscriptionId": "<subscription-id>",
        // "tenantId": "<tenant-id>",
        // "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
        // "resourceManagerEndpointUrl": "https://management.azure.com/",
        // "activeDirectoryGraphResourceId": "https://graph.windows.net/",
        // "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
        // "galleryEndpointUrl": "https://gallery.azure.com/",
        // "managementEndpointUrl": "https://management.core.windows.net/"
        // }

        // Parameter to set the tag for selecting Robot test to be run
        string(defaultValue: 'azure', description: 'Tag for selecting Robot test to be run', name: 'ROBOT_RUN_TAG')

        // Configuration of thresholds for Robot tests
        string(defaultValue: '99.0', description: '% passed Robot tests to mark the build as passed', name: 'ROBOT_PASS_THRESHOLD')
        string(defaultValue: '80.0', description: '% passed Robot tests to mark the build as unstable (if lower, it will be failed)', name: 'ROBOT_UNSTABLE_THRESHOLD')
    }
    environment {
        // Azure environment
        CLOUD_TYPE                 = 'azure'
        SOURCE_IMAGE_NAME          = 'Canonical:0001-com-ubuntu-server-jammy:22_04-lts:latest'
        FLAVOR_NAME                = 'Standard_D4as_v4'
        K8S_FLAVOR_NAME            = 'Standard_A2_v2'
        USE_PAAS_K8S               = 'FALSE'
        PRIORITY                   = 'Regular'
        RESOURCE_GROUP             = 'OSM_CICD_GROUP'
        VNET_NAME                  = 'OSM-CICD-net'
        VIM_MGMT_NET               = 'OSM-CICD-subnet'
        VIM_TARGET                 = 'azure-etsi'
        AZURE_FLAVORS_PATTERN      = '^Standard'
        AZURE_REGION               = 'westeurope'
        OSM_VIM_MULTIPLIER_TIMEOUT = '4.0'

    /*
        // Openstack environment
        CLOUD_TYPE                 = 'openstack'
        OS_CLOUD                   = 'etsi-vim-telefonica'
        OS_DOMAIN_NAME             = 'Default'
        VIM_TARGET                 = 'etsi-vim-telefonica'
        VIM_MGMT_NET               = 'osm-ext'
        VIM_EXT_NET                = 'osm-ext'
        OVERRIDES                  = '--override-epa'
        FLAVOR_NAME                = 'osm.sanity'
        SOURCE_IMAGE_NAME          = 'ubuntu22.04'
        SSH_KEY_NAME               = 'niv2020'
        SDNC_USER                  = 'karaf'
        SDNC_PASSWORD              = 'karaf'
        SDNC_URL                   = 'http://172.21.248.11:8181'
        SDNC_TYPE                  = 'onos_vpls'

        // Google Cloud environment
        CLOUD_TYPE                 = 'gcp'
        GCP_PROJECT                = 'telcocloudpocs'
        GCP_ZONE                   = 'europe-west1-b'
        GCP_MACHINE_TYPE           = 'e2-standard-4'
        GCP_DISK_SIZE              = '40'
        GCP_IMAGE_PROJECT          = 'ubuntu-os-cloud'
        GCP_IMAGE_FAMILY           = 'ubuntu-2204-lts'
        VIM_TARGET                 = 'gcp'
        VIM_MGMT_NET               = 'default'
        OSM_VIM_MULTIPLIER_TIMEOUT = '4.0'
    */
    }
    agent {
        docker {
            label 'osm4'
            image "${params.TEST_IMAGE}:${params.TEST_TAG}"
            args "-u root:root --entrypoint=''"
        }
    }
    stages {
        stage('Set environment') {
            steps {
                script {
                    if (params.SSH_PUBLIC_KEY == '') {
                        // Gererate SSH private and public keys
                        sh "mkdir -m 700 ~/.ssh"
                        sh "ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ''"
                    }
                    else {
                        // SSH private and public keys from Jenkins credentials
                        sh "mkdir -m 700 ~/.ssh"
                        withCredentials([file(credentialsId: "${params.SSH_PRIVATE_KEY}", variable: 'SSHPATH')]) {
                            sh "cp ${SSHPATH} ~/.ssh/id_rsa"
                        }
                        withCredentials([file(credentialsId: "${params.SSH_PUBLIC_KEY}", variable: 'SSHPATH')]) {
                            sh "cp ${SSHPATH} ~/.ssh/id_rsa.pub"
                        }
                        sh "chmod 400 ~/.ssh/id_rsa ~/.ssh/id_rsa.pub"
                    }
                    // This file is used by some Robot test (BASIC12)
                    sh "cp ~/.ssh/id_rsa ~/osm_id_rsa"
                    sh "echo Reading credential ${params.AZURE_CREDENTIALS}"
                }
                // Azure credentials
                withCredentials([file(credentialsId: "${params.AZURE_CREDENTIALS}", variable: 'FILE')]) {
                    sh "cp ${FILE} ~/azure-creds.json"
                    sh """
                    set +x; \
                    AZURE_CLIENT_ID=\$(cat ~/azure-creds.json | jq -r .clientId  | sed s/[{}]//g) ; \
                    AZURE_SECRET=\$(cat ~/azure-creds.json | jq -r .clientSecret) ; \
                    AZURE_TENANT=\$(cat ~/azure-creds.json | jq -r .tenantId) ; \
                    az login --service-principal --username \$AZURE_CLIENT_ID --password \$AZURE_SECRET --tenant \$AZURE_TENANT
                    """
                    sh "az vm list -o table"
                }
            }
        }
        stage('Create k8s cluster') {
            steps {
                sh "/robot-systest/cloud-scripts/create-k8s.sh"
                sh "cat /robot-systest/results/k8s_environment.rc"
            }
        }
        stage('Install OSM') {
            steps {
                sh "/robot-systest/cloud-scripts/create-osm-vm.sh"
                sh "cat /robot-systest/results/osm_environment.rc"
                sh ". /robot-systest/results/osm_environment.rc ; /robot-systest/cloud-scripts/remote-install-osm.sh"
            }
        }
        stage('Add VIM and K8s cluster to OSM') {
            steps {
                sh """
                    . /robot-systest/results/osm_environment.rc ; \
                    . /robot-systest/results/k8s_environment.rc ; \
                    osm version ; \
                    set +x; \
                    export AZURE_CLIENT_ID=\$(cat ~/azure-creds.json | jq -r .clientId  | sed s/[{}]//g) ; \
                    export AZURE_SECRET=\$(cat ~/azure-creds.json | jq -r .clientSecret) ; \
                    export AZURE_TENANT=\$(cat ~/azure-creds.json | jq -r .tenantId) ; \
                    export AZURE_SUBSCRIPTION_ID=\$(cat ~/azure-creds.json | jq -r .subscriptionId) ; \
                    /robot-systest/cloud-scripts/add-vim-and-k8scluster.sh
                    """
            }

        }
        stage('Run Robot tests') {
            steps {
                sh """
                    . /robot-systest/results/osm_environment.rc ; \
                    . /robot-systest/results/k8s_environment.rc ; \
                    /robot-systest/run_test.sh -t ${params.ROBOT_RUN_TAG}
                    """
            }
        }
    }
    post {
        always {
            echo "Retrieve container logs"
            sh """
            . /robot-systest/results/osm_environment.rc ; \
            /robot-systest/cloud-scripts/remote-extract-logs.sh
            """

            echo "Save results"
            sh "rm -rf results"
            sh "cp -var /robot-systest/results /robot-systest/reports/* ."
            archiveArtifacts artifacts: 'results/**/*', fingerprint: true

            echo "Updates the Robot dashboard in Jenkins"
            robot outputPath: '.', passThreshold: "${params.ROBOT_PASS_THRESHOLD}", unstableThreshold: "${params.ROBOT_UNSTABLE_THRESHOLD}"

            echo "Destroy the K8s cluster"
            sh '. /robot-systest/results/k8s_environment.rc ; /robot-systest/cloud-scripts/delete-k8s.sh'

            echo "Destroy the OSM host"
            sh '. /robot-systest/results/osm_environment.rc ; /robot-systest/cloud-scripts/delete-osm-vm.sh'
            sh "az vm list -o table"
        }
    }
}

