2 min read | by Jordi Prats
Sometimes if you have some externally managed data it can come handy to be able to import it into terraform as a CSV file instead of having to manually enter all the date. To do so we can use the csvdecode() function
To be able to load a CSV file we will need to first load the file using the file() function and then decode it using the csvdecode() function as follows:
locals {
instances = csvdecode(file("demo.csv"))
}
Assuming that the CSV file contains the following data:
VM_Name,vCPU,RAM_MB
evl2400123,4,16384
evl2400456,8,49152
It will create the following data structure:
[
{
"VM_Name" = "evl2400123"
"vCPU" = "4"
"RAM_MB" = "16384"
},
{
"VM_Name" = "evl2400456"
"vCPU" = "8"
"RAM_MB" = "49152"
}
]
Once we have the data loaded, we can use for_each to iterate over the different objects. We just need to pick a unique value to create the set. On the example we can use the virtual machine name:
{ for inst in local.instances : inst.VM_Name => inst }
Finally we can iterate as follows:
resource "vsphere_virtual_machine" "vm" {
for_each = { for inst in local.instances : inst.VM_Name => inst }
name = each.value.VM_Name
num_cpus = each.value.vCPU
memory = each.value.RAM_MB
}
Posted on 10/08/2021