我需要在 Terraform 中展平此列表吗?

问题描述 投票:0回答:1

我只是好奇我是否以最好的方式这样做,或者我错过了什么?

我有一个像这样定义的变量:

variable "acme_cert_requests" {
  type = list(object({
    key_name = string
    certs  = list(object({
      hostname = string
      zone_name = string
    }))
    owner = string
  }))
  description = "List of keys needed for certificate automation."
  nullable    = false
}

我路过:

acme_cert_requests = [
  {
    key_name = "test"
    certs  = [
      {
        hostname = "test1.domainB.com"
        zone_name = "domainB.com"
      },
      {
        hostname = "test2.domainA.com"
        zone_name = "domainA.com"
      },
      {
        hostname = "test3.domainA.com"
        zone_name = "domainA.com"
      }      
    ]
    owner = "[email protected]"
  }
]

我想要一份独特的

zone_name
列表。

我正在用这个:

distinct(flatten([for request in var.acme_cert_requests : [
    for zone in request.certs: zone.zone_name]
  ]))

输出:

[
      + "domainB.com",
      + "domainA.com",
]

如果没有展平,我最终会得到一个列表中的列表。有没有更直接的途径来实现这一点?

terraform
1个回答
0
投票

您想要的结果会丢弃描述各个证书请求的第一级嵌套,因此这似乎是一个使用

flatten
解决的好问题。

您共享的示例与 for_each

 的扁平化嵌套结构中的结构基本相同,尽管在该示例中具有两层嵌套 lists 而不是嵌套 maps ,因此您的情况与主要情况完全匹配flatten
 函数的目标。

© www.soinside.com 2019 - 2024. All rights reserved.