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_firewall
共 false
的所有记录。
由于您的 var.ip_restrictions
是 map 而不是 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"
}
我正在尝试根据地图内部地图的值创建资源。 如果该特定值为真,则创建资源
请在下面找到代码:
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_firewall
共 false
的所有记录。
由于您的 var.ip_restrictions
是 map 而不是 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"
}