import hudson.plugins.ec2.AmazonEC2Cloud

def latestAmi

pipeline {
  agent {
    label 'linux-agents'
  }

  options {
    ansiColor('xterm')
    disableConcurrentBuilds()
  }

  environment {
    AWS_PROFILE = 'gdb-infra-dev'
  }

  stages {
    stage('Validate') {
      steps {
        sh "cd \"${env.WORKSPACE}/Jenkins/packer/linux-agent-ansible/\" && make validate/common"
      } /* end: steps */
    } /* end: stage */

    stage('Build') {
      steps {
        sh "ansible-galaxy collection install ansible.posix:2.1.0"
        sh "cd \"${env.WORKSPACE}/Jenkins/packer/linux-agent-ansible/\" && make build/common"
      } /* end: steps */
    } /* end: stage */

    stage('Get latest AMI') {
      steps {
        script {
          latestAmi = sh(script: """
            aws ec2 describe-images \
              --owners self \
              --filters "Name=tag:platform,Values=Delphi" \
                        "Name=tag:environment,Values=Common" \
                        "Name=tag:type,Values=common" \
              --query 'sort_by(Images, &CreationDate)[-1].[ImageId]' \
              --output text \
              --region us-east-1
          """, returnStdout: true).trim()
        } /* end: script */
      } /* end: steps */
    } /* end: stage */

    stage('Update cloud settings') {
      steps {
        script {
          def instance = Jenkins.getInstance()
          def clouds = instance.clouds
          clouds.each { cloud ->
            if (cloud instanceof AmazonEC2Cloud) {
              cloud.templates.each { template ->
                if (template.description.startsWith('Common')) {
                  template.ami = latestAmi
                } /* end: if */
              } /* end: each */
            } /* end: if */
          } /* end: each */
          instance.save()
        } /* end: script */
      } /* end: steps */
    } /*end: stage */
  } /* end: stages */
} /* end: pipeline */
