Terraform:如何编写三层嵌套for循环实现DRY(避免重复)
解决Terraform指标数组嵌套问题
你的问题出在嵌套循环生成了三维数组,而你需要的是一维数组结构。当前代码里每一层for都用[]包裹,导致最终输出是[[[...]]]的嵌套格式,不符合预期。
两种修复方式:
方式1:合并多层for表达式(推荐)
直接把三层for放在同一个数组生成表达式里,去掉中间的嵌套[],这样Terraform会直接生成一维数组:
metrics = [ for i, k in local.keys : for metric in ["metric1", "metric2"] : for method in ["method1", "method2"] : [ "Server", metric, "dim1", k, "dim2", method, { "region" : "...", "id" : "ms${method}${i}", "visible" : false } ] ]
方式2:用flatten函数展开嵌套数组
如果想保留原有的嵌套写法,在最外层用flatten()把三维数组扁平化:
metrics = flatten([ for i, k in local.keys : [ for metric in ["metric1", "metric2"] : [ for method in ["method1", "method2"] : [ "Server", metric, "dim1", k, "dim2", method, { "region" : "...", "id" : "ms${method}${i}", "visible" : false } ] ] ] ])
两种方式最终都会生成你需要的格式:
[["Server", "metric1", "dim1", "key1", "dim2", "method1", {...}], [...], ...]
内容的提问来源于stack exchange,提问作者Leo oeL
相关产品推荐
相关产品推荐

