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

如何通过遍历多组Terraform变量列表生成单个文件?

解决Terraform生成单文件inventory.ini的问题

你的代码因使用count创建了与列表长度对等的template_file实例,最终会输出多个独立内容块,导致生成多份文件。要生成包含目标多行内容的单个文件,只需在模板内部完成所有行的循环拼接,再写入指定文件即可。

实现代码

1. 渲染多行内容模板

data "template_file" "inventory" {
  template = <<EOL
%{ for idx in range(length(var.mylist1)) }${var.mylist1[idx]} ip-address=${var.mylist2[idx]} eip-address=${var.mylist3[idx]}
%{ endfor }
EOL
}

2. 将渲染结果写入单个文件

resource "local_file" "inventory_ini" {
  filename = "./mypath/inventory.ini"
  content  = data.template_file.inventory.rendered
}

可选:列表长度校验

为避免因三个列表长度不一致引发索引越界错误,可添加前置校验:

locals {
  list_length = length(var.mylist1)
}

resource "null_resource" "validate_list_length" {
  count = (local.list_length != length(var.mylist2) || local.list_length != length(var.mylist3)) ? 1 : 0

  provisioner "local-exec" {
    command = "echo '错误:三个列表的长度必须完全一致' && exit 1"
  }
}

说明

  • 模板使用Terraform内置的%{ for ... }循环语法,遍历列表索引并拼接每行的主机名、IP及弹性IP信息,最终生成完整的多行字符串。
  • local_file资源将渲染后的完整内容写入指定路径,确保仅生成单个目标文件。

内容的提问来源于stack exchange,提问作者brandog

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:05:23