Назад | Перейти на главную страницу

Почему Terraform обновляет ресурсы для вложения томов?

Я использую Terraform для подготовки кластера виртуальной машины с подключением блочного устройства Cinder. Проблема в том, что когда я воспроизводю Terraform или просто масштабирую количество виртуальных машин, Terraform планирует обновить подключение блочного устройства для существующих виртуальных машин (что означает удаление ресурса подключения, а затем создание).

resource "openstack_compute_volume_attach_v2" "worker-hd1" {
  count     = "${var.worker_count}"
  volume_id = "${element(openstack_blockstorage_volume_v2.hdd1_volume.*.id,count.index)}"
  instance_id = "${element(openstack_compute_instance_v2.worker_node.*.id,count.index)}"
}

Вывод плана терраформ. Первое вложение ([2]) уже существует, второе ([3]) - для новой ВМ / блока.

-/+ openstack_compute_volume_attach_v2.worker-hd2[2] (new resource required)
      id:                                            "2310c2aa-bfbf-4135-a73a-972748578613/f8a1964a-6589-41e9-9bc4-a44bcc865c97" => <computed>
      device:                                        "/dev/vde" => <computed>
      instance_id:                                   "2310c2aa-bfbf-4135-a73a-972748578613" => "${element(openstack_compute_instance_v2.worker_node.*.id,count.index)}"
      region:                                        "fr1" => <computed>
      volume_id:                                     "f8a1964a-6589-41e9-9bc4-a44bcc865c97" => "${element(openstack_blockstorage_volume_v2.hdd2_volume.*.id,count.index)}"

  + openstack_compute_volume_attach_v2.worker-hd2[3]
      id:                                            <computed>
      device:                                        <computed>
      instance_id:                                   "${element(openstack_compute_instance_v2.worker_node.*.id,count.index)}"
      region:                                        <computed>
      volume_id:                                     "${element(openstack_blockstorage_volume_v2.hdd2_volume.*.id,count.index)}"

Как можно сделать так, чтобы Terraform не изменял существующие вложения?

Кажется, что ваши ресурсы зависят от переменных, поэтому terraform рассматривает их как новые ресурсы. Но вы всегда можете игнорировать любой из них, чтобы предотвратить повторное создание:

resource "openstack_compute_volume_attach_v2" "worker-hd1" {
  count     = "${var.worker_count}"
  volume_id = "${element(openstack_blockstorage_volume_v2.hdd1_volume.*.id,count.index)}"
  instance_id = "${element(openstack_compute_instance_v2.worker_node.*.id,count.index)}"
  lifecycle {
    ignore_changes = ["volume_id","instance_id"]
  }
}