变量内的地形变量

时间:2019-11-13 16:04:35

标签: terraform

首先-道歉-我对使用Terraform非常陌生(3个小时!)。

我正在尝试尝试在另一个变量的声明中使用变量的值。

下面是我的代码-我在做什么错了?

variables.tf:

variable "EnvironmentName" {
    type = "string"
}
variable "tags" {
    type = "map"
    default = {
        Environment = "${var.EnvironmentName}"
        CostCentre = "C1234"
        Project = "TerraformTest"
        Department = "Systems"
    }
}

Variables-dev.tfvars:

EnvShortName = "Dev"
EnvironmentName = "Development1"
#Location
Location = "westeurope"

main.tf:

resource “azurerm_resource_group” “TestAppRG” {
    name = “EUW-RGs-${var.EnvShortName}”
    location = “${var.Location}”
    tags = “${var.tags}”
}

我遇到以下错误:

  

错误:variables.tf第18行的变量中不允许使用变量
  “标签”:18:环境=“ $ {var.EnvironmentName}”
  此处可能不使用变量。

我知道错误消息很容易解释,很可能是我的方法是错误的-但是如何在另一个变量映射的定义中使用变量?这有可能吗?

我将站着多个资源-因此希望将标记构建为地图并传递到每个资源中-但我也想与其他tfvars文件一起回收地图,以部署多个实例供不同团队使用

1 个答案:

答案 0 :(得分:2)

Terraform不支持​​变量内的变量。 如果要基于两个或多个变量生成值,则可以尝试使用Terraform Locals(https://www.terraform.io/docs/configuration/locals.html)。

本地人应该在这里帮助您实现目标。

类似

locals {
tags = {
        Environment = "${var.EnvironmentName}"
        CostCentre = "C1234"
        Project = "TerraformTest"
        Department = "Systems"
       }
}

然后您可以用作local.tags

resource “azurerm_resource_group” “TestAppRG” {
    name = “EUW-RGs-${var.EnvShortName}”
    location = “${var.Location}”
    tags = “${local.tags}”
}

希望这会有所帮助