Terraform - 根据内部地图的值遍历地图地图

Terraform - Iterate through map of maps depending on value of internal map

我正在尝试根据地图内部地图的值创建资源。 如果该特定值为真,则创建资源

请在下面找到代码:

variable "ip_restrictions" {
  type        = map(map(string))
  default = {
    test01 = {
      name                      = "test01"
      start_ip_address          = "0.0.0.0"
      end_ip_address            = "0.0.0.0"
      is_firewall               = false
    },
    test02 = {
      name                      = "test02"
      start_ip_address          = "0.0.0.0"
      end_ip_address            = "0.0.0.0"
      is_firewall               = true
    }
  }
}

resource "azurerm_sql_firewall_rule" "sql_firewall_rules" {
  for_each = {
    for restr in var.ip_restrictions :
    restr => restr
    if restr.is_firewall == true
  }
  
  name                = each.value.name
  resource_group_name = azurerm_resource_group.rg.name
  server_name         = azurerm_sql_server.sqls.name
  start_ip_address    = each.value.start_ip_address
  end_ip_address      = each.value.end_ip_address
}

for_each 的正确形式应该是:

  for_each = {
    for key, restr in var.ip_restrictions :
      key => restr if restr.is_firewall == "true"
  }

这将过滤掉 is_firewallfalse 的所有记录。

由于您的 var.ip_restrictionsmap 而不是 list,因此您需要像映射一样遍历它(返回一个键和值)。您所处情况的最短路径:

for_each = {
  for key, restr in var.ip_restrictions :
    key => restr if restr.is_firewall
}

给出:

"test02" = {
  "end_ip_address"   = "0.0.0.0"
  "is_firewall"      = "true"
  "name"             = "test02"
  "start_ip_address" = "0.0.0.0"
}