Terraform vsphere提供程序:无法收缩虚拟磁盘
我可以从以下地形资源创建虚拟机(省略一些细节,因为它与问题无关,我希望保持简洁): 因此,vm_instances变量在terraform.tfvars文件中定义如下:Terraform vsphere提供程序:无法收缩虚拟磁盘,terraform,vsphere,terraform-provider-vsphere,Terraform,Vsphere,Terraform Provider Vsphere,我可以从以下地形资源创建虚拟机(省略一些细节,因为它与问题无关,我希望保持简洁): 因此,vm_instances变量在terraform.tfvars文件中定义如下: vm_instances = [ {name="small_1", disk = 16}, {name="small_2", disk = 16}, {name="small_3", disk = 16}
vm_instances = [
{name="small_1", disk = 16},
{name="small_2", disk = 16},
{name="small_3", disk = 16},
{name="medium_1", disk = 32},
{name="medium_2", disk = 32},
{name="medium_3", disk = 32},
{name="large_1", disk = 64},
{name="large_2", disk = 64}
]
如果我在这个配置上运行apply,所有的东西都会被部署并工作。但是,如果随后更改列表变量(例如,在small\u 3
和medium\u 1
之间插入small\u 4
),则会出现两个相关错误:
错误:磁盘。0:虚拟磁盘“disk0”:无法收缩虚拟磁盘(旧:64新:32)
错误:磁盘。0:虚拟磁盘“disk0”:无法收缩虚拟磁盘(旧:32新:16)
所以我理解为什么会抛出这个错误,但是有没有办法强迫Terraform摧毁这样的机器然后重建呢?这就是克隆变量的行为为什么不调整磁盘大小
解决这个问题的唯一方法是为每个磁盘大小定义单独的资源(有点麻烦,对我的问题来说并不理想),或者销毁所有的机器,然后构建新的机器(这有点否定了使用Terraform的意义)
提前感谢您的回复
编辑
我尝试了马特·舒查德(Matt Schuchard)的评论建议(谢谢马特!),但没有成功,因为我认为我无法使用“vsphere\u虚拟磁盘”资源中的count
功能。它抱怨找不到“Disk-#.vmdk”磁盘
此外,我似乎仍然需要一个带有此外部附件的disk0作为第二个磁盘(这实际上可以解决我的问题,但首选一个磁盘)
以下是失败尝试的代码
resource "vsphere_virtual_disk" "my_disk" {
count = length(var.vm_instances)
vmdk_path = "Disk-${ count.index }.vmdk"
datastore = "myds"
size = var.vm_instances[count.index].disk
datacenter = "mydc"
}
在我的虚拟机资源中:
resource "vsphere_virtual_machine" "vm-instance" {
...
disk {
label = "disk0"
size = 16
...
}
disk {
attach = true
path = "Disk-${ count.index }.vmdk"
label = "disk1"
unit_number = 1
}
}
您需要在列表中追加磁盘,而不是插入磁盘。这是由于VSphere API在磁盘上强制执行单元号一致性。
resource "vsphere_virtual_machine" "vm-instance" {
...
disk {
label = "disk0"
size = 16
...
}
disk {
attach = true
path = "Disk-${ count.index }.vmdk"
label = "disk1"
unit_number = 1
}
}