gpt4 book ai didi

azure - 输出的 Terraform 条件

转载 作者:行者123 更新时间:2023-12-03 04:56:29 27 4
gpt4 key购买 nike

子网名称将根据 env 是非产品还是产品而有所不同。无法同时使用 count 和 for_each 基于下面的引用错误。

需要两件事之一:仅当 env 是 prod 时才执行资源 block ?或者如果未从资源中找到值,则使用 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"
}

tfvar:

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”元参数是互斥的,只有一个应该用于明确要创建的资源数量。

最佳答案

您只能使用 count 或 for_each。所以你可以试试这个:

resource "azurerm_subnet" "subnet" {
count = var.environment == "prd" ? length(var.subnet_names) : 0
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)
}

对于名称和地址前缀,您可以使用 count.index 而不是使用 'each' 。在 terraform 中 count 不支持 each

关于azure - 输出的 Terraform 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68320311/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com