我有以下具有不同值的本地值。我试图在一个动态块中遍历以下映射:
local {
toleration = {
0 = {
key = "node-role.kubernetes.io/master"
effect = "NoSchedule"
}
1 = {
key = "dedicated"
operator = "Equal"
value = "worker"
effect = "NoSchedule"
}
}
}在helm_release中,我使用了一个"set“动态块,我尝试了许多组合,但是没有一个对我有用。我原以为下面的话会奏效,但却没有用。
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
}
}我需要我的输出像这样:
name = "tolerations[0].key"
value = "node-role.kubernetes.io/master"
name = "tolerations[0].effect"
value = "NoSchedule"
name = "tolerations[1].key"
value = "dedicated"
...我做错什么了?
发布于 2022-02-15 00:39:06
在您共享的示例中,您已经将for_each设置为dynamic "set"块中的映射映射,而在所需输出的示例中,您将value设置为单个字符串,因此我假设您要将两个级别的映射平铺成一个set块系列,其中name将包含来自两个级别的键。
我不确定这是用于哪种资源类型,所以我在这里猜测哪些资源类型是有效的,但我认为下面的结果将得到您想要的结果:
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块的重复集合:
[
{
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"
},
# ...
]然后,这就足以同时使用name和value_key构造复合value_key字符串,并填充来自value的值。
我在这里使用的符号和属性名是非理想的,因为"key“和"value”在不同的地方都有不同的含义,但是我没有足够的上下文来选择更有意义的名称。如果可能的话,我建议选择更好地区分所有这些不同设置的名称,这样对于未来的维护人员来说,这将更容易理解。
https://stackoverflow.com/questions/71119816
复制相似问题