变量中的地形变量

Faz*_*r87 18 terraform

首先 - 抱歉 - 我对使用 terraform 非常陌生(3 小时后!)。

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

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

变量.tf:

variable "EnvironmentName" {
    type = "string"
}
variable "tags" {
    type = "map"
    default = {
        Environment = "${var.EnvironmentName}"
        CostCentre = "C1234"
        Project = "TerraformTest"
        Department = "Systems"
    }
}
Run Code Online (Sandbox Code Playgroud)

变量-dev.tfvars:

EnvShortName = "Dev"
EnvironmentName = "Development1"
#Location
Location = "westeurope"
Run Code Online (Sandbox Code Playgroud)

主要.tf:

resource “azurerm_resource_group” “TestAppRG” {
    name = “EUW-RGs-${var.EnvShortName}”
    location = “${var.Location}”
    tags = “${var.tags}”
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

错误:variables.tf 第 18 行,在变量
“tags”中不允许使用变量:18:Environment = “${var.EnvironmentName}”
此处不能使用变量。

我知道错误消息是不言自明的,这可能是我的方法错误 - 但是如何在另一个变量映射的定义中使用变量?这甚至可能吗?

我将建立多个资源 - 因此希望将标签构建为地图并将其传递到每个资源中 - 但我还想将地图与其他 tfvars 文件一起回收,以便为不同的团队部署多个实例以进行处理。

pra*_*eep 28

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

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

就像是

locals {
tags = {
        Environment = "${var.EnvironmentName}"
        CostCentre = "C1234"
        Project = "TerraformTest"
        Department = "Systems"
       }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以使用 local.tags

resource “azurerm_resource_group” “TestAppRG” {
    name = “EUW-RGs-${var.EnvShortName}”
    location = “${var.Location}”
    tags = “${local.tags}”
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助


Tim*_*y c 6

您需要使用当地人来进行您想要的转换

\n

变量.tf:

\n
variable "EnvironmentName" {\n    type = "string"\n}\n
Run Code Online (Sandbox Code Playgroud)\n

当地人.tf

\n
locals {\n  tags = {\n      Environment = var.EnvironmentName\n      CostCentre = "C1234"\n      Project = "TerraformTest"\n      Department = "Systems"\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

变量-dev.tfvars:

\n
EnvShortName = "Dev"\nEnvironmentName = "Development1"\n#Location\nLocation = "westeurope"\n
Run Code Online (Sandbox Code Playgroud)\n

主要.tf:

\n
resource \xe2\x80\x9cazurerm_resource_group\xe2\x80\x9d \xe2\x80\x9cTestAppRG\xe2\x80\x9d {\n    name = \xe2\x80\x9cEUW-RGs-${var.EnvShortName}\xe2\x80\x9d\n    location = var.Location\n    tags = local.tags\n}\n
Run Code Online (Sandbox Code Playgroud)\n

您可以执行诸如 `tags = merge(local.tags,{"key"="value"}) 之类的操作来扩展标签。

\n