【发布时间】:2021-09-20 00:33:14
【问题描述】:
子网名称会因环境是非产品或产品而异。 不能同时使用以下基于 count 和 for_each 的引用错误。
需要两件事之一: 仅当 env 是 prod 时才执行资源块? 如果从资源中找不到值,或者 output.tf 忽略错误。
resource "azurerm_subnet" "subnet" {
count = var.environment == "prd" ? 1 : 0 //execute block only if env is prod
for_each = var.subnet_names
name = join("",["test-","${var.environment}",each.key,"-snet"])
resource_group_name = azurerm_virtual_network.vnet.resource_group_name
virtual_network_name = azurerm_virtual_network.vnet.name
address_prefixes = tolist(each.value)
}
变量.tf
variable "subnet_names" {
description = "subnet names"
default = {}
type = map
}
variable "environment" {
description = "Name of prod environment"
default = "prd"
}
tfvars:
subnet_names = {
"s1-uat" = ["20.0.0.0/27"] ,
"s1-qa" = ["20.0.0.32/27"] ,
"s2-qa" = ["20.0.0.64/27"] ,
"s2-uat" = ["20.0.0.96/27"]
}
environment = "prd"
输出.tf
"s1_subnet_name" {
value = azurerm_subnet.subnet["s1-uat"].name
depends_on = [
azurerm_subnet.subnet
]
}
错误: "count" 和 "for_each" 元参数是互斥的,只有一个 应该用于明确要创建的资源数量。
【问题讨论】:
-
你应该按照
for_each = var.environment == "prd" ? var.subnet_names : {}的方式做一些事情
标签: azure terraform terraform-provider-azure terraform0.12+