首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >terraform如何迭代具有不同值的对象映射

terraform如何迭代具有不同值的对象映射
EN

Stack Overflow用户
提问于 2022-02-15 00:24:13
回答 1查看 2.9K关注 0票数 1

我有以下具有不同值的本地值。我试图在一个动态块中遍历以下映射:

代码语言:javascript
复制
local {
  toleration = {
    0 = {
      key    = "node-role.kubernetes.io/master"
      effect = "NoSchedule"
    }
    1 = {
      key      = "dedicated"
      operator = "Equal"
      value    = "worker"
      effect   = "NoSchedule"
    }
  }
}

在helm_release中,我使用了一个"set“动态块,我尝试了许多组合,但是没有一个对我有用。我原以为下面的话会奏效,但却没有用。

代码语言:javascript
复制
  dynamic "set" {
    for_each = { for k,v in local.toleration: {for key,value in v : key=>value}}
content {
      name  = "tolerations[${set.key}].${set.key}"
      value = set.value # but I can't use value for the same
    }
  }

我需要我的输出像这样:

代码语言:javascript
复制
name  = "tolerations[0].key"
value = "node-role.kubernetes.io/master" 

name  = "tolerations[0].effect"
value = "NoSchedule" 

name  = "tolerations[1].key"
value = "dedicated" 
...

我做错什么了?

EN

回答 1

Stack Overflow用户

发布于 2022-02-15 00:39:06

在您共享的示例中,您已经将for_each设置为dynamic "set"块中的映射映射,而在所需输出的示例中,您将value设置为单个字符串,因此我假设您要将两个级别的映射平铺成一个set块系列,其中name将包含来自两个级别的键。

我不确定这是用于哪种资源类型,所以我在这里猜测哪些资源类型是有效的,但我认为下面的结果将得到您想要的结果:

代码语言:javascript
复制
  dynamic "set" {
    for_each = flatten([
      for tkey, values in local.toleration : [
        for key, value in values : {
          toleration_key = tkey
          value_key      = key
          value          = value
        }
      ]
    ])
    content {
      name  = "tolerations[${set.value.toleration_key}].${set.value.value_key}"
      value = set.value.value
    }
  }

这将使用the flatten function和嵌套的for表达式来构造一个对象列表,用作dynamic块的重复集合:

代码语言:javascript
复制
[
  {
    toleration_key = "0"
    value_key      = "key"
    value          = "node-role.kubernetes.io/master"
  },
  {
    toleration_key = "0"
    value_key      = "effect"
    value          = "NoSchedule"
  },
  {
    toleration_key = "1"
    value_key      = "key"
    value          = "dedicated"
  },
  # ...
]

然后,这就足以同时使用namevalue_key构造复合value_key字符串,并填充来自value的值。

我在这里使用的符号和属性名是非理想的,因为"key“和"value”在不同的地方都有不同的含义,但是我没有足够的上下文来选择更有意义的名称。如果可能的话,我建议选择更好地区分所有这些不同设置的名称,这样对于未来的维护人员来说,这将更容易理解。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71119816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档