Как передать переменные из файла jenkins в терраформ - PullRequest
0 голосов
/ 01 августа 2020
• 1000
pipeline {
    agent any
    options {
        skipDefaultCheckout true
    }
    environment {
       TF_VAR_datacenter="${DATA_CENTER}"
       TF_VAR_cluster="${CLUSTER}"
       TF_VAR_esxi="${ESXI}"
       TF_VAR_datastore="${DATASTORE}"
       TF_VAR_network="${NETWORK}"
       TF_VAR_server_hostname="${SERVER_HOSTNAME}"
       TF_VAR_server_mac="${SERVER_MAC}"
    }
    parameters {
        string(name: 'DATA_CENTER', defaultValue: 'xxx', description: 'vcenter data center',)
        string(name: 'CLUSTER', defaultValue: 'xxx', description: 'data center cluster',)
        string(name: 'ESXI', defaultValue: 'xxx', description: 'esxi hostname',)
        string(name: 'DATASTORE', defaultValue: 'xxx', description: 'data center datastore',)
        string(name: 'NETWORK', defaultValue: 'xxx', description: 'data center network',)
        string(name: 'SERVER_HOSTNAME', defaultValue: 'xxx', description: 'server hostname',)
        string(name: 'SERVER_MAC', defaultValue: 'xxx', description: 'server mac',)
        string(name: 'SERVER_IP', defaultValue: 'xxx', description: 'server ip',)
        string(name: 'SERVER_NETMASK', defaultValue: 'xxx', description: 'server netmask',)
        string(name: 'SERVER_GATEWAY', defaultValue: 'xxx', description: 'server gateway',)
        string(name: 'COBBLER_PROFILE', defaultValue: 'xxx', description: 'cobbler profile',)
        choice(name: 'BUILD_DESTROY', description: '', choices: ['build' , 'destroy'])
    }

    stages {
        stage('OS PROVISION') {
            steps {
                dir("/root/terraform"){
                    sh """
                    export TF_VAR_datacenter=${DATA_CENTER}
                    export TF_VAR_cluster=${CLUSTER}
                    export TF_VAR_esxi=${ESXI}
                    export TF_VAR_datastore=${DATASTORE}
                    export TF_VAR_network=${NETWORK}
                    export TF_VAR_server_hostname=${SERVER_HOSTNAME}
                    export TF_VAR_server_mac=${SERVER_MAC}
                    terraform init
                    terraform apply -auto-approve
                    """
                }
            }
        }
    }
    post {
         always {
             echo 'This will always run'
         }

    }
}

1 Ответ

0 голосов
/ 02 августа 2020

Ваш вопрос требует большей ясности, но я собираюсь сделать несколько обоснованных предположений.

с локальными переменными внутри переменной.tf

Вы имеете в виду locals {, или что именно вы подразумеваете под локальными переменными?

передать параметры Jenkins внутри файла terraform variable.tf

Это неправильный файл для ' передать параметры '. *.tf файлы предназначены для объявления переменных. Вероятно, вы просматриваете *.tfvars файлов.

У вас есть 3 варианта с *.tfvars файлами:

  1. файл с точным именем terraform.tfvars
  2. файл с именем <anything>.auto.tfvars
  3. файл с именем <anything>.tfvars, на который вы ссылаетесь с помощью параметра -var-file CLI.

Формат файлов *.tfvars просто: var1_name = var1_value

Вы можете (должны) использовать обычные файлы разметки HCL, списки, карты, ...

...