Возникла ошибка при попытке вывести содержимое CSV-файла с помощью terraform

Я пытаюсь использовать данные переменных terraform (файл CSV) для создания группы ресурсов, и имя группы ресурсов добавляется в файл CSV. В настоящее время у меня возникает ошибка, указанная ниже

│ Ошибка: неподдерживаемый атрибут │ │ в строке 11 testtf.tf в ресурсе azurerm_resource_group Main: │ 11: name = local.resource_groupname [count.index] .groupname │ ├─────────────── ── │ │ count.index - это число, известное только после применения │ │ local.resource_groupname - это список объектов с 3 элементами │ │ Этот объект не имеет атрибута с именем groupname.

Код

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 контент

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


comment
Я не вижу причин, по которым это не сработает. Возможно, как и раньше, вы разместили неправильный код, неправильное сообщение об ошибке или неправильный CSV-файл. Пожалуйста, проверьте дважды.   -  person Marcin    schedule 19.06.2021
comment
На этот раз информация верна. Я могу найти что-то похожее на мою озабоченность по этому поводу, например stackoverflow.com/questions/60986320/, но решение было не очень ясным.   -  person Ogbebor Akpesiri    schedule 19.06.2021


Ответы (1)


Я думаю, что в предоставленном вами файле есть байты UTF BOM (Byte Order Mark), которые заставляют TF и ​​/ или Azure задыхаться.

Я воссоздал файл csv как простой ascii, и ваш HCL работал нормально

Я узнал о дополнительных символах, используя terraform console. Это очень простой и быстрый способ устранения ошибок TF.

Я использовал этот действительно простой .tf файл, чтобы проверить cvsdecode() поведение. (test0.csv ниже - ваш исходный файл, а test.csv - текстовый файл, созданный с нуля):

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

Запустите консоль terraform и проверьте локальные переменные. Обратите внимание на символы спецификации перед именем группы (test0.csv):

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

Также с помощью команды файла unix:

## 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
person RafaP    schedule 19.06.2021
comment
Это действительно помогло ... Я только что сохранил файл в формате с разделителями-запятыми, и он работал нормально. - person Ogbebor Akpesiri; 20.06.2021
comment
рад, что это сделал. пожалуйста, отметьте ответ как полезный, чтобы помочь другим людям, у которых может быть такая же проблема - person RafaP; 21.06.2021