Terraform 在vSphere中从快照克隆时调整磁盘大小

Terraform 在vSphere中从快照克隆时调整磁盘大小,terraform,vsphere,Terraform,Vsphere,我们正在使用terraform创建虚拟机,如本例所述: 我们希望每台新机器的根分区具有不同的大小,而无需创建几十个源VM 我们的克隆源是一个ubuntu(16.04)快照。快照有一个分配了20 GB的根磁盘 创建链接克隆时,克隆的磁盘大小必须与快照的大小相同。为了能够调整克隆虚拟机上的磁盘大小,我们使用了完整克隆 除了没有将新磁盘大小分配给克隆的任何分区之外,这一切正常。根分区始终具有源vms分区的大小。创建VM后,我必须手动分配未分配的空间 resource "vsphere_virtual

我们正在使用terraform创建虚拟机,如本例所述:

我们希望每台新机器的根分区具有不同的大小,而无需创建几十个源VM

我们的克隆源是一个ubuntu(16.04)快照。快照有一个分配了20 GB的根磁盘

创建链接克隆时,克隆的磁盘大小必须与快照的大小相同。为了能够调整克隆虚拟机上的磁盘大小,我们使用了完整克隆

除了没有将新磁盘大小分配给克隆的任何分区之外,这一切正常。根分区始终具有源vms分区的大小。创建VM后,我必须手动分配未分配的空间

resource "vsphere_virtual_machine" "vm" {
  count            = "${var.count}"
  name             = "${var.stage}-${var.name}-${count.index}"

  ...

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

  disk {
    label = "disk0"

    # This is to static for our use case as we will always result in VMs
    # having the same disk size 
    #size             = "${data.vsphere_virtual_machine.source_vm.disks.0.size}"

    size             = "${var.disk_size}" # Ideally this one should be appplied to the root partition :)
    eagerly_scrub    = false
    thin_provisioned = false
  }

  clone {
    template_uuid = "${data.vsphere_virtual_machine.source_vm.id}"

    # use full clones to adopt disk size        
    linked_clone = false

    customize {
      linux_options {
        ...
      }

      network_interface {}
    }
  }
}
我不是vSphere方面的专家,但我缺少了一些像Openstack中的图像和味道之类的东西


在使用Terraform和vSphere创建克隆/新虚拟机并在克隆过程中调整(根)磁盘的大小时,是否有任何可能性?

我现在解决这个问题的方法是肮脏的,但有效。我正在执行一个shell脚本,该脚本在配置期间重新分区磁盘:

resource "vsphere_virtual_machine" "vm" {

  ...

  # partitioning

  provisioner "file" {
    source      = "${path.module}/../../files/partitioning.sh"
    destination = "/tmp/partitioning.sh"

    connection {
      ...
    }
  }

  provisioner "remote-exec" {
    inline = [
      "echo \"Initializing partitions\"",
      "echo ${var.sudo_password} | sudo -S bash /tmp/partitioning.sh",
    ]

    connection {
      ...
    }
  }
}

有人知道更好的解决方法吗?

我现在解决这个问题的方法很肮脏,但很有效。我正在执行一个shell脚本,该脚本在配置期间重新分区磁盘:

resource "vsphere_virtual_machine" "vm" {

  ...

  # partitioning

  provisioner "file" {
    source      = "${path.module}/../../files/partitioning.sh"
    destination = "/tmp/partitioning.sh"

    connection {
      ...
    }
  }

  provisioner "remote-exec" {
    inline = [
      "echo \"Initializing partitions\"",
      "echo ${var.sudo_password} | sudo -S bash /tmp/partitioning.sh",
    ]

    connection {
      ...
    }
  }
}

有人知道更好的解决方案吗?

有一种方法可以做到这一点,那就是将脚本烘焙到要克隆的图像中。在第一次引导时,您可以执行这个脚本,它查看驱动器信息并使用所有可用空间重新创建分区表。之后,您可以重新启动计算机(最好)或重新加载分区表。谢谢您的回复。如果没有别的办法,我想我必须这么做。但是vSphere真的没有任何机制来适应虚拟机创建时的磁盘大小吗?对我来说,这似乎是一个非常基本的功能,这里没有。可能有一种方法可以做到这一点,将脚本烘焙到要克隆的图像中。在第一次引导时,您可以执行这个脚本,它查看驱动器信息并使用所有可用空间重新创建分区表。之后,您可以重新启动计算机(最好)或重新加载分区表。谢谢您的回复。如果没有别的办法,我想我必须这么做。但是vSphere真的没有任何机制来适应虚拟机创建时的磁盘大小吗?对我来说,这听起来像是一个非常基本的功能,但这里没有。