templatestring Функция
Функция templatestring позволяет отображать строки как шаблоны, подставляя значения из предоставленного набора переменных шаблона вместо заполнителей.
templatestring(str, vars)
Синтаксис шаблонов соответствует правилам строковых шаблонов основного языка OpenTofu и использует последовательности интерполяции, ограниченные ${ ... }. Эта функция позволяет вынести длинные последовательности шаблонов в отдельную строку, что повышает удобство чтения и сопровождения.
При использовании функции templatestring важно помнить о последовательностях экранирования, которые предотвращают преждевременную интерполяцию. Чтобы заполнители оставались литералами до их преобразования в переменные шаблона, используйте последовательности экранирования $${...} и %%{...} для представления литералов ${...} и %{...} соответственно. Это не позволяет шаблону интерпретировать заполнители как последовательности интерполяции или директив шаблона до их обработки. Следуя этому соглашению, вы можете точно задавать строки шаблонов, не сталкиваясь с неожиданными синтаксическими ошибками. Не забывайте применять эти последовательности экранирования при определении строк шаблонов, чтобы функция templatestring обрабатывала их правильно.
Аргумент "vars" должен быть объектом. В строке шаблона каждый ключ карты служит переменной для интерполяции. Кроме того, в шаблоне можно использовать любую другую функцию, доступную в языке OpenTofu. Имена переменных должны соответствовать соглашениям об именовании OpenTofu: начинаться с буквы, за которой может следовать любое количество букв, цифр или символов подчёркивания.
Поскольку строки в OpenTofu представляют собой последовательности символов Юникода, templatestring интерпретирует строку шаблона как текст в кодировке UTF-8, обеспечивая корректную обработку символов Юникода. Любые недопустимые последовательности UTF-8 в строке шаблона приведут к ошибке.
Примеры
Простой строковый шаблон
Простой пример использования templatestring для статической строки.
output "result" {
value = templatestring("Hello, Jodie!", {})
}result = Hello, Jodie!
Интерполяция строки с переменной
В этом примере показана интерполяция строки путём вставки значения переменной в шаблон.
output "result" {
value = templatestring("Hello, $${name}!", { name = "Alice" })
}result = Hello, Alice!
Списки
В этом примере показано использование функции templatestring с переменной-списком.
output "result" {
value = templatestring("List Items: $${join(\", \", list)}", { list=["value1","value2","value3"] })
}result = "List Items : value1, value2, value3"
Карты
В этом примере показано использование функции templatestring с переменной-картой. Выполняется перебор пар «ключ — значение» в карте.
output "result" {
value = templatestring("%%{ for key, value in list ~} $${key}:$${value} %%{ endfor ~}", { list={key1="value1", key2="value2", key3="value3"} })
}result = "key1:value1 key2:value2 key3:value3 "
Создание JSON или YAML
При создании строк с синтаксисом JSON или YAML написание шаблона с многочисленными последовательностями интерполяции и директивами может быть затруднительным. Вместо этого упростите процесс, используя шаблон, состоящий из единственного вызова с интерполяцией — jsonencode или yamlencode, — и задав кодируемое значение с помощью стандартного синтаксиса выражений OpenTofu, как показано в следующих примерах:
locals {
list = ["Value1", "Value2", "Value3"]
formatted_list = "%{ for value in local.list ~}${value} %{ endfor ~}"
}
output "result" {
value = templatestring(yamlencode(local.formatted_list), {})
}result = <<-EOT
"Value1 Value2 Value3 "
EOTДополнительные сведения см. в основной документации по функциям jsonencode и yamlencode.
Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.9/language/functions/templatestring/