如何在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
相关产品推荐
相关产品推荐

