我正在尝试在Terraform的vCenter上使用三个不同的VM资源创建基础结构,每个资源都有其自身的冗余副本作为辅助资源。在更改基础架构时,我不想停机。但是,Terraform只会在应用开始时破坏所有内容。我还需要按一定顺序为Chef提供VM。我如何才能使它销毁VM,重新创建,销毁另一个VM,重新创建VM,等等?换句话说,执行滚动部署。
我最初为每个VM设置count = 2
来生成主要和辅助VM,但是我无法以此方式命令创建,因此我将它们拆分了。我尝试使用create_before_destroy
,但是vCenter不允许两个具有相同名称的VM。我也尝试使用depends_on
。这可以命令创建VM,但是仍然会立即破坏整个基础架构。
resource "vsphere_virtual_machine" "vm1_prim" {
...
}
resource "vsphere_virtual_machine" "vm1_sec" {
depends_on = [vsphere_virtual_machine.vm1_prim]
...
}
resource "vsphere_virtual_machine" "vm2_prim" {
depends_on = [vsphere_virtual_machine.vm1.sec]
...
}
resource "vsphere_virtual_machine" "vm2_sec" {
depends_on = [vsphere_virtual_machine.vm2_prim]
...
}
resource "vsphere_virtual_machine" "vm3_prim" {
...
}
resource "vsphere_virtual_machine" "vm3_sec" {
depends_on = [vsphere_virtual_machine.vm3_prim]
...
}
我想执行以下操作可能会奏效,但似乎不像“ Terraform”那样:
terraform apply --auto-approve -target=vsphere_virtual_machine.vm1_prim -target=vsphere_virtual_machine.vm3_prim
terraform apply --auto-approve -target=vsphere_virtual_machine.vm1_sec -target=vsphere_virtual_machine.vm2_prim -target=vsphere_virtual_machine.vm3_sec
terraform apply --auto-approve -target=vsphere_virtual_machine.vm2_sec
我希望Terraform按此顺序工作:
相反,它执行以下操作: