Вызовы функций
В языке OpenTofu есть ряд встроенных функций, которые можно использовать в выражениях для преобразования и объединения значений. Они похожи на операторы, но все имеют общий синтаксис:
<FUNCTION NAME>(<ARGUMENT 1>, <ARGUMENT 2>)
Имя функции указывает, какую функцию нужно вызвать. Каждая определённая функция ожидает конкретное количество аргументов с определёнными типами значений и возвращает результат определённого типа.
Некоторые функции принимают произвольное количество аргументов. Например, функция min принимает любое количество числовых аргументов и возвращает наименьшее из них:
min(55, 3453, 2)
В результате вычисления выражения вызова функции получается возвращаемое ею значение.
Доступные функции
Полный список доступных функций см. в справочнике по функциям.
Развёртывание аргументов функции
Если аргументы для передачи функции содержатся в списке или кортеже, это значение можно развернуть в отдельные аргументы. Передайте значение списка в качестве аргумента и добавьте после него символ ...:
min([55, 2453, 2]...)
Символ развёртывания состоит из трёх точек (...), а не из символа многоточия Unicode (…). Развёртывание — это специальный синтаксис, доступный только при вызове функций.
Использование конфиденциальных данных в качестве аргументов функций
При передаче конфиденциальных данных в качестве аргументов функций, например входной переменной или выходного значения, объявленного конфиденциальным, конфиденциальность информации в аргументах учитывается во время вызова функции.
Например, передача объекта, содержащего конфиденциальную входную переменную, функции keys() вернёт список со всеми ожидаемыми ключами, а функция values() вернёт список, первый элемент которого будет конфиденциальным, поскольку значение ключа "a" является конфиденциальным.
> local.baz
{
"a" = (sensitive value)
"b" = "dog"
}
> keys(local.baz)
[
"a",
"b",
]
> values(local.baz)
[
(sensitive value),
"dog",
]Когда OpenTofu вызывает функции
Большинство встроенных функций OpenTofu, говоря терминами языков программирования, — это чистые функции. Это означает, что их результат зависит только от аргументов, поэтому на практике не имеет значения, когда именно OpenTofu их вызывает.
Однако небольшое количество функций взаимодействует с внешним состоянием, поэтому полезно знать, когда OpenTofu вызывает их относительно других событий, происходящих во время выполнения OpenTofu.
К небольшому набору особых функций относятся file, templatefile, timestamp и uuid. Если вы не используете эти функции, этот раздел можно не читать, хотя приведённые здесь сведения могут быть полезны для общего понимания.
Функции file и templatefile предназначены для чтения файлов, включённых в конфигурацию как её статическая часть. Поэтому OpenTofu выполняет эти функции в ходе начальной проверки конфигурации, прежде чем предпринимать какие-либо другие действия с ней. Это означает, что с помощью этих функций нельзя читать файлы, которые конфигурация может динамически создавать на диске на этапах планирования или применения.
Функция timestamp возвращает представление текущего системного времени на момент её вызова OpenTofu, а функция uuid возвращает случайный результат, который меняется при каждом вызове. Без особого поведения обе функции приводили бы к тому, что итоговая конфигурация на этапе применения не соответствовала бы действиям, показанным в плане, что нарушило бы модель выполнения OpenTofu.
По этой причине OpenTofu возвращает результаты обеих функций в виде неизвестных значений на этапе планирования, а реальные результаты определяются только на этапе применения. В частности, для timestamp это означает, что зафиксированное время будет соответствовать моменту, когда OpenTofu начало применять изменение, а не моменту, когда OpenTofu составило план изменения.
Подробнее о поведении этих функций см. на страницах документации по каждой из них.
Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.12/language/expressions/function-calls/