首页 > 解决方案 > 如何在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。

标签: jsonterraformterraform-template-file

解决方案


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

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

我可以推荐一点预处理吗?例如

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

推荐阅读