# Loop within a loop for GCP instance creation with multiple volumes

**URL:** <https://discuss.hashicorp.com/t/loop-within-a-loop-for-gcp-instance-creation-with-multiple-volumes/66536>\
**Category:** Terraform\
**Created:** [April 30, 2024, 5:23am UTC](https://discuss.hashicorp.com/t/loop-within-a-loop-for-gcp-instance-creation-with-multiple-volumes/66536 "2024-04-30T05:23:16Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![achoyna](https://avatars.discourse-cdn.com/v4/letter/a/bc8723/32.png) [@achoyna](https://discuss.hashicorp.com/u/achoyna)\
**Post date:** [April 30, 2024, 5:23am UTC](https://discuss.hashicorp.com/t/loop-within-a-loop-for-gcp-instance-creation-with-multiple-volumes/66536/1 "2024-04-30T05:23:16Z")

</div>

Hi guru’s,

I creating some terraform which automates the creation of GCE instances, along with multiple volumes. I’m trying to make it flexible, so all I need to do is input the GCE instance(s) variables (in a map), along with it’s volume resource requirements if the instance has multiple volumes. That way all I need to do is update the tfvars files with the new info for the application to create all of the GCE instances, and their associated volumes and other resources.

I have the CGE instances create loop working fine (using a map(object)), but now i’m working on creating the volumes within that process and I’m lost.

How do I get the Volume loop working within the GCE instance creation loop?

Thanks in advance. Here is my code so far:

**Variables.tf**

variable “vm\_variables” {

```auto
  type = map(object({
    vm_name = string
    vm_type = string
    vm_zone = string
    vm_labels = map(any)
    vm_boot_image = string
    vm_boot_disk_type = string
    vm_boot_disk_size = string
    vm_network = string
    vm_subnetwork = string
    vm_disks = map(any)

```

}))  
}

**terraform.tfvars**

vm\_variables = {

```auto
       "vm1" = {
          vm_name = "xxxxtest1"
          vm_type = "e2-micro"
          vm_zone = "us-east4-b"
          vm_boot_image = "ubuntu-os-cloud/ubuntu-2004-focal-v20220712"
          vm_boot_disk_size = "40"
          vm_boot_disk_type = "pd-standard"
          vm_network = "vpc-shared-vsnew-prod"
          vm_subnetwork = "subnet-hhc-cs-poc-us-east4"
          vm_labels = {
            owner = "zzzzzzzz"
            application = "testapp1"
          }
          vm_disks = {
            disk_1 = {
              vm_diskname = "test-disk-1"
              vm_disktype = "pd-ssd"
              vm_disksize = "30"
            }
            disk_2 = {
              vm_diskname = "test-disk-2"
              vm_disktype = "pd-ssd"
              vm_disksize = "30"
            }
          }

       }
       "vm2" = {
          vm_name = "aaatest2"
          vm_type = "e2-micro"
          vm_zone = "us-east4-b"
          vm_boot_image = "ubuntu-os-cloud/ubuntu-2004-focal-v20220712"
          vm_boot_disk_size = "40"
          vm_boot_disk_type = "pd-standard"
          vm_network = "vpc-shared-vsnew-prod"
          vm_subnetwork = "subnet-hhc-cs-poc-us-east4"
          vm_labels = {
            owner = "zzzzzzzz"
            application = "testapp2"
          }
          vm_disks = {
            disk_1 = {
              vm_diskname = "test-disk-3"
              vm_disktype = "pd-Standard"
              vm_disksize = "30"
            }
            disk_2 = {
              vm_diskname = "test-disk-4"
              vm_disktype = "pd-ssd"
              vm_disksize = "30"
            }
          }
       }

```

}

**main.tf**

provider “google” {

```auto
  project = "prj-shared-migration"
  region = "us-east4"
  zone = "us-east4-b"
  credentials = "/Users/xxxxxxx/.config/gcloud/application_default_credentials.json"
}

resource "google_compute_instance" "default" {
  provider = google

  for_each = var.vm_variables
  name = each.value["vm_name"]
  machine_type = each.value["vm_type"]
  labels = each.value["vm_labels"]

  network_interface {
    network = data.google_compute_network.my-network[each.key].self_link
    subnetwork = data.google_compute_subnetwork.my-subnetwork[each.key].self_link
  }

  boot_disk {
    initialize_params {
      image = "ubuntu-os-cloud/ubuntu-2004-focal-v20220712"
      labels = each.value["vm_labels"]
      type = each.value["vm_boot_disk_type"]
      size = each.value["vm_boot_disk_size"]
    }
  }

  dynamic "attached_disk" {
    for_each = each.value["vm_disks"]
      content{
        source = values(google_compute_disk.default)[*].self_link
# source = google_compute_disk.default[attached_disk.value].self_link
      }
    }
}

resource "google_compute_disk" "default" {
    for_each = var.vm_variables
      name = each.value["vm_disks"].vm_diskname
      type = each.value["vm_disks"].vm_disktype
      size = each.value["vm_disks"].vm_disksize
      labels = {
        environment = "dev"
      }
      physical_block_size_bytes = 4096
}

data "google_compute_network" "my-network" {
  for_each = var.vm_variables
  name = each.value["vm_network"]
  project = "prj-shared-network-prod-hhc"
}

data "google_compute_subnetwork" "my-subnetwork" {
  for_each = var.vm_variables

  name = each.value["vm_subnetwork"]
  project = "prj-shared-network-prod-hhc"

```

}

---

<div class="post-metadata">

**Author:** ![system](https://global.discourse-cdn.com/hashicorp/original/1X/79bf76adfd92a75631996933098f9ce29d37abf3.svg) [@system](https://discuss.hashicorp.com/u/system)\
**Post date:** [October 27, 2024, 5:23am UTC](https://discuss.hashicorp.com/t/loop-within-a-loop-for-gcp-instance-creation-with-multiple-volumes/66536/2 "2024-10-27T05:23:48Z")

</div>

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.
