首页 > 解决方案 > Terraform - 根据内部地图的值迭代地图地图

问题描述

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

请在下面找到代码:

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-loopforeachresourcesterraform

解决方案


你的正确形式for_each应该是:

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

这将过滤掉所有带有is_firewallof 的记录false


推荐阅读