迭代地图列表 [英] Iterate over list of maps

查看:17
本文介绍了迭代地图列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试迭代一个简单的映射列表。下面是我的模块代码的一部分:

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
    }
  }

这篇关于迭代地图列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆