LINUX.ORG.RU

Постепенное пересоздание ресурсов в terraform

 


1

1

Имеется ресурс с параметром count. Например

resource "openstack_compute_instance_v2" "worker" {
  count       = var.worker_count
  name        = "worker-${count.index + 1}"
  flavor_name = data.openstack_compute_flavor_v2.worker.name
  user_data   = templatefile("${path.module}/cloud-init/config.yaml.tftpl", { ... })

count больше единицы.

Если я поменяю значение flavor_name или user_data, то все серверы разом будут пересозданы. Это недопустимо. Нужно это делать по одному, мониторя состояние остальных серверов. Не получилось придумать, как это можно сделать адекватно. Пока пришел в голову только один способ:

resource "openstack_compute_instance_v2" "worker" {
  count       = var.worker_count
  name        = "worker-${count.index + 1}"
  flavor_name = count.index < var.worker_new_count ? new_worker_name : worker_name;
  user_data   = count.index < var.worker_new_count ? new_user_data : user_data;

продублировать все поля с новыми значениями и меняя переменную var.worker_new_count постепенно пересоздать все ресурсы, начиная с первого. Но будет довольно много дублирования, что кажется не совсем удачным вариантом.

В идеале хотелось бы написать

resource "openstack_compute_instance_v2" "worker" {
  lifecycle {
    ignore_changes = count.index < var.worker_new_count ? [] : [all]
  }
  count       = var.worker_count
  name        = "worker-${count.index + 1}"
  flavor_name = data.openstack_compute_flavor_v2.worker.name
  user_data   = templatefile("${path.module}/cloud-init/config.yaml.tftpl", { ... })

но в этом поле нельзя писать выражения.

★★★

Ответ на: комментарий от Demacr

Мне надо, чтобы я запустил и оно один ресурс пересоздало, например нулевой. А остальные пока не трогало. Потом я через полчаса запустил ещё раз, указав, что теперь надо первый пересоздать, оно первый пересоздало, остальные не трогая. И так далее.

vbr ★★★
() автор топика
Ответ на: комментарий от vbr

Выше я указал что тебе нужно юзать -target. Прям то, что нужно. Сам его использую когда нужно только часть из обновленного обновить/заменить.

Demacr ★★
()
Последнее исправление: Demacr (всего исправлений: 1)