0
votes

I'm trying to use terraform variable data (CSV file) to create a resource group and the name of the resource group is added into the CSV file. I'm currently experiencing the below error

│ Error: Unsupported attribute │ │ on testtf.tf line 11, in resource "azurerm_resource_group" "Main": │ 11: name = local.resource_groupname[count.index].groupname │ ├──────────────── │ │ count.index is a number, known only after apply │ │ local.resource_groupname is list of object with 3 elements │ │ This object does not have an attribute named "groupname".

Code

provider "azurerm" {
    features{}
}

locals {
      resource_groupname = csvdecode(file("./test.csv"))
    }

    resource "azurerm_resource_group" "Main" {
      count    = length(local.resource_groupname)
      name     =  local.resource_groupname[count.index].groupname   
      location = "North europe"
    }

./test.csv content

https://drive.google.com/file/d/1ituKDzaMVXnyynkjLBZRzMdWK9tnkL14/view?usp=sharing

1
I don't see any reason why it woudn't work. Maybe, just like before, you posted wrong code, wrong error message or wrong csv file. Please double check.Marcin
The information is correct this time. I can across something similar to my concern on this like stackoverflow.com/questions/60986320/…, but I the solution was not very clear.Ogbebor Akpesiri

1 Answers

0
votes

I think the file you provided has UTF BOM (Byte Order Mark) bytes that cause TF and/or Azure to choke.

I recreated the csv file as plain ascii and your HCL worked ok

I found out about the extra characters by using terraform console. It is a very simple and quick way to troubleshoot TF errors.

I used this really basic .tf file to check the cvsdecode() behavior. (test0.csv below is your original file and test.csv my created from scratch text file):

locals {
      resource_groupname0 = csvdecode(file("./test0.csv"))
      resource_groupname = csvdecode(file("./test.csv"))
 }

Run terraform console and inspect the local variables. Note the BOM characters before "groupname" (test0.csv):

$ terraform console
> local.resource_groupname0
tolist([
  {
    "\ufeffgroupname" = "test11"
  },
  {
    "\ufeffgroupname" = "test12"
  },
  {
    "\ufeffgroupname" = "test13"
  },
])
> local.resource_groupname
tolist([
  {
    "groupname" = "test11"
  },
  {
    "groupname" = "test12"
  },
  {
    "groupname" = "test13"
  },
])

Also using the unix file command:

## Your file
$ file test0.csv
test0.csv: UTF-8 Unicode (with BOM) text, with CRLF line terminators

## Created by hand with text editor
$ file test.csv
test.csv: ASCII text