本文介绍了迭代地图列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试迭代一个简单的映射列表。下面是我的模块代码的一部分:
resource "helm_release" "nginx-external" {
count = var.install_ingress_nginx_chart ? 1 : 0
name = "nginx-external"
repository = "https://kubernetes.github.io/ingress-nginx"
chart = "ingress-nginx"
version = var.nginx_external_version
namespace = "default"
lint = true
values = [
"${file("chart_values/nginx-external.yaml")}"
]
dynamic "set" {
for_each = { for o in var.nginx_external_overrides : o.name => o }
content {
name = each.value.name
value = each.value.value
}
}
}
variable "nginx_external_overrides" {
description = "A map of maps to override customizations from the default chart/values file."
type = any
}
下面是我试图从Terragrun调用它的一个片段:
nginx_external_overrides = [
{ name = "controller.metrics.enabled", value = "false" }
]
尝试在动态挡路中使用此命令时,收到:
Error: each.value cannot be used in this context
A reference to "each.value" has been used in a context in which it
unavailable, such as when the configuration no longer contains the value in
its "for_each" expression. Remove this reference to each.value in your
configuration to work around this error.
理想情况下,我可以在nginx_external_overrides
中传递任意数量的映射来覆盖正在传递的YAML中的设置,但我正在努力做到这一点。谢谢你的帮助。
推荐答案
如果在动态块中使用for_each
,则不能使用each
。相反,在您的情况下,它应该是set
:
dynamic "set" {
for_each = { for o in var.nginx_external_overrides : o.name => o }
content {
name = set.value.name
value = set.value.value
}
}
这篇关于迭代地图列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!