Есть ли способ заказать уничтожение и создание в Terraform? - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь создать инфраструктуру в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...