[英]Terraform: Local list of maps iteration with for_each and conditionals
我想在一个变量中定义一个映射列表,这样我就可以在多个资源上使用for_each ,并根据键值进行条件判断。
例如,我有这个locals.tf文件,我在其中定义了地图列表
locals {
networking = [
{
name = "first"
domain = "first.${local.dns_name}"
port = 8080
group = "eighties"
},
{
name = "second"
domain = "second.${local.dns_name}"
port = 8081
group = "eighties"
},
{
name = "third"
domain = "third.${local.dns_name}"
port = 9090
group = "nineties"
},
{
name = "fourth"
port = 9091
group = "nineties"
}
]
}
在我的其他文件中,我可以使用for_each和for参数循环遍历地图列表:
resource "google_dns_record_set" "dns_records" {
for_each = {
for k in local.networking: k.domain => k
if k.domain != null
}
name = each.value.domain
type = "A"
ttl = 300
managed_zone = var.managed_zone
project = var.dns_project
rrdatas = [google_compute_global_address.default-forwarding-address.address]
}
鉴于此设置,我可能会讨论两种不同的情况:
如果第四张地图中不存在域,是否可以跳过资源创建? 或者干脆跳过错误。
Error: Unsupported attribute on dns-record.tf line 4, in resource "google_dns_record_set" "dns_records": 4: if k.domain.= null This object does not have an attribute named "domain".
k.group == "eighties"
这样我可以针对特定组,我会收到此重复错误。 Two different items produced the key "eighties" in this 'for' expression. If duplicates are expected, use the ellipsis (...) after the value expression to enable grouping by key.
这个错误是否可以通过当前设置进行管理,或者我应该放弃地图列表的想法?
您可以检查domain
是否存在,如下所示:
{
for k in local.networking: k.domain => k
if contains(keys(k), "domain")
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.