如何在Terraform中创建动态标签?



我有以下本地文件,其中包含每个环境的资源组名称和标记映射

locals{
identity-rgs = ["prod-dc", "prod-okta", "dev-dc", "dev-okta"]
prod_okta_tags = {
"Key1" = "Value1" 
"Key2" = "Value2" 
"Environment" = "Prod"
"Product" = "Okta"
}
dev_okta_tags = {
"Key1" = "Value1" 
"Key2" = "Value2" 
"Environment" = "Dev"
"Product" = "Okta"
}
dev_dc_tags = {
"Key1" = "Value1" 
"Key2" = "Value2" 
"Environment" = "Dev"
"Product" = "DC"
}
prod_dc_tags = {
"Key1" = "Value1" 
"Key2" = "Value2" 
"Environment" = "Dev"
"Product" = "DC"
}






主要。从我的本地文件中创建一个Azure资源组

resource "azurerm_resource_group" "identity-rgs" {
count    = length(local.ind-identity-rgs)
name     = local.ind-identity-rgs[count.index]
location = ....
tags = 

当我迭代列表时,我如何动态地为每个资源组分配标签?

如identity-rgs[0]应该有prod_dc_tags和identity-rgs[2]应该有dev_dc标签?

我正在尝试if else条件,但无法使其工作

tags = "${local.identity-rgs == "prod-dc" ? local.prod_dc_tags:0}"

条件结果类型不一致││创建资源组。第297行,在资源"azurerm_resource_group"identity-rgs"│297:tags = "${local。Identity-rgs == " product -dc"? local.prod_dc_tags: 0}";│├────────────────││localidentityrgs是一个包含4个元素的元组││本地的。Prod_dc_tags是一个具有10个属性的对象││true和false结果表达式必须具有一致的类型。给出的表达式分别为object和number。

这也可以通过动态块来完成吗?

你这样做是不行的。最简单的方法是重新定义局部变量:

locals{
identity-rgs = ["prod-dc", "prod-okta", "dev-dc", "dev-okta"]
tags = { 
prod_okta = {
"Key1" = "Value1" 
"Key2" = "Value2" 
"Environment" = "Prod"
"Product" = "Okta"
},
dev_okta_tags = {
"Key1" = "Value1" 
"Key2" = "Value2" 
"Environment" = "Dev"
"Product" = "Okta"
},
dev_dc_tags = {
"Key1" = "Value1" 
"Key2" = "Value2" 
"Environment" = "Dev"
"Product" = "DC"
},
prod_dc_tags = {
"Key1" = "Value1" 
"Key2" = "Value2" 
"Environment" = "Dev"
"Product" = "DC"
}
}

然后,对于for_each(它比count好,因为它不依赖于项目的顺序):

resource "azurerm_resource_group" "identity-rgs" {
for_each = toset(local.ind-identity-rgs)
tags = local.tags[each.key]
}

最新更新