terraform - 如何在 for_loop 中指定条件
问题描述
我如何在 for_each 中使用条件,以便仅当 validation_method == "DNS" else 忽略资源的创建时才创建/触发以下资源。但是在早期的 terraform(11 个版本)中,我们可以使用
计数 = var.validation_method == "DNS" ?长度(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 : {}
...
}
推荐阅读
- angularjs - '{ id: number; 类型的参数 网址:字符串;数据添加:日期;描述:字符串;isMain:布尔值;}' 不可分配给“照片”类型的参数
- c++ - 在字符串 C++ 中的字符之间添加空格
- c# - 在 xamarin 中调整标签的大小
- docker - 无法使用 docker 中的不同端口将 Kibana 连接到 Elasticsearch
- powershell - 获取 ADGroup 特定的 ou
- python - VSCode 中的绝对导入失败
- android - 如何让Android原生音乐播放器在用户中途添加音乐文件时及时扫描
- javascript - 如何找到动态表的第二行并在jquery中更改其值?
- java - 优雅的数字按钮更改我的背景活动
- gradle - 无法避免在 gradle build 中搜索无效依赖项