Loading a CSV file into terraform

terraform csvdecode function csv

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