Я пытаюсь создать инфраструктуру в vCenter в Terraform, используя три разных виртуальных ресурса, каждый с избыточной копией в качестве вторичного. При внесении изменений в инфраструктуру я не хочу иметь простоев. Тем не менее, Terraform просто уничтожает все в начале подачи заявки. Мне также нужно обеспечить виртуальные машины с Chef в определенном порядке. Как я могу сделать так, чтобы она уничтожала виртуальную машину, воссоздала ее, разрушала другую, воссоздала ее и так далее? Другими словами, выполните скользящее развертывание.
Первоначально я установил count = 2
для каждой виртуальной машины для создания первичной и вторичной виртуальных машин, но я не мог упорядочить создание таким образом, поэтому я разделил их. Я пытался использовать create_before_destroy
, но vCenter не позволяет иметь две виртуальные машины с одинаковым именем. Я также пытался использовать depends_on
. Это работает для заказа создания виртуальных машин, но все равно уничтожает всю инфраструктуру одновременно.
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 будет работать в следующем порядке:
- уничтожить vm1_prim и vm3_prim
- создать vm1_prim и vm3_prim
- уничтожить vm1_sec и vm3_sec
- создать vm1_sec и vm3_sec
- уничтожить vm2_prim
- создать vm2_prim
- уничтожить vm2_sec
- create vm2_sec
Вместо этого он делает следующее:
- уничтожить vm2_sec и vm3_sec
- уничтожить vm2_prim и vm3_prim
- уничтожить vm1_sec
- уничтожить vm1_prim
- создать vm1_prim и vm3_prim
- создать vm1_sec и vm3_sec
- создать vm2_prim
- create vm2_sec