Синтаксис конфигурации
На других страницах этого раздела описаны различные конструкции конфигурации, которые могут встречаться в языке OpenTofu. На этой странице подробнее описан низкоуровневый синтаксис языка и раскрыты основные элементы, из которых состоят эти конструкции.
На этой странице описан нативный синтаксис языка OpenTofu — богатого языка, разработанного так, чтобы людям было относительно легко читать и писать на нём. Конструкции языка OpenTofu также можно представить в виде синтаксиса JSON, который людям сложнее читать и редактировать, но программно генерировать и разбирать его проще.
Низкоуровневый синтаксис языка OpenTofu определён на основе синтаксиса под названием HCL, который также используется в языках конфигурации других приложений, в частности других продуктов HashiCorp. Для работы с OpenTofu не обязательно знать все детали синтаксиса HCL, поэтому на этой странице приведены наиболее важные сведения. Полное описание синтаксиса HCL можно найти в спецификации нативного синтаксиса HCL.
Аргументы и блоки
Синтаксис языка OpenTofu строится вокруг двух ключевых конструкций: аргументов и блоков.
Аргументы
Аргумент присваивает значение определённому имени:
image_id = "abc123"
Идентификатор перед знаком равенства — это имя аргумента, а выражение после знака равенства — значение аргумента.
Контекст, в котором указан аргумент, определяет допустимые типы его значения (например, у каждого типа ресурса есть схема, определяющая типы его аргументов), однако многие аргументы принимают произвольные выражения, позволяющие указывать значение напрямую или программно формировать его на основе других значений.
Язык конфигурации OpenTofu основан на более общем языке HCL, в документации которого обычно используется слово «атрибут», а не «аргумент». В этом контексте эти слова достаточно близки по смыслу, чтобы использовать их как взаимозаменяемые, и опытные пользователи OpenTofu могут употреблять любой из терминов в неформальной беседе. Однако OpenTofu также взаимодействует с несколькими другими сущностями, называемыми «атрибутами» (в частности, у ресурсов OpenTofu есть атрибуты, такие как id, на которые можно ссылаться в выражениях, но которым нельзя присваивать значения в конфигурации). Поэтому в документации OpenTofu для этой синтаксической конструкции мы используем термин «аргумент».
Блоки
Блок — это контейнер для другого содержимого:
resource "aws_instance" "example" {
ami = "abc123"
network_interface {
# ...
}
}У блока есть тип (в этом примере — resource). Для каждого типа блока определено, сколько меток должно следовать за ключевым словом типа. Для типа блока resource требуются две метки: в приведённом выше примере это aws_instance и example. Для определённого типа блока может требоваться любое количество меток или ни одной, как для вложенного типа блока network_interface.
После ключевого слова типа блока и всех меток его тело ограничено символами { и }. Внутри тела блока можно размещать другие аргументы и блоки, образуя иерархию блоков и связанных с ними аргументов.
В языке OpenTofu используется ограниченное число блоков верхнего уровня — блоков, которые могут находиться в файле конфигурации вне любых других блоков. Большинство возможностей OpenTofu (в том числе ресурсы, входные переменные, выходные значения, источники данных и т. д.) реализованы в виде блоков верхнего уровня.
Идентификаторы
Имена аргументов, имена типов блоков и имена большинства специфичных для OpenTofu конструкций, таких как ресурсы и входные переменные, — это идентификаторы.
Идентификаторы могут содержать буквы, цифры, символы подчёркивания (_) и дефисы (-). Первый символ идентификатора не должен быть цифрой, чтобы избежать неоднозначности с литеральными числами.
Для полного набора правил составления идентификаторов OpenTofu реализует синтаксис идентификаторов Unicode с расширением, включающим символ ASCII-дефиса -.
Комментарии
Язык OpenTofu поддерживает три разных синтаксиса комментариев:
-
#начинает однострочный комментарий, который заканчивается в конце строки. -
//также начинает однострочный комментарий и служит альтернативой#. -
/*и*/— начальный и конечный разделители комментария, который может занимать несколько строк.
Стиль однострочных комментариев # используется по умолчанию и подходит для большинства случаев. Инструменты автоматического форматирования конфигурации могут автоматически преобразовывать комментарии // в комментарии #, поскольку стиль с двойной косой чертой не является идиоматичным.
Кодировка символов и окончания строк
Файлы конфигурации OpenTofu всегда должны быть закодированы в UTF-8. Хотя в качестве разделителей языка используются только символы ASCII, OpenTofu допускает символы, не входящие в ASCII, в идентификаторах, комментариях и строковых значениях.
OpenTofu принимает файлы конфигурации как с окончаниями строк в стиле Unix (только LF), так и с окончаниями строк в стиле Windows (CR, затем LF), однако идиоматичным считается стиль Unix, поэтому инструменты автоматического форматирования конфигурации могут автоматически преобразовывать окончания CRLF в LF.
Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.11/language/syntax/configuration/