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

如何在Terraform中为列表内的每个对象添加新属性?

Terraform 中对象展开的正确用法

你写的语法几乎是对的,Terraform(HCL)确实支持类似JavaScript的对象展开语法,但有个核心细节需要修正:属性赋值要用冒号:而非等号=。

正确的写法如下:

new_list = [for item in list : { ...item, newProp : "XYZ" }]

关键说明:

  • Terraform 0.12及以上版本支持用...展开对象,这样可以直接保留原对象的所有属性,完全不需要逐一手动列出。
  • HCL的对象属性赋值语法是key: value,这和JavaScript的key = value写法不同,这是你原代码里的问题所在。
  • 必须确保list中的每个item都是对象类型,如果是字符串、数字这类非对象类型,展开操作会报错。

举个实际使用的例子:
假设你有一组云服务器配置列表:

original_servers = [
  { id = "srv-001", name = "api-node-1", region = "ap-southeast-1" },
  { id = "srv-002", name = "api-node-2", region = "ap-southeast-1" }
]

要给每台服务器添加env: "production"属性,直接用展开语法即可:

updated_servers = [for srv in original_servers : { ...srv, env : "production" }]

最终生成的updated_servers会自动保留原属性并添加新属性:

[
  { id = "srv-001", name = "api-node-1", region = "ap-southeast-1", env = "production" },
  { id = "srv-002", name = "api-node-2", region = "ap-southeast-1", env = "production" }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:47:03