我有一个terraform模板文件source.tpl
-它是一个json,必须是JSON,因为它是由python json库生成的。该文件具有以下条目
[
{
"data": {
"address": "${NETWORK}",
"netmask": "${NETMASK}",
}
}
]
在我的tf模块中,我渲染了这个模板:
data "template_file" "source" {
template = "${file("${path.module}/source.tpl")}"
vars = {
NETWORK = element(split("/", "${var.cidr}"),0)
NETMASK = tonumber(element(split("/", "${var.cidr}"),1))
}
}
其中cidr是字符串-类似10.1.1.0/24
在渲染的输出中,我需要NETMASK为数字,而NETWORK为字符串。即它必须是这样的:
data = {
address = "10.1.1.0"
netmask = 24
}
但是我得到了:
data = {
address = "10.1.1.0"
netmask = "24"
}
即netmask是一个字符串。如何摆脱terraform中的那些引号?最初的source.tpl仍应带有这些引号,因为如果我将其删除,它将变成无效的JSON。
答案 0 :(得分:2)
我在这里理解了问题,您正在使用JSON库生成模板,但由于它是无效的JSON,因此无法生成如下所示的内容,尽管这就是您想要的模板
[
{
"data": {
"address": "${NETWORK}",
"netmask": ${NETMASK}
}
}
]
我建议您进行一些预处理吗?例如
template = "${replace(file("${path.module}/source.tpl"), "\"$${NETMASK}\"", "$${NETMASK}")}"