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

Terraform执行plan时tfvars中VM磁盘规格未生效问题求助

问题根源

你在main.tf里错误引用了全局变量var.vm_disk_size、var.vm_vcpu、var.vm_memory,但这些变量并没有在terraform.tfvars中定义——你实际把每台VM的专属参数存在了var.vms映射的每个对象里。因为启用了for_each = var.vms循环创建VM,所以应该从循环迭代器each.value中读取对应VM的参数,而非全局变量。

修复方案

修改main.tf中的vsphere_virtual_machine资源配置,将全局变量替换为each.value中的对应字段:

#Resource
resource "vsphere_virtual_machine" "vm" {
  for_each      = var.vms

  datastore_id      = data.vsphere_datastore.datastore.id
  resource_pool_id  = data.vsphere_compute_cluster.compute_cluster.resource_pool_id
  guest_id      = var.vm_guest_id

  network_interface {
    network_id      = data.vsphere_network.network.id
    adapter_type = data.vsphere_virtual_machine.template.network_interface_types[0]
  }

  name          = each.value.name
  
  num_cpus      = each.value.vm_cpu  # 替换原var.vm_vcpu
  memory        = each.value.vm_memory  # 替换原var.vm_memory
  firmware      = var.vm_firmware 
  disk {
    label       = var.vm_disk_label
    size        = each.value.vm_disk_size  # 替换原var.vm_disk_size
    thin_provisioned    = var.vm_disk_thin
  }

  clone {
    template_uuid       = data.vsphere_virtual_machine.template.id
    customize {
      linux_options {
        host_name   = each.value.name
        domain        = var.vm_domain
    }
    network_interface {
      ipv4_address  = each.value.vm_ip
      ipv4_netmask  = var.vm_ipv4_netmask
      dns_server_list   = var.vm_dns_servers
    }
    ipv4_gateway = var.vm_ipv4_gateway
   }
  }
 }
额外优化

如果variables.tf中的vm_vcpu、vm_memory、vm_disk_size这三个全局变量没有在其他资源中被引用,可以直接删除,避免后续混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 20:27:05