如何将 Terraform 地图变量转换为字符串?

how do I convert a Terraform map variable into a string?

我正在研究构建 json 模板和地图变量的 tf 计划,我不太确定如何使用现有的循环、类型、列表函数来完成这项工作.我知道我不能传递列表或映射到数据“template_file”所以我的想法是在本地或空资源块中构建字符串,然后将其传递给模板

变量

  variable "boostrap_servers" {
    type = map
    default = {
      "env01" : [
        "k01.env01",
        "k02.env01"
      ],
      "env02" : [
        "k01.env02"
      ]
  }

想要的文字

    "connections": {
      "env01": {
        "properties": {
          "bootstrap.servers": "k01.env01,k02.env01"
        }
      },
      "env02": {
        "properties": {
          "bootstrap.servers": "k01.env02"
        }
      },      

好的,下面的方法可行,但还有一个更好的问题:为什么不直接使用 jsonencode 函数来构建 json

locals {
  clusters = [
    for cluster, servers in var.boostrap_servers :
  "{\"${cluster}\":{\"properties\":{\"bootstrap.servers\":\"${join(" ,", servers)}\"}}"]
  connections = join(",", local.clusters)
}

您可以简单地使用 jsonencode 函数和列表理解:

locals {
  connections = jsonencode({
    for cluster, servers in local.bootstrap_servers :
    cluster => {
      properties = {
        "bootstrap.servers" = join(",", servers)
      }
    }
  })
}