Reference the iteration number in a Hashicorp Packer for_each loop

161 Views Asked by At

consider the following HCL Map:

locals {
  disks = {
    sda = {
      size = 1024
      thin = true
    }
    sdb = {
      size = 2048
      thin = false
    }
  }
}

and the following source "vsphere-iso" "linux-rhel" dynamic storage block:

  dynamic "storage" {
    for_each = local.disks
    content {
      disk_size             = storage.value.size
      disk_thin_provisioned = storage.value.thin
      disk_controller_index = ???
    }
  }

What value can I substitute ??? for that will increment with each iteration? I know count.index works with a count=XX loop, but would like to not have to add the index value to the the map, since it's just calculated anyway.

1

There are 1 best solutions below

1
Marcin On BEST ANSWER

One way would be to add index to local.disks:

locals {
  disks = {
    sda = {
      size = 1024
      thin = true
      index = 0
    }
    sdb = {
      size = 2048
      thin = false
      index = 1
    }
  }
}

Alternatively iterate over keys:

 dynamic "storage" {
    for_each = keys(local.disks)
    content {
      disk_size             = local.disks[storage.value].size
      disk_thin_provisioned = local.disks[storage.value].thin
      disk_controller_index = storage.key # key will be index number
    }
  }

but the storage.key will not necessarily represent apparent order as in local.disks, because maps do not have order.