我想通过terraform在Vsphere中提供多个虚拟机。我使用count元数据来配置并行虚拟机,有时多个虚拟机会获得相同的IP地址。我尝试了多种方法来处理它,但没有成功。请帮助我了解如何处理这种情况。我不想使用静态IP。我正在使用DHCP。
当我顺序创建多个虚拟机时,虚拟机会获得正确的IP地址,但当我尝试使用计数元数据创建(尝试并行配置多个虚拟主机(时,它失败了。
resource "vsphere_virtual_machine" "vm" {
count = "3"
name = "${var.vm_name}-${count.index+1}"
resource_pool_id = data.vsphere_compute_cluster.cluster.resource_pool_id
datastore_id = data.vsphere_datastore.datastore.id
folder = "VirtualMachines"
guest_id = data.vsphere_virtual_machine.template.guest_id
scsi_type = data.vsphere_virtual_machine.template.scsi_type
wait_for_guest_net_timeout = 0
num_cpus = var.cpu
num_cores_per_socket = var.cores-per-socket
memory = var.ram
network_interface {
network_id = data.vsphere_network.network.id
adapter_type = data.vsphere_virtual_machine.template.network_interface_types[0]
}
disk {
label = "${var.vm_name}-${count.index+1}-disk"
thin_provisioned = data.vsphere_virtual_machine.template.disks.0.thin_provisioned
# eagerly_scrub = data.vsphere_virtual_machine.template.disks.0.eagerly_scrub
size = var.disksize == "" ? data.vsphere_virtual_machine.template.disks.0.size : var.disksize
}
clone {
template_uuid = data.vsphere_virtual_machine.template.id
}
wait_for_guest_ip_timeout = 3
}
文档说明如下[1](在该部分中搜索DHCP(:
若要使用DHCP,请为每个接口声明一个空的network_interface块。
因此,在您的情况下,这意味着将network_interface
块更改为:
resource "vsphere_virtual_machine" "vm" {
...
network_interface {}
...
}
此外,您正在使用wait_for_guest_net_timeout
和wait_for_guest_ip_timeout
的组合。文档中指出,对于较新版本的VMware Tools,您只需要前者。在设置超时时要小心,因为如果设置为小于1,则服务生将被禁用[2]。
[1]https://registry.terraform.io/providers/hashicorp/vsphere/latest/docs/resources/virtual_machine#virtual-机器定制
[2]https://registry.terraform.io/providers/hashicorp/vsphere/latest/docs/resources/virtual_machine#wait_for_guest_net_timeout