如何在for_loop中指定条件?

问题描述 投票:0回答:1

如何在for_each中使用条件,只有当validation_method == "DNS "时,才会创建下面的资源,否则将忽略资源的创建。然而在早期的terraform(11版本)中,我们可以使用

count = var.validation_method == "DNS" ? length(var.domain_names) : 0

我的var.domain_names是map(list(string)), eg

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]
}
terraform terraform-provider-aws terraform0.12+
1个回答
2
投票

正如你所指出的,你需要在三元组的两边有一致的类型。由于你使用的是一个 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 : {}
  ...
}
© www.soinside.com 2019 - 2024. All rights reserved.