Terraform部分远程后端不能包含插值?

时间:2019-04-03 16:33:56

标签: terraform terraform-provider-aws terraform-enterprise

我正在尝试在Jenkins中动态配置Terraform企业工作区。为此,我需要能够在main.tf中动态设置远程后端工作空间名称。像这样:

org.apache.commons.math3.distribution.TDistribution@404b9385

现在,当我跑步时:

# Using a single workspace:
terraform {
  backend "remote" {
    hostname = "app.xxx.xxx.com"
    organization = "YYYY"


    # new workspace variable
    workspaces {
      name = "${var.workspace_name}"
    }
  }
}

我得到:

    terraform init -backend-config="workspace_name=testtest"

我想用Terraform做些什么吗?

2 个答案:

答案 0 :(得分:1)

您不能将任何变量"${var.workspace_name}"或内插值放入后端远程状态存储中。 但是,您可以使用Backend值在旁边创建一个文件,该文件在main.tf文件中看起来像这样:

# Terraform backend State-Sotre
terraform {
  backend "s3" {}
}

,例如dev.backend.tfvars

bucket         = "BUCKET_NAME"

encrypt        = true

key            = "BUCKET_KEY"

dynamodb_table = "DYNAMODB_NAME"

region         = "AWS_REGION"

role_arn       = "IAM_ROLE_ARN"

您也可以使用partial configuration for s3 Backend。 希望会有所帮助。

答案 1 :(得分:0)

嘿,我找到了执行此操作的正确方法:

虽然语法有些棘手,但远程后端支持部分后端初始化。这意味着该配置可以包含如下所示的后端块:

terraform {
  backend "remote" { }
}

然后可以使用这样的动态设置的后端配置初始化Terraform(用适当的值替换ORG和WORKSPACE):

terraform init -backend-config "organization=ORG" -backend-config 'workspaces=[{name="WORKSPACE"}]'