如何解决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_each
的正确格式应为:
for_each = {
for key,restr in var.ip_restrictions :
key => restr if restr.is_firewall == "true"
}
这将过滤出is_firewall
中的false
中的所有记录。
由于您的var.ip_restrictions
是地图而不是列表,因此您需要像地图一样迭代(返回键和值)。您遇到的最短的方法:
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"
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。