如何将Terraform output输出内容写入现有CSV文件的指定列
解决方案
方案1:生成适配第三列的输出内容(适用追加到CSV末尾场景)
如果仅需要将VNet名称写入CSV第三列、前两列留空,直接调整Terraform的输出拼接逻辑即可,输出的每行自动补全前两列的空值,直接追加到已有表头的CSV文件末尾即可:
data "azurerm_resources" "spokes" { type = "Microsoft.Network/virtualNetworks" } locals { vnetnames = [for vnets in lookup(data.azurerm_resources.spokes, "resources", []) : lookup(vnets, "name")] # 每行前加两个逗号,对应CSV前两列为空,第三列为VNet名称 csv_c_column_rows = [for vnet_name in local.vnetnames : ",,${vnet_name}"] } output "localvar" { value = join("\n", local.csv_c_column_rows) }
方案2:直接读写现有CSV,匹配行写入C列(推荐)
如果需要将VNet名称和现有CSV的已有行一一对应写入C列,可使用Terraform内置的CSV编解码能力直接修改原有文件,自动匹配表头写入:
data "azurerm_resources" "spokes" { type = "Microsoft.Network/virtualNetworks" } # 读取本地已有的CSV文件 data "local_file" "existing_csv" { filename = "/替换为你的CSV文件实际路径.csv" } locals { vnetnames = [for vnets in lookup(data.azurerm_resources.spokes, "resources", []) : lookup(vnets, "name")] # 解码现有CSV内容 existing_csv_rows = csvdecode(data.local_file.existing_csv.content) # 逐行匹配,将VNet名称写入对应C列 updated_csv_rows = [ for idx, row in local.existing_csv_rows : merge( row, # 引号内替换为你的CSV中C列的实际表头名称 { "VNet名称" = element(local.vnetnames, idx, "") } ) ] } # 写入更新后的内容到原CSV文件 resource "local_file" "updated_csv" { filename = "/替换为你的CSV文件实际路径.csv" content = csvencode(local.updated_csv_rows) }
注意事项
- 请替换代码中的CSV路径为你本地的实际文件路径
- 代码中
"VNet名称"需要和你现有CSV的C列表头完全一致,否则会新增列而非覆盖原有C列 - 如果VNet数量和现有CSV的数据行数不匹配,可自行调整
element函数的默认补位逻辑
内容的提问来源于stack exchange,提问作者kanmani1303
相关产品推荐
相关产品推荐

