如何构造数据结构:将父级map的name值拼接至stages项并扁平化
Terraform 实现环境与阶段的扁平化拼接
需求说明
给定如下Terraform变量:
environments = [ { name = "preprod" stages = ["blue", "green"] }, { name = "qat" stages = ["blue", "green"] } ]
需要将每个环境的name与对应stages列表中的每个元素拼接,最终得到扁平化的列表结构(注:你提供的示例结果中包含prod-blue和prod-green,但输入变量里无prod环境,推测是笔误,以下实现将基于输入变量生成对应结果):
local.transformed = [ "preprod-blue", "preprod-green", "qat-blue", "qat-green" ]
实现方案
可以使用Terraform的嵌套for表达式结合扁平化操作来实现:
locals { transformed = flatten([ for env in var.environments : [ for stage in env.stages : "${env.name}-${stage}" ] ]) }
代码解释
- 外层
for循环遍历environments列表中的每个环境对象 - 内层
for循环遍历当前环境的stages列表,将环境名与阶段名通过-拼接 - 使用
flatten()函数将嵌套的二维列表转换为一维扁平化列表,得到最终结果
内容的提问来源于stack exchange,提问作者Aron
相关产品推荐
相关产品推荐

