'Linking a series of GCP disks to corresponding instances dynamically in terraform

I need to dynamically create a variable number of riak instances, each with an attached disk across multiple zones in GCP using terraform.

Each attached disk must live in the same zone as its instance.

Upon terraform plan everything looked good, but when I ran apply terraform responded with an error saying that zone was undefined.

Okay, I thought, let's set the zone to be the same as the linked instance. No dice. Cycle error, so I move everything such that the information flows from the disk to the instance, but the cycle error persists. Here's the error:

│ Error: Cycle: module.riak_instances.google_compute_instance.riak_instance, module.riak_instances.google_compute_disk.data-disk

And the code in it's current incarnation:

data "google_compute_zones" "zones" {
}

resource "google_compute_instance" "riak_instance" {
  count = var.instance_count
  name = "riak-${count.index + 1}"
  machine_type = var.machine_type
  zone = google_compute_disk.data-disk[count.index].zone

  boot_disk {
    initialize_params {
      image = var.disk_image
      size = var.instance_disk_size
    }
  }

  network_interface {
    network = "default"
  }

  attached_disk {
    source = google_compute_disk.data-disk[count.index].self_link
  }

  labels = {
    environment = var.environment
    owner = var.owner
  }
}

resource "google_compute_disk" "data-disk" {
  count = var.instance_count
  name = "riak-disk-${count.index + 1}"
  type = "pd-balanced"
  size = var.data_disk_size
  zone = data.google_compute_zones.zones.names[count.index]

  labels = {
    environment = var.environment
    owner = var.owner
  }
}



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source