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

时间:2020-03-24 19:20:10

标签: json terraform terraform-template-file

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

1 个答案:

答案 0 :(得分:2)

我在这里理解了问题,您正在使用JSON库生成模板,但由于它是无效的JSON,因此无法生成如下所示的内容,尽管这就是您想要的模板

[
    {
        "data": {
            "address": "${NETWORK}",
            "netmask": ${NETMASK}
        }
    }
]

我建议您进行一些预处理吗?例如

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