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

