Populate a map from a list of maps using a unique key/value

Hi all, is it possible to create a map from a list of maps using a unique key/value in this list. In this case the key for each map should be the vm_name.

Before

vm_list = [
  {
     vm_name = frontend
     cpu = 4
     memory
     disk = 50
  },
  {
     vm_name = backend
     cpu = 8
     memory 16
     disk = 100
   },
   {
      vm_name = dns
      cpu = 2 
      memory = 4
      disk 30
    }
]

After

frontend =  {
     cpu = 4
     memory
     disk = 50
  },
  backend = {
     cpu = 8
     memory 16
     disk = 100
   },
   dns = {
      cpu = 2 
      memory = 4
      disk 30
    }

How about this?

locals {
  vm_list = [
    {
      vm_name = "frontend"
      cpu = 4
      memory = 16
      disk = 50
    },
    {
      vm_name = "backend"
      cpu = 8
      memory = 16
      disk = 100
    },
    {
        vm_name = "dns"
        cpu = 2 
        memory = 4
        disk = 30
    }
  ]
}

output "vm_map" {
  value = {
    for vm in local.vm_list : vm.vm_name => {
      cpu = vm.cpu
      memory = vm.memory
      disk = vm.disk
    }
  }
}

Test:

$ terraform plan

Changes to Outputs:
  + vm_map = {
      + backend  = {
          + cpu    = 8
          + disk   = 100
          + memory = 16
        }
      + dns      = {
          + cpu    = 2
          + disk   = 30
          + memory = 4
        }
      + frontend = {
          + cpu    = 4
          + disk   = 50
          + memory = 16
        }
    }
1 Like

thanks @JHashimoto0518

1 Like