带有 CSV 文件的天蓝色 Terraform 参数

Posted

技术标签:

【中文标题】带有 CSV 文件的天蓝色 Terraform 参数【英文标题】:azure Terraform parameter with CSV file 【发布时间】:2020-07-14 02:44:00 【问题描述】:

我正在尝试使用 CSV 文件访问 terraform 变量数据,创建资源组并将资源组的名称添加到 CSV 文件中并尝试访问代码。

代码如下:

locals 
  Resource_groupname = csvdecode(file("$path.module/onkar.csv"))


//Create a resource group
resource "azurerm_resource_group" "Customer11" 
  count    = length(local.Resource_groupname)
  name     = local.Resource_groupname[count.index].resourcegroup_name
  location = "North europe"

我收到以下错误:

on admin.tf line 15, in resource "azurerm_resource_group"
"Customer11":   15:   name     =
local.Resource_groupname[count.index].resourcegroup_name
     |----------------
     | local.Resource_groupname is list of object with 1 element
This object does not have an attribute named "resourcegroup_name".

更新

This is error SS

CSV file

Updated Code: 

  locals 
  Resource_groupname = csvdecode(file("./test.csv"))
  
  resource "azurerm_resource_group" "Customer11" 
  count    = length(local.Resource_groupname)
  name     = local.Resource_groupname[count.index].group_names 
  location = "North europe"
  

新更新

 locals 
      Resource_groupname = csvdecode(file("./test.csv"))
    

    resource "azurerm_resource_group" "Customer11" 
      count    = length(local.Resource_groupname)
      name     =  local.Resource_groupname[count.index].Resource_groupname   
      location = "North europe"
    

新的更新 CSV 文件和输出

Error

CSV file

【问题讨论】:

错误很明显:您没有名为local.Resource_groupname.resourcegroup_name 的对象,您只定义了一个名为local.Resource_groupname 的对象。这个resourcegroup_name 来自哪里? 资源组名称来自 CSV 文件我已将名称存储在 CSV 文件中,资源组名称为列名。 csv文件长什么样子? 和excel一样扩展是CSV UTF-8(逗号分隔)格式 【参考方案1】:

为了从 CSV 文件加载输入,我假设你的 CSV 文件只有一行,它看起来像这样:

test1,test2,test3

然后您可以从 CSV 文件中加载和使用它们,如下所示:

locals 
  group_names = split(",", file("./test.csv"))


resource "azurerm_resource_group" "Customer11" 
  count    = length(local.group_names)
  name     = local.group_names[count.index]
  location = "North europe"

如果你像这样使用 CSV 文件:

resource_group_name
test1
test2
test3

那么 terraform 代码应该变成这样:

locals 
  group_names = csvdecode(file("./test.csv"))


resource "azurerm_resource_group" "main" 
  count       = length(local.group_names)
  name        = local.group_names[count.index].resource_group_name
  location    = "East US"

更新:

使用您提供的 CSV 文件,您需要像这样更改资源组名称:

resource "azurerm_resource_group" "Customer11" 
  count    = length(local.Resource_groupname)
  name     = local.Resource_groupname[count.index].group_names   # here is the change
  location = "North europe"

这是 CSV 文件的屏幕截图:

您可以尝试输出local.Resource_groupname,看看您从 CSV 文件加载数据时的样子。

更新2

我真的不明白为什么你不知道该怎么做。这是我对所有东西的测试截图,希望你解决它:

Terraform 文件和 CSV 的内容。

Terraform 计划:

【讨论】:

第二个代码显示相同的错误 agian @Charles XU 错误:资源“azurerm_resource_group”“main”中的 admin.tf 第 14 行不支持属性:14:name = local.group_names [ count.index].resource_group_name |---------------- | local.group_names 是包含 3 个元素的对象列表 此对象没有名为“resource_group_name”的属性。 我已经尝试了两个代码,它再次显示相同的错误。第一个代码显示以下错误,我已按照您的方法保存 CSV 文件内容。 “错误:“名称”在资源“azurerm_resource_group”“Customer11”中的 admin.tf 第 12 行中只能包含字母数字字符、短划线、下划线、括号和句点:12:资源“azurerm_resource_group”“Customer11”“ @terraform-ninja 只显示 CSV 文件。没有消息,我无法弄清楚。 我添加了您在第二个解决方案顶部提供的相同内容,如资源组名称,然后在单个列中添加数据,如 test1、test2、test3,然后将 excel 文件保存为 CSV UTF -8(逗号分隔)格式... @terraform-ninja 你说的值 test1,test2,test3 应该在每一行中输入,而不是在一行中。可以?我需要再说一遍,名称group_nameslocals 块中的数组名称。 resource_group_name 是您在 CSV 文件第一行中设置的名称。【参考方案2】:

显然有同样的问题,由于某种原因它不会读取第一列,您可以将所有数据向右移动一列,将第一列留空。为我工作。

【讨论】:

以上是关于带有 CSV 文件的天蓝色 Terraform 参数的主要内容,如果未能解决你的问题,请参考以下文章

azure terraform 将 azure 文件共享附加到 Windows 机器

Terraform:删除身份块不会删除从资源天蓝色逻辑应用程序分配的身份

在 Azure 门户中导入带有链接服务的管道

带有 S3 后端的 Terraform 如何发现所有工作区?

jmeter,csv文件入参遇到的坑

Jmeter之csv传参遇到的问题