将地图列表映射到terraform中选定字段值的列表

Uwe*_*ger 11 terraform

如果资源使用count参数来指定terraform中的多个资源,则有一种简单的语法,用于为资源实例提供专用字段的列表/数组.

例如

aws_subnet.foo.*.id
Run Code Online (Sandbox Code Playgroud)

由于许多版本可以声明具有复杂结构的变量,例如地图列表.

variable "data" {
  type = "list"
  default = [
    {
      id = "1"
      ...
    },
    {
      id = "10"
      ...
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种可能性来为我可以为多种资源做的变量做同样的事情:将数组投影到数组元素的字段值数组.

不幸

var.data.*.id
Run Code Online (Sandbox Code Playgroud)

不适用于资源.有没有可能这样做?

Bru*_*uce 17

template_file可以帮到你.

data "template_file" "data_id" {
  count = "${length(var.data)}"
  template = "${lookup(var.data[count.index], "id")}"
}
Run Code Online (Sandbox Code Playgroud)

然后你得到一个列表"${data.template_file.data_id.*.rendered}",其元素的值是"id".

您可以通过这样的索引获取其元素

"${data.template_file.data_id.*.rendered[0]}"
Run Code Online (Sandbox Code Playgroud)

或通过功能元素()

"${element(data.template_file.data_id.*.rendered, 0)}"
Run Code Online (Sandbox Code Playgroud)


Mar*_*ins 5

在撰写本文时,Terraform在其插值语言中没有广义投影功能."splat语法"是作为资源的特殊情况实现的.

虽然深层结构是可能的,但使用起来还不方便,所以建议仍然保持相对平坦.将来很可能会添加新的语言功能,使这种东西更有用.