Имеется ресурс с параметром 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", { ... })
но в этом поле нельзя писать выражения.