【问题标题】:How to convert string to number in terraform template file如何在terraform模板文件中将字符串转换为数字
【发布时间】:2020-07-05 08:26:21
【问题描述】:

我有一个 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 是一个字符串。 IE。它必须是这样的:

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

但我得到了:

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

即网络掩码是一个字符串。我怎样才能摆脱 terraform 中的那些引号?初始 source.tpl 应该仍然有这些引号,因为如果我删除它们 - 它会变成无效的 JSON。

【问题讨论】:

  • 这是模板中的问题。将"${NETMASK}" 更改为${NETMASK}
  • 不幸的是,就像我提到的 - 初始 source.tpl 应该仍然有那些引号,因为如果我删除它们 - 它会变成无效的 JSON。
  • 如果引号在模板中,它们将出现在呈现的输出中。 Terraform 不会为您删除它。

标签: json terraform terraform-template-file


【解决方案1】:

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

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

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

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

【讨论】:

  • 非常感谢 - 这就是我想要的!
猜你喜欢
  • 1970-01-01
  • 2012-06-11
  • 2018-01-23
  • 2015-05-24
相关资源
最近更新 更多