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



我正在研究一个tf计划,它构建了一个json模板和一个映射变量,我不太确定如何使用现有的循环,类型,列表函数来完成这项工作。我知道我不能传递列表或映射到数据"template_file"因此,我的想法是在locals或null资源块中构建字符串然后将其传递给模板

<标题>变量
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函数和列表推导:

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

好的,所以下面的工作,但有一个更好的问题:为什么不只是使用jsonencode函数来构建json

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

最新更新