pipeline {
    agent {
        label 'master'
    }
    environment {
        CreateOva = "Yes"
        URL_TO_CLI_WITH_AUU     = "http://192.168.110.5/ova/cli_with_aUU/${cli_url}"
        VM_HOST_SERVER_PWD      = '!Only4alabs'
        OVA_VM_NAME             = 'ACO-PROD'
        OVA_VM_ID_AND_HOST      = sh(
                                            returnStdout: true,
                                            script: "/root/ova_server_build_resources/common/scripts/get_ova_vm_id_host.sh '${OVA_VM_NAME} ' '${VM_HOST_SERVER_PWD}'"
                                    ).trim()
        OVA_VM_HOST_SERVER_NAME = sh(
                                            returnStdout: true,
                                            script: "echo '${OVA_VM_ID_AND_HOST}' | awk '{print \$2}'"
                                    ).trim()
        OVA_VM_ID               = sh(
                                            returnStdout: true,
                                            script: "echo '${OVA_VM_ID_AND_HOST}' | awk '{print \$1}'"
                                    ).trim()
        OVA_SERVER_IP           = '192.168.110.69'

    }
    stages {

        stage('Boot OVA servers') {
            when {
                expression {
                    return "${CreateOva}" == 'Yes';
                }
            }
            steps {
                echo 'Turning on the OVA server.'
                sh "/root/ova_server_build_resources/aco/turn_ova_on.sh $OVA_VM_HOST_SERVER_NAME $OVA_VM_ID"

                echo 'Waiting for the OVA server to boot.'
                sh "/root/ova_server_build_resources/common/scripts/wait_for_server_network.sh $OVA_SERVER_IP 120"
            }
        }

        stage('ACO - OVA Update CLI + ACO') {
            when {
                expression {
                    return "${CreateOva}" == 'Yes';
                }
            }
            steps {
                echo "Server: $OVA_SERVER_IP "
                sh "/root/ova_server_build_resources/aco/install_cli_aco_main.sh  $cli_first $cli_url $aco_url $OVA_SERVER_IP"
            }
        }

        stage('Clean Encryption Key') {
            when {
                expression {
                    return "${CreateOva}" == 'Yes';
                }
            }
            steps {
                echo 'Turning off the OVA server'
                sh "/root/ova_server_build_resources/aco/clean_key.sh $OVA_VM_HOST_SERVER_NAME $OVA_VM_ID"

                echo 'Waiting for the OVA server to shutdown.'
                sleep 60
            }
        }

        stage('Shutdown OVA server') {
            when {
                expression {
                    return "${CreateOva}" == 'Yes';
                }
            }
            steps {
                echo 'Turning off the OVA server'
                sh "/root/ova_server_build_resources/aco/turn_ova_off.sh $OVA_VM_HOST_SERVER_NAME $OVA_VM_ID"

                echo 'Waiting for the OVA server to shutdown.'
                sleep 60
            }
        }
        stage('Create OVA File') {
            when {
                expression {
                    return "${CreateOva}" == 'Yes';
                }
            }
            steps {
                createOvaFile()
            }
        }
    }
    post {
        success {
            echo 'Successful Build'
        }
    }
}


def createOvaFile() {
    echo 'Converting the OVA server into an OVA'
    sh '/root/ovftool/ovftool --noNvramFile --machineOutput --noSSLVerify --shaAlgorithm=sha1 --eula@=/root/ova_server_build_resources/EULA.txt vi://root:"${VM_HOST_SERVER_PWD}"@"${OVA_VM_HOST_SERVER_NAME}"/${OVA_VM_NAME} /tmp/aco-${server_version}-${web_version}.ova'
    sh 'chmod 775 /tmp/aco-${server_version}-${web_version}.ova'
    sh 'AWS_CONFIG_FILE=/root/.aws/config aws s3 cp /tmp/aco-${server_version}-${web_version}.ova s3://akkadianlabs-builds/aco_ovas/aco-${server_version}-${web_version}.ova --acl private'
    sh 'rm -Rf /tmp/aco-${server_version}-${web_version}.ova'
}
