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

时间:2019-05-07 09:08:24

标签: terraform vsphere

我们正在按照本示例中的描述使用Terraform创建虚拟机:

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

我们希望每台新计算机的根分区具有不同的大小,而不创建数十个源VM。

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

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

此工作正常,但没有将新磁盘大小分配给克隆的任何分区。根分区始终具有源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并调整(根)磁盘的大小?

1 个答案:

答案 0 :(得分:0)

我现在解决的方法很脏,但是可以用。我正在执行在配置过程中对磁盘进行重新分区的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 {
      ...
    }
  }
}

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