Spec-Zone.ru › OpenTofu 1.9

Типы и значения

Результатом выражения является значение. У всех значений есть тип, который определяет, где это значение можно использовать и какие преобразования к нему можно применять.

Типы​

В языке OpenTofu используются следующие типы значений:

  • string: последовательность символов Юникода, представляющая текст, например "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 предусмотрен синтаксис литеральных выражений для каждого из описанных выше типов значений.

Строки​

Строки обычно представляются заключённой в двойные кавычки последовательностью символов Юникода: "like this". Для более сложных строк также предусмотрен синтаксис «heredoc».

Строковые литералы — самый сложный вид литеральных выражений в OpenTofu, и им посвящена отдельная страница документации. Сведения о последовательностях экранирования, синтаксисе 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.9/language/expressions/types/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API