Типы и значения
Результат выражения — это значение. Все значения имеют тип, который определяет, где это значение можно использовать и какие преобразования к нему можно применять.
Типы
В языке OpenTofu для значений используются следующие типы:
-
string: последовательность символов Unicode, представляющая текст, например"hello". -
number: числовое значение. Типnumberможет представлять как целые числа, например15, так и дробные значения, например6.283185. -
bool: логическое значение — либоtrue, либоfalse. Значенияboolможно использовать в условной логике. -
list: последовательность значений, например["us-west-1a", "us-west-1c"]. Элементы списка идентифицируются последовательными целыми числами, начиная с нуля. -
set: набор уникальных значений без дополнительных идентификаторов и порядка. -
map: группа значений, идентифицируемых именованными метками, например{name = "Mabel", age = 52}.
Строки, числа и логические значения иногда называют примитивными типами. Списки и множества — это разновидности кортежей. Отображения — разновидность объектов. Кортежи и отображения иногда называют сложными типами, структурными типами или типами-коллекциями. Подробное описание сложных типов см. в разделе Ограничения типов.
Наконец, существует особое значение, у которого нет типа:
-
null: значение, обозначающее отсутствие или пропуск. Если задать для аргумента ресурса значениеnull, OpenTofu поведет себя так, как если бы аргумент был полностью опущен: будет использовано значение аргумента по умолчанию, если оно задано, или возникнет ошибка, если аргумент обязателен. Значениеnullнаиболее полезно в условных выражениях: с его помощью можно динамически опустить аргумент, если условие не выполнено.
Литеральные выражения
Литеральное выражение — это выражение, непосредственно представляющее определенное постоянное значение. В OpenTofu предусмотрен синтаксис литеральных выражений для каждого из описанных выше типов значений.
Строки
Строки обычно представлены последовательностью символов Unicode в двойных кавычках: "like this". Для более сложных строк также предусмотрен синтаксис «heredoc».
Строковые литералы — самый сложный вид литеральных выражений в OpenTofu; им посвящена отдельная страница документации. Сведения об escape-последовательностях, синтаксисе heredoc, интерполяции и директивах шаблонов см. в разделе Строки.
Числа
Числа представлены последовательностями цифр без кавычек, с десятичной точкой или без нее, например 15 или 6.283185.
Логические значения
Логические значения представлены символами без кавычек true и false.
Null
Значение null представлено символом без кавычек null.
Списки/кортежи
Списки/кортежи представлены парой квадратных скобок, содержащих разделенную запятыми последовательность значений, например ["a", 15, true].
Для удобства чтения литералы списков можно разбивать на несколько строк, но значения всегда должны разделяться запятыми. После последнего значения запятая допускается, но не обязательна. Значениями в списке могут быть произвольные выражения.
Отображения/объекты
Отображения/объекты представлены парой фигурных скобок, содержащих набор пар <KEY> = <VALUE>:
{
name = "John"
age = 52
}Пары «ключ/значение» можно разделять запятыми или переносами строк.
Значениями в отображении могут быть произвольные выражения.
Ключи в отображении должны быть строками; их можно не заключать в кавычки, если они являются допустимыми идентификаторами, в противном случае кавычки обязательны. В качестве ключа можно использовать строковое выражение, не являющееся литералом, заключив его в круглые скобки, например (var.business_unit_tag_name) = "SRE".
Индексы и атрибуты
Доступ к элементам списков/кортежей и отображений/объектов можно получить с помощью индексной записи в квадратных скобках, например local.list[3]. Выражение в скобках должно быть целым числом для значений типа «список» и «кортеж» или строкой для значений типа «отображение» и «объект».
К атрибутам отображения/объекта с именами, являющимися допустимыми идентификаторами, также можно обращаться с помощью записи через точку, например local.object.attrname. Если отображение может содержать произвольные ключи, заданные пользователем, рекомендуется использовать только индексную запись в квадратных скобках (local.map["keyname"]).
Подробнее о сложных типах
В большинстве случаев списки и кортежи ведут себя одинаково, как и отображения и объекты. Если различие несущественно, в документации OpenTofu эти термины используются взаимозаменяемо (исторически чаще используются термины «список» и «отображение»).
Однако авторам модулей и разработчикам провайдеров следует понимать различия между этими похожими типами (и связанным с ними типом set), поскольку они позволяют по-разному ограничивать допустимые значения входных переменных и аргументов ресурсов.
Полное описание этих типов (и объяснение, почему различие обычно не имеет значения) см. в разделе Ограничения типов.
Преобразование типов
Чаще всего выражения используются для задания значений аргументов ресурсов и дочерних модулей. В таких случаях для аргумента ожидается определенный тип, и заданное выражение должно возвращать значение этого типа.
Если это возможно, OpenTofu автоматически преобразует значения из одного типа в другой, чтобы получить ожидаемый тип. Если это невозможно, OpenTofu выдаст ошибку несоответствия типов, и вам потребуется изменить конфигурацию, используя более подходящее выражение.
При необходимости OpenTofu автоматически преобразует числовые и логические значения в строки. Также он преобразует строки в числа или логические значения, если строка содержит допустимое представление числа или логического значения.
-
trueпреобразуется в"true"и наоборот -
falseпреобразуется в"false"и наоборот -
15преобразуется в"15"и наоборот
Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.10/language/expressions/types/