如何在 for_loop 中指定条件
How to specify a condition inside a for_loop
我如何在 for_each 中使用条件,使得下面的资源仅在 validation_method == "DNS" 时才为 created/triggered 否则忽略创建资源。但是在早期的 Terraform(11 个版本)中我们可以使用
count = var.validation_method == "DNS" ? length(var.domain_names) : 0
我的 var.domain_names 是 map(list(string)) ,例如
domain_names = {
"foo.com" = ["*.foo.com"]
}
请给我一些解决方案。使用 terraform 0.12.20 版本
resource "aws_route53_record" "validation" {
for_each = var.validation_method == "DNS" ? var.domain_names :
name = aws_acm_certificate.certificate[each.key].domain_validation_options.0.resource_record_name
type = aws_acm_certificate.certificate[each.key].domain_validation_options.0.resource_record_type
zone_id = data.aws_route53_zone.selected[each.key].zone_id
ttl = "300"
records = [aws_acm_certificate.certificate.domain_validation_options.0.resource_record_value]
depends_on = [aws_acm_certificate.certificate.domain_name]
}
如您所述,您需要在三元组的两边具有一致的类型。由于您使用的是 map(list(string))
右侧,为了不创建资源,需要是一个空映射:{}
.
variable "domain_names" {
type = map(list(string))
default = {
"foo.com" = ["*.foo.com"]
}
}
resource "aws_route53_record" "validation" {
for_each = var.validation_method == "DNS" ? var.domain_names : {}
...
}
我如何在 for_each 中使用条件,使得下面的资源仅在 validation_method == "DNS" 时才为 created/triggered 否则忽略创建资源。但是在早期的 Terraform(11 个版本)中我们可以使用
count = var.validation_method == "DNS" ? length(var.domain_names) : 0
我的 var.domain_names 是 map(list(string)) ,例如
domain_names = {
"foo.com" = ["*.foo.com"]
}
请给我一些解决方案。使用 terraform 0.12.20 版本
resource "aws_route53_record" "validation" {
for_each = var.validation_method == "DNS" ? var.domain_names :
name = aws_acm_certificate.certificate[each.key].domain_validation_options.0.resource_record_name
type = aws_acm_certificate.certificate[each.key].domain_validation_options.0.resource_record_type
zone_id = data.aws_route53_zone.selected[each.key].zone_id
ttl = "300"
records = [aws_acm_certificate.certificate.domain_validation_options.0.resource_record_value]
depends_on = [aws_acm_certificate.certificate.domain_name]
}
如您所述,您需要在三元组的两边具有一致的类型。由于您使用的是 map(list(string))
右侧,为了不创建资源,需要是一个空映射:{}
.
variable "domain_names" {
type = map(list(string))
default = {
"foo.com" = ["*.foo.com"]
}
}
resource "aws_route53_record" "validation" {
for_each = var.validation_method == "DNS" ? var.domain_names : {}
...
}