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