#!/usr/bin/env groovy

pipeline {
    agent any

    environment {
        VM_IP_CP = "root@192.168.122.150"
    }


    stages {
        stage ('Start') {
            steps {
                slackSend(
                channel: 'storage-ci-pipeline',
                color: '#FFFF00',
                message: "STARTED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.RUN_DISPLAY_URL})",
                teamDomain: 'onapp',
                tokenCredentialId: 'slack-token'
                )
            }
        }
        stage ('Artifactory configuration') {
            steps {
                rtServer (
                    id: 'Artifactory-1',
                    url: 'http://69.168.226.70:8081/artifactory',
                    username: 'admin',
                    password: '01agW*DjAuir',
                    bypassProxy: false
                )
            }
        }
        stage('create build VM`s') {
            steps {
                sh "cp /var/lib/libvirt/images/base/rpmbuild-cidata.iso /var/lib/libvirt/images/rpmbuild/rpmbuild-${env.BUILD_NUMBER}-cidata.iso"
                sh "cp /var/lib/libvirt/images/base/rpmbuild-cidata.iso /var/lib/libvirt/images/rpmbuild/ramdiskbuild-${env.BUILD_NUMBER}-cidata.iso"
                sh "cp /var/lib/libvirt/images/base/rpmbuild-cidata.iso /var/lib/libvirt/images/rpmbuild/ramdiskbuild6-${env.BUILD_NUMBER}-cidata.iso"
                sh "qemu-img create -f qcow2 -o backing_file=/var/lib/libvirt/images/base/rpmbuilddiskbase.qcow2 /var/lib/libvirt/images/rpmbuild/rpmbuild-${env.BUILD_NUMBER}.qcow2"
                sh "qemu-img create -f qcow2 -o backing_file=/var/lib/libvirt/images/base/centos7.qcow2 /var/lib/libvirt/images/rpmbuild/ramdiskbuild-${env.BUILD_NUMBER}.qcow2"
                sh "qemu-img create -f qcow2 -o backing_file=/var/lib/libvirt/images/base/centos6.qcow2 /var/lib/libvirt/images/rpmbuild/ramdiskbuild6-${env.BUILD_NUMBER}.qcow2"
                sh "virt-install --connect qemu:///system --virt-type kvm --name rpmbuild-${env.BUILD_NUMBER} --ram 2048 --vcpus=2 --os-type linux --os-variant ubuntu14.04 --disk path=/var/lib/libvirt/images/rpmbuild/rpmbuild-${env.BUILD_NUMBER}.qcow2,format=qcow2 --disk /var/lib/libvirt/images/rpmbuild/rpmbuild-${env.BUILD_NUMBER}-cidata.iso,device=cdrom --import --network network=default --noautoconsole"
                sh "virt-install --connect qemu:///system --virt-type kvm --name ramdiskbuild-${env.BUILD_NUMBER} --ram 2048 --vcpus=2 --os-type linux --os-variant rhel7 --disk path=/var/lib/libvirt/images/rpmbuild/ramdiskbuild-${env.BUILD_NUMBER}.qcow2,format=qcow2 --disk /var/lib/libvirt/images/rpmbuild/ramdiskbuild-${env.BUILD_NUMBER}-cidata.iso,device=cdrom --import --network network=default --noautoconsole"
                sh "virt-install --connect qemu:///system --virt-type kvm --name ramdiskbuild6-${env.BUILD_NUMBER} --ram 2048 --vcpus=2 --os-type linux --os-variant rhel6 --disk path=/var/lib/libvirt/images/rpmbuild/ramdiskbuild6-${env.BUILD_NUMBER}.qcow2,format=qcow2 --disk /var/lib/libvirt/images/rpmbuild/ramdiskbuild6-${env.BUILD_NUMBER}-cidata.iso,device=cdrom --import --network network=default --noautoconsole"
            }
        }
        stage('build rpm at VM') {
            environment {
                VM_IP_ADDRESS = sh (script: "/home/scripts/getvmip.py rpmbuild-${env.BUILD_NUMBER} 60", returnStdout: true).trim()
                VM_IP_CP = "root@192.168.122.150"
            }
            steps {
                sh "sleep 5" // wait till VM up ssh service
                sh 'ssh -o StrictHostKeyChecking=no root@$VM_IP_ADDRESS "cd /root/build/; git clone git@bitbucket.org:onappcore/rdbuild.git"'

                catchError(buildResult: 'SUCCESS', stageResult: 'SUCCESS') {
                    sh 'ssh -o StrictHostKeyChecking=no root@$VM_IP_ADDRESS "cd /root/build/rdbuild;  git checkout $BRANCH_NAME"'
                }
                sh 'ssh -o StrictHostKeyChecking=no root@$VM_IP_ADDRESS "cd /root/build/rdbuild; BRANCH=$BRANCH_NAME BASE_BRANCH=master VERSION=6.3 ./autobuild.sh"'
                sh 'scp -o StrictHostKeyChecking=no root@$VM_IP_ADDRESS:/root/build/rdbuild/lastbuild /home/builds/'
                sh 'scp -o StrictHostKeyChecking=no root@$VM_IP_ADDRESS:`head -1 /home/builds/lastbuild` /home/builds/storage.rpm'
                sh 'scp -o StrictHostKeyChecking=no root@$VM_IP_ADDRESS:`sed "3q;d" /home/builds/lastbuild` /home/builds/'
            }
        }
        stage ('Upload RPM') {
            environment {
                BUILD_NAME = sh (script: "bash -c /var/lib/jenkins/get_build_name", returnStdout: true).trim()
                }
            steps {
                rtUpload (
                    serverId: 'Artifactory-1',
                    spec: '''{
                        "files": [
                            {
                                "pattern": "/home/builds/storage.rpm",
                                "target": "storage-repo/$BUILD_NAME"
                            }
                        ]
                     }''',


                    buildName: 'onappstore'
                )

            }
        }
        stage ('Upload Manifest') {
            environment {
                BUILD_MANIFEST = sh (script: "bash -c /var/lib/jenkins/get_storage_manifest", returnStdout: true).trim()
                }
            steps {
                rtUpload (
                    serverId: 'Artifactory-1',
                    spec: '''{
                        "files": [
                            {
                                "pattern": "/home/builds/$BUILD_MANIFEST",
                                "target": "storage-manifest/$BUILD_MANIFEST"
                            }
                        ]
                     }''',


                    buildName: 'onappstore-manifest'
                )
            }
        }
        stage('build ramdisk`s') {
            parallel {
                stage('build ramdisk`s centos7 at VM') {
                    environment {
                        RAMDISK_VM_IP_ADDRESS = sh (script: "/home/scripts/getvmip.py ramdiskbuild-${env.BUILD_NUMBER} 60", returnStdout: true).trim()
                    }
                    steps {
                        sh 'ssh -o StrictHostKeyChecking=no root@$RAMDISK_VM_IP_ADDRESS "yum update -y"'
                        sh 'ssh -o StrictHostKeyChecking=no root@$RAMDISK_VM_IP_ADDRESS "mkdir /root/build/; cd /root/build/; git clone git@bitbucket.org:onappcore/ramdisk-hv.git"'
                        catchError(buildResult: 'SUCCESS', stageResult: 'SUCCESS') {
                            sh 'ssh -o StrictHostKeyChecking=no root@$RAMDISK_VM_IP_ADDRESS "cd /root/build/ramdisk-hv;  git checkout $BRANCH_NAME"'
                        }
                        sh 'scp -o StrictHostKeyChecking=no /home/builds/storage.rpm root@$RAMDISK_VM_IP_ADDRESS:/root/storage.rpm'
                        sh 'ssh -o StrictHostKeyChecking=no root@$RAMDISK_VM_IP_ADDRESS "cd /root/build/ramdisk-hv/builder/; ONAPPSTOREFILE=/root/storage.rpm BK_TOOLS_VERSION=6.1.0-4 HV_TOOLS_BRANCH=master MESSAGING_BRANCH=6.0.0-4 CENTOS5_XEN=no CENTOS6_XEN=no CENTOS6_KVM=no CENTOS7_KVM=yes CENTOS7_DEFAULT=no CENTOS7_XEN=no  ./release.sh && ./dev-update-cp-servers.sh 192.168.122.150"'
                        sh 'scp -o StrictHostKeyChecking=no root@$RAMDISK_VM_IP_ADDRESS:/root/build/ramdisk-hv/builder/output.tgz /home/builds/'
                    }
                }
                stage('build ramdisk`s centos6 at VM') {
                    environment {
                        RAMDISK_VM_IP_ADDRESS = sh (script: "/home/scripts/getvmip.py ramdiskbuild6-${env.BUILD_NUMBER} 60", returnStdout: true).trim()
                    }
                    steps {
                        sh 'ssh -o StrictHostKeyChecking=no root@$RAMDISK_VM_IP_ADDRESS "yum update -y"'
                        sh 'ssh -o StrictHostKeyChecking=no root@$RAMDISK_VM_IP_ADDRESS "mkdir /root/build/; cd /root/build/; git clone git@bitbucket.org:onappcore/ramdisk-hv.git"'
                        catchError(buildResult: 'SUCCESS', stageResult: 'SUCCESS') {
                            sh 'ssh -o StrictHostKeyChecking=no root@$RAMDISK_VM_IP_ADDRESS "cd /root/build/ramdisk-hv;  git checkout $BRANCH_NAME"'
                        }
                        sh 'scp -o StrictHostKeyChecking=no /home/builds/storage.rpm root@$RAMDISK_VM_IP_ADDRESS:/root/storage.rpm'
                        sh 'ssh -o StrictHostKeyChecking=no root@$RAMDISK_VM_IP_ADDRESS "cd /root/build/ramdisk-hv/builder/; ONAPPSTOREFILE=/root/storage.rpm BK_TOOLS_VERSION=6.1.0-4 HV_TOOLS_BRANCH=master MESSAGING_BRANCH=6.0.0-4 CENTOS5_XEN=no CENTOS6_XEN=yes CENTOS6_KVM=yes CENTOS7_KVM=no CENTOS7_DEFAULT=no CENTOS7_XEN=no  ./release.sh"'
                    }
                }
            }
        }
        stage ('Upload Ramdisk') {
            environment {
                BUILD_NAME = sh (script: "bash -c /var/lib/jenkins/get_build_name", returnStdout: true).trim()
                }
            steps {
                rtUpload (
                    serverId: 'Artifactory-1',
                    spec: '''{
                        "files": [
                            {
                                "pattern": "/home/builds/output.tgz",
                                "target": "storage-ramdisk/$BUILD_NAME.tgz"
                            }
                        ]
                     }''',


                    buildName: 'onappstore-ramdisk'
                )
            }
        }
        stage ('Customize') {
            steps {
               sh 'ssh -o StrictHostKeyChecking=no $VM_IP_CP "/onapp/onapp-store-install/files/ramdisks-customize.sh -N"'
               sh 'ssh -o StrictHostKeyChecking=no $VM_IP_CP "cd /home/storage-ci-pipeline/Onapp_API; python reboot_hvs.py"'
            }
        }
        stage ('Smoketest') {
            environment {
                TEST_ID = sh (script: "ssh -o StrictHostKeyChecking=no $VM_IP_CP date '+%Y-%m-%d_%H:%M:%S' ", returnStdout: true).trim()
            }
            steps {
                sh 'ssh -o StrictHostKeyChecking=no $VM_IP_CP "cd /home/storage-ci-pipeline/services; python wait-for-san.py channel=224.3.28.4"'
                sh 'ssh -o StrictHostKeyChecking=no $VM_IP_CP "cd /home/autotest/onappstoretests; ./testcontroller id=$TEST_ID hvs=192.168.10.10,192.168.10.12 seqdir=./seqs outdir=/home/autotest/testlogs-new members=4 replicas=2 stripes=2 seq=smoketest assert=false clean=true"'
                sh 'ssh -o StrictHostKeyChecking=no $VM_IP_CP ls /home/autotest/testlogs-new/$TEST_ID/status-PASS'
            }
        }
    }
    post {
        success {
           slackSend(
           channel: 'storage-ci-pipeline',
           color: '#00FF00',
           message: "SUCCESSFUL: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.RUN_DISPLAY_URL})",
           teamDomain: 'onapp',
           tokenCredentialId: 'slack-token'
            )
        }
        failure {
           slackSend(
           channel: 'storage-ci-pipeline',
           color: '#FF0000',
           message: "FAILED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.RUN_DISPLAY_URL})",
           teamDomain: 'onapp',
           tokenCredentialId: 'slack-token'
            )
        }
        cleanup {
            sh "echo clean up build VMs"
            sh "virsh destroy rpmbuild-${env.BUILD_NUMBER}"
            sh "virsh undefine rpmbuild-${env.BUILD_NUMBER}"
            sh "rm -f /var/lib/libvirt/images/rpmbuild/rpmbuild-${env.BUILD_NUMBER}.qcow2"
            sh "rm -f /var/lib/libvirt/images/rpmbuild/rpmbuild-${env.BUILD_NUMBER}-cidata.iso"
            sh "virsh destroy ramdiskbuild-${env.BUILD_NUMBER}"
            sh "virsh undefine ramdiskbuild-${env.BUILD_NUMBER}"
            sh "rm -f /var/lib/libvirt/images/rpmbuild/ramdiskbuild-${env.BUILD_NUMBER}.qcow2"
            sh "rm -f /var/lib/libvirt/images/rpmbuild/ramdiskbuild-${env.BUILD_NUMBER}-cidata.iso"
            sh "virsh destroy ramdiskbuild6-${env.BUILD_NUMBER}"
            sh "virsh undefine ramdiskbuild6-${env.BUILD_NUMBER}"
            sh "rm -f /var/lib/libvirt/images/rpmbuild/ramdiskbuild6-${env.BUILD_NUMBER}.qcow2"
            sh "rm -f /var/lib/libvirt/images/rpmbuild/ramdiskbuild6-${env.BUILD_NUMBER}-cidata.iso"
            sh "echo clean up build VMs done"
        }
    }
}
