訪問 terraform 地圖列表中的列表

安佳娜 S

我正在嘗試訪問 terraform 地圖列表中的列表。結構如下:

dynamic.tfvars
--------------

nacl=[
    {
        "vpc_name" = "vpc1"
        "acl_name" = "acl1"
        "subnet_name" = ["sub1-az1","sub2-az2"]
    },
    {
        "vpc_name" = "vpc2"
        "acl_name" = "acl2"
        "subnet_name" = ["sub1-az1","sub2-az2"]
    }
]

我正在嘗試從我的子模塊中的地圖列表中獲取“subnet_name”(列表),但它不起作用。下面是我正在使用的一段代碼。

main.tf
-------
data "aws_vpc" "vpc_nacl" {
  count = length(var.nacl[*])
  filter {
    name = "tag:Name"
    values = [element(var.nacl[*]["vpc_name"],count.index)]
  }
}

locals {
  lcl_vpc_nacl = data.aws_vpc.vpc_nacl.*.id
}

data "aws_subnet_ids" "example" {
  count = length(var.nacl[*]["subnet_name"])
  vpc_id = element(local.lcl_vpc_nacl,count.index)
  filter {
    name   = "tag:Name"
    values = [element(var.nacl[*]["subnet_name"],count.index)]
  }
}

執行 terraform 計劃時出現以下錯誤。

│ Error: Incorrect attribute value type
│
│   on Modules\NACL\Main.tf line 28, in data "aws_subnet_ids" "example":
│   28:     values = [element(var.nacl[*]["subnet_name"],count.index)]
│     ├────────────────
│     │ count.index is 1
│     │ var.nacl is list of object with 5 elements
│
│ Inappropriate value for attribute "values": element 0: string required.

任何修復或建議將不勝感激。提前致謝。

哈拉夫姆

aws_subnet_ids數據源文檔中,我看到valuesfilter期望的集合。

看起來你幾乎在那裡的代碼,但你正在傳遞一個列表列表,values這就是你有這個錯誤的原因。

element((var.nacl[*]["subnet_name"]), count.index)以列表的格式提取子網列表。

您所需要的只是轉換為 set 並在沒有方括號的情況下傳遞,如下所示..

main.tf
-------

data "aws_subnet_ids" "example" {
  count = length(var.nacl[*]["subnet_name"])
  vpc_id = element(local.lcl_vpc_nacl,count.index)
  filter {
    name   = "tag:Name"
    values = toset(element((var.nacl[*]["subnet_name"]), count.index))
  }
}

試一試,讓我知道這是否有幫助..

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章