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

Terraform模块引用list(object)类型for_each变量报错求助

Terraform模块list(object)类型变量正确赋值方案

正确的模块调用语法

你的proxmox-instance模块中forwarded_ports是**list(object)**类型,调用时必须传递包含端口转发对象的列表,主目录main.tf的正确写法如下:

module "proxmox_vm" {
  source = "./proxmox-instance"

  # 赋值list(object)类型变量:传递包含多个对象的列表
  forwarded_ports = [
    {
      host_port  = 2222
      guest_port = 22
    },
    # 可按需添加更多转发规则
    {
      host_port  = 8080
      guest_port = 80
    }
  ]

  # 注意:必须补充模块中所有无默认值的必填变量(比如模板名称等)
}

之前错误写法的原因

  1. forwarded_ports.host_port = 2222报错:
    这种语法用于访问单个对象的属性,但forwarded_ports是列表类型,Terraform无法识别该赋值方式,因此抛出"Argument or block definition required"错误。

  2. forwarded_ports = [{host_port=2222, guest_port=22}]报错:
    该写法语法本身正确,"Missing required argument"错误的根源是模块中存在其他无默认值的必填变量,你调用时未赋值。比如你当前forwarded_ports的描述写的是"Your Template name",明显和变量用途不符,大概率模块中还定义了template_name这类必填变量,需要在模块调用时补充赋值。

额外建议

  • 修正proxmox-instance/variables.tf中forwarded_ports的描述,避免混淆:
variable "forwarded_ports" {
  description = "List of port forwarding rules (host port maps to guest port)"
  type = list(object({
    host_port  = number
    guest_port = number
  }))
  default = [{
    host_port  = 2222,
    guest_port = 22
  }]
}
  • 检查模块内所有变量,确保无默认值的必填变量在调用时都已赋值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:35:16