尝试使用 terraform 输出 csv 文件的内容时遇到错误

Experiencing an error when try to output content of a csv file using terraform

我正在尝试使用 terraform 变量数据(CSV 文件)创建资源组,并且资源组的名称已添加到 CSV 文件中。我目前遇到以下错误

│ 错误:不支持的属性 │ │ 在 testtf.tf 第 11 行,在资源“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

我认为您提供的文件包含导致 TF and/or Azure 阻塞的 UTF BOM(字节顺序标记)字节。

我将 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 控制台并检查局部变量。注意“groupname”前的BOM字符(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