Синтаксис конфигурации
На других страницах этого раздела описаны различные конструкции конфигурации, которые могут встречаться в языке 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.10/language/syntax/configuration/