json - 如何在terraform模板文件中将字符串转换为数字
问题描述
我有一个 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"
}
即网络掩码是一个字符串。我怎样才能摆脱 terraform 中的那些引号?初始 source.tpl 应该仍然有这些引号,因为如果我删除它们 - 它会变成无效的 JSON。
解决方案
我理解这里的问题,您正在使用 JSON 库生成模板,该库无法生成类似以下内容,因为它是无效的 JSON,尽管这是您想要的模板
[
{
"data": {
"address": "${NETWORK}",
"netmask": ${NETMASK}
}
}
]
我可以推荐一点预处理吗?例如
template = "${replace(file("${path.module}/source.tpl"), "\"$${NETMASK}\"", "$${NETMASK}")}"
推荐阅读
- android - 改造 @Patch 方法(更新一个对象,其中包含一个 ArrayList)
- c# - 创建一个方法,其中一个参数可以是数组或字符串
- f# - 此示例中使用的“*”是什么?
- sql - Query to match primary key from Customer table and CustomerCard based on CustomerEmail and CustomerCardNumber?
- sql - Joining SAS data to a Teradata table
- jquery - jQuery点击功能阻止ajax请求
- python - 从目录动态创建python模块
- c# - 有没有办法在使用 Jint.NET 时切换环境?
- flutter - Flutter 版本升级后的 Hero on Tab 行为
- python - How can I save all my produced permutations into a Numpy array?