【问题标题】:Terraform conditions for Output输出的 Terraform 条件
【发布时间】: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+


【解决方案1】:

您只能使用 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) 
      }

对于 name 和 address_prefixes 而不是使用 'each' 您可以使用 count.index 。在 terraform 中 count 不支持 each

【讨论】:

    猜你喜欢
    • 2022-01-11
    • 1970-01-01
    • 2021-06-25
    • 2021-12-18
    • 2021-12-17
    • 2021-09-03
    • 2019-10-08
    • 2020-08-20
    • 2020-04-26
    相关资源
    最近更新 更多