You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Terraform的templatefile函数将Map输出为清单文件格式

如何使用Terraform的templatefile函数将Map输出为清单文件格式

我懂你现在的需求——就是要把Terraform里那个颜色分组的Map转换成指定格式的清单文件对吧?之前的模板写法没处理好数组元素的遍历,所以才会报错,咱们来调整一下就能解决问题。

首先先确认你的源Map变量(顺便帮你修正了拼写错误,原来的geen应该是green):

locals {
  inventory_map = {
    "black"  = ["xyz"]
    "blue"   = ["abc", "xyz"]
    "green"  = ["abc"]
    "red"    = ["abc", "xyz"]
    "yellow" = ["xyz"]
  }
}

你的local_file资源结构其实没问题,问题出在模板文件的写法上。你之前直接输出${value}会把整个数组当成一个整体输出,而我们需要遍历数组里的每个元素,逐个换行显示。

修改你的.hosts.yaml.tftpl模板内容为:

%{ for key, values in color_groups ~}
[${key}]
%{ for value in values ~}
${value}
%{ endfor ~}
%{ endfor ~}

如果希望每个分组之间保留空行(让文件更易读),可以改成这样:

%{ for key, values in color_groups ~}
[${key}]
%{ for value in values ~}
${value}
%{ endfor ~}

%{ endfor ~}

这个模板的逻辑很简单:

  1. 外层循环遍历Map的每一组键值对,先输出带方括号的组名[${key}]
  2. 内层循环遍历当前组对应的数组,把每个元素单独输出一行
  3. (可选)组之间添加空行分隔

最后你的local_file资源可以保持原样(或者指定你想要的输出文件名):

resource "local_file" "host_file" {
  content  = templatefile("./hosts.yaml.tftpl", {
    color_groups = local.inventory_map
  })
  filename = "./hosts.ini" # 按需修改文件名,比如hosts.txt
}

这样运行Terraform之后,生成的文件内容就完全符合你的预期啦!

备注:内容来源于stack exchange,提问作者drmaa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 10:57:44