Как преобразовать строку в число в файле шаблона terraform - PullRequest
1 голос
/ 24 марта 2020

У меня есть файл шаблона 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.

1 Ответ

2 голосов
/ 25 марта 2020

Я понимаю проблему здесь, вы генерируете шаблон, используя библиотеку JSON, которая не может выдать что-то вроде следующего, так как он недействителен JSON, хотя вы хотите, чтобы шаблон был

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

Могу ли я порекомендовать немного предварительной обработки? Например

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