首先-道歉-我对使用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文件一起回收地图,以部署多个实例供不同团队使用
答案 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}”
}
希望这会有所帮助