Json 如何在地形模板文件中将字符串转换为数字

Json 如何在地形模板文件中将字符串转换为数字,json,terraform,terraform-template-file,Json,Terraform,Terraform Template File,我有一个terraform模板文件source.tpl——它是json,必须是json,因为它是由python json库生成的。此文件具有以下条目 [ { "data": { "address": "${NETWORK}", "netmask": "${NETMASK}", } } ] 在我的tf模块中,我呈现此模板: data "template_file" "source" { templ

我有一个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

在渲染输出中,我需要网络掩码为数字,网络为字符串。也就是说,它必须类似于:

                    data        = {
                        address   = "10.1.1.0"
                        netmask   = 24
                    }
但我得到了:

                    data        = {
                        address   = "10.1.1.0"
                        netmask   = "24"
                    }

即,网络掩码是一个字符串。我怎样才能去掉terraform中的那些引用?Initial source.tpl应该仍然有这些引号,因为如果我删除它们,它将成为无效的JSON。

我理解这里的问题,您正在使用一个JSON库生成模板,该库无法生成以下内容,因为它是无效的JSON,尽管这是您想要的模板

[
    {
        "data": {
            "address": "${NETWORK}",
            "netmask": ${NETMASK}
        }
    }
]
我可以推荐一点预处理吗?比如说

  template = "${replace(file("${path.module}/source.tpl"), "\"$${NETMASK}\"", "$${NETMASK}")}"

这是模板中的一个问题。将
“${NETMASK}”
更改为
${NETMASK}
。不幸的是,正如我所提到的-Initial source.tpl应该仍然有这些引号,因为如果我删除它们,它将成为无效的JSON。如果引号在模板中,它们将出现在呈现的输出中。Terraform不会为你移除它。非常感谢-这就是我一直在寻找的!