【问题标题】:Resizing disk when cloning from Snapshot in vSphere从 vSphere 中的快照克隆时调整磁盘大小
【发布时间】:2019-05-07 09:08:24
【问题描述】:

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

https://www.terraform.io/docs/providers/vsphere/r/virtual_machine.html#cloning-and-customization-example

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

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

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

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

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 创建克隆/新 VM 并在克隆过程中调整(根)磁盘大小时,是否有可能?

【问题讨论】:

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

标签: terraform vsphere


【解决方案1】:

我现在解决它的方法很脏但有效。我正在执行一个在配置期间对磁盘进行重新分区的 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 {
      ...
    }
  }
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    相关资源
    最近更新 更多