【问题标题】:Iterate over list of maps遍历地图列表
【发布时间】:2022-01-13 20:04:36
【问题描述】:

我正在尝试遍历一个简单的地图列表。这是我的模块代码的一部分:

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
}

这是我如何尝试从 terragrunt 调用它的 sn-p:

  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 中的设置,但我正在努力这样做。感谢您的帮助。

【问题讨论】:

    标签: terraform


    【解决方案1】:

    如果您在动态块中使用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
        }
      }
    

    【讨论】:

    • 谢谢 Marcin - 这正是我的问题。欣赏!
    猜你喜欢
    • 2020-05-18
    • 2022-01-23
    • 1970-01-01
    • 2019-08-24
    • 2017-07-23
    • 2012-04-21
    • 2020-01-25
    • 1970-01-01
    相关资源
    最近更新 更多