Terraform:将对象列表转换为来自对象的单个元素列表

Gol*_*lsh 7 terraform

我有一个来自 terraform 变量的对象列表

variable "persons" {
  type = list(object({
    name = string,
    phonenumber = string,
    tshirtSize = string
  }))
    description = "List of person"
}
Run Code Online (Sandbox Code Playgroud)

现在我想要一个人名列表,以便我可以用它来定义一个 AWS 资源

如何将此对象列表转换为名称列表 ["bob", "amy", "jane"]

我在 terraform 0.12.24 上,但如果需要可以升级

Gol*_*lsh 7

更新答案:
使用 splat 表达式

var.persons[*].name
Run Code Online (Sandbox Code Playgroud)

https://www.terraform.io/docs/configuration/expressions.html#splat-expressions

原始答案:
我能够在本地文件中执行此操作

locals {
  names = [
    for person in var.persons:
    person.name
  ]
}
Run Code Online (Sandbox Code Playgroud)

如需更多阅读,请参见:https : //www.hashicorp.com/blog/hashicorp-terraform-0-12-preview-for-and-for-each/

  • 这是一个很好的答案!您可能还对 [splat 表达式](https://www.terraform.io/docs/configuration/expressions.html#splat-expressions) 简写感兴趣:`var.persons[*].name`。该表达式页面是 Terraform 语言的最佳参考;0.12 公告博客文章是旧的且未更新。 (6认同)