如何在Terraform中向Proxmox模块动态磁盘块原封传入变量内容
解决方案
直接用三层嵌套动态块就能完美匹配你的vm_disk变量结构,生成目标的磁盘配置嵌套块。以下是具体实现:
模块内的资源配置代码
resource "proxmox_vm_qemu" "vm" { # 这里填写VM的基础配置(如name、memory、cores、agent等) disks { # 第一层动态块:遍历virtio/ide/sata/scsi这类控制器类型 dynamic "${ctrl_type.key}" { for_each = var.vm_disk content { # 第二层动态块:遍历当前控制器下的所有设备(如virtio0/virtio1) dynamic "${disk_dev.key}" { for_each = ctrl_type.value content { # 直接生成disk块,自动展开所有配置参数 disk { for k, v in disk_dev.value.disk : k => v } } } } } } }
说明
- 第一层动态块用
ctrl_type作为迭代器,遍历你vm_disk里的顶层键(比如virtio),自动生成对应的控制器块 - 第二层动态块用
disk_dev作为迭代器,遍历当前控制器下的设备(比如virtio0、virtio1),生成对应设备名的块 - 最内层的
disk块通过for表达式自动展开你定义的所有磁盘参数,完全不用逐个枚举,实现“原封不动传入”的需求
这样配置后,你的vm_disk变量会直接转换成你期望的嵌套结构,不管后续新增控制器类型、设备或者磁盘参数,都不需要修改模块代码。
内容的提问来源于stack exchange,提问作者RiddleMeThis
相关产品推荐
相关产品推荐

