如何将 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)
}
}
})
}
我正在研究构建 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)
}
}
})
}