如何在 Azure DevOps/VSTS 的 Terraform 文件中引用变量
How to reference a variable in Terraform file for Azure DevOps/VSTS
我创建了一个简单的管道。带有 Azure DevOps Build 管道的 Github 存储库。
我在 Github 私有存储库中的 ax.tf 文件中定义了下面提到的变量:
ARM_CLIENT_ID
ARM_CLIENT_SECRET
ARM_SUBSCRIPTION_ID
ARM_TENANT_ID
构建管道有一个简单的命令行作业,如下所示:
sudo apt install wget
wget https://releases.hashicorp.com/terraform/0.11.11/terraform_0.11.11_linux_amd64.zip
sudo apt-get install unzip
unzip terraform_0.11.11_linux_amd64.zip
terraform init
terraform plan -var-file=terraform.tfvars -out=ax.plan
terraform apply ax.plan
terraform destroy -auto-approve
我想知道如何在 Terraform ax.tf 文件中引用这些构建变量?
我按照 Azure DevOps 文档做了类似下面的操作,但它不起作用:
variable "ARM_SUBSCRIPTION_ID" {
default="$(Build.ARM_SUBSCRIPTION_ID)"
}
不幸的是,它没有按预期工作,它在以下执行级别停止:
[0m[1m[32mTerraform has been successfully initialized![0m[32m[0m
[0m[32m
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.[0m
[0m[1mvar.ARM_CLIENT_ID[0m
如有任何帮助,我们将不胜感激。
谢谢。
根据 Terraform documentation,您必须创建名为 TF_VAR_x
的环境变量,以便 Terraform 自动获取它们。因此,在您的构建定义中,创建一个名为 TF_VAR_ARM_SUBSCRIPTION_ID
的变量。非机密构建变量会自动转换为环境变量。
另一种选择是通过在命令行
上指定-var 'ARM_SUBSCRIPTIONID=$(ARM_SUBSCRIPTION_ID)'
将变量值传递给 Terraform 脚本
我所做的是我有一个 terraform.tfvars 文件,其中包含引用 Azure DevOps 变量的值,例如
tenant = "${tenantId}"
environment = "${environmentName}"
location = "${resourceLocation}"
resource_group_name = "${resourceGroup}"
然后是一个 Replace Tokens 任务来替换此文件中的 AzDo 变量,它由 TF 自动获取(我将语法从 __ 更改为 ${},我更喜欢那样)
我创建了一个简单的管道。带有 Azure DevOps Build 管道的 Github 存储库。
我在 Github 私有存储库中的 ax.tf 文件中定义了下面提到的变量:
ARM_CLIENT_ID
ARM_CLIENT_SECRET
ARM_SUBSCRIPTION_ID
ARM_TENANT_ID
构建管道有一个简单的命令行作业,如下所示:
sudo apt install wget
wget https://releases.hashicorp.com/terraform/0.11.11/terraform_0.11.11_linux_amd64.zip
sudo apt-get install unzip
unzip terraform_0.11.11_linux_amd64.zip
terraform init
terraform plan -var-file=terraform.tfvars -out=ax.plan
terraform apply ax.plan
terraform destroy -auto-approve
我想知道如何在 Terraform ax.tf 文件中引用这些构建变量?
我按照 Azure DevOps 文档做了类似下面的操作,但它不起作用:
variable "ARM_SUBSCRIPTION_ID" {
default="$(Build.ARM_SUBSCRIPTION_ID)"
}
不幸的是,它没有按预期工作,它在以下执行级别停止:
[0m[1m[32mTerraform has been successfully initialized![0m[32m[0m
[0m[32m
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.[0m
[0m[1mvar.ARM_CLIENT_ID[0m
如有任何帮助,我们将不胜感激。
谢谢。
根据 Terraform documentation,您必须创建名为 TF_VAR_x
的环境变量,以便 Terraform 自动获取它们。因此,在您的构建定义中,创建一个名为 TF_VAR_ARM_SUBSCRIPTION_ID
的变量。非机密构建变量会自动转换为环境变量。
另一种选择是通过在命令行
上指定-var 'ARM_SUBSCRIPTIONID=$(ARM_SUBSCRIPTION_ID)'
将变量值传递给 Terraform 脚本
我所做的是我有一个 terraform.tfvars 文件,其中包含引用 Azure DevOps 变量的值,例如
tenant = "${tenantId}"
environment = "${environmentName}"
location = "${resourceLocation}"
resource_group_name = "${resourceGroup}"
然后是一个 Replace Tokens 任务来替换此文件中的 AzDo 变量,它由 TF 自动获取(我将语法从 __ 更改为 ${},我更喜欢那样)