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

如何批量获取Terraform创建的VMware虚拟机UUID?

解决Terraform中for_each创建VMware虚拟机后的UUID获取问题

当你使用for_each批量创建资源时,Terraform会生成**键值对映射(Map)**而非列表,因此传统的splat表达式(*.uuid)无法生效,这是你遇到问题的核心原因。以下是针对两种场景的正确解决方案:

1. 获取所有虚拟机的UUID集合

如果你需要收集所有虚拟机的UUID到一个列表或映射中,可以使用values()函数配合splat表达式,或者用for表达式构建映射:

生成UUID列表

locals {
  # 将所有虚拟机的UUID提取为列表
  vm_uuids = values(vsphere_virtual_machine.vm)[*].uuid
}

生成带键的UUID映射(保留虚拟机标识关联)

如果你需要保留UUID与原虚拟机的对应关系(比如和var.vms中的键关联),可以用for表达式:

locals {
  # 键为var.vms中的标识,值为对应虚拟机的UUID
  vm_uuid_map = { for vm_key, vm_instance in vsphere_virtual_machine.vm : vm_key => vm_instance.uuid }
}

2. 在abc模块中传递对应虚拟机的UUID

由于你的abc模块同样使用了for_each = var.vms,每个模块实例需要对应到同一键的虚拟机UUID,而非传递所有UUID的列表。修改模块调用代码如下:

module "abc" {
  source   = "../../abc"
  for_each = var.vms
  # 通过each.key关联到对应虚拟机的UUID
  re       = vsphere_virtual_machine.vm[each.key].uuid
}

这样每个abc模块实例都会拿到与自身each.key匹配的虚拟机UUID,避免了参数类型不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:32:51