Перейти к содержанию

HCL to JSON

Преобразуйте конфигурацию HCL в стиле Terraform в эквивалент JSON.

Входные данные
Выходные данные

HCL to JSON

Вставьте HCL — язык, используемый Terraform, Packer и другими инструментами HashiCorp — и этот конвертер вернёт эквивалентный JSON. Он обрабатывает типичные структуры реального файла .tf: атрибуты верхнего уровня и блоки с нулевым или несколькими строковыми метками, такие как resource "aws_instance" "web", вложенные в другие блоки на произвольную глубину. Блоки с метками преобразуются используя соглашение, которое сам Terraform использует для синтаксиса .tf.json, поэтому ресурс с типом и именем располагается под resource → type → name в результате, а повторяющиеся блоки на одном пути — два блока ingress внутри одного ресурса — становятся массивом JSON вместо перезаписи друг друга.

Строки, числа, логические значения, null, списки и встроенные объекты (tags = { Name = "web" }) преобразуются напрямую. Heredoc-строки (<<EOT ... EOT и отступная форма <<-EOT) становятся обычными JSON-строками с сохранённными разрывами строк, а интерполяции ${var.name} — вместе с простыми ссылками вроде var.region или вызовами функций типа merge(a, b) — остаются буквальным текстом, так как браузер не может разрешить переменные Terraform или провайдеры.

Опции охватывают ширину отступа (2 пробела, 4 пробела, табуляции или минифицированный вид), сортировку ключей по алфавиту, сохранение или удаление комментариев и выбор между одним объединённым JSON-объектом или плоским списком блоков — каждый с типом, метками и содержимым — для более удобного написания скриптов. Дублирующиеся ключи атрибутов внутри блока отмечаются в живом счётчике, а не молча отбрасываются, и поддерживаются как Windows, так и Unix переводы строк.

Всё работает локально в вашем браузере — ваша конфигурация никогда не загружается, что важно, когда она содержит имена реальных ресурсов, IP-адреса или ID аккаунтов. Скопируйте JSON, загрузите его как файл .txt или отправьте прямо в другой инструмент для продолжения работы.

FAQ

Вычисляет ли это переменные и функции Terraform?
Нет. Интерполяции типа ${var.region} и простые выражения вроде var.region или merge(a, b) сохраняются как буквальный ${...} текст в выходных данных, так же как это представляет сам синтаксис JSON Terraform — этот инструмент не имеет доступа к значениям переменных, состоянию или провайдерам.
Как представляются блоки типа resource "aws_instance" "web"?
По меткам, вложенные в объект: resource → aws_instance → web содержит атрибуты этого блока. Это соответствует соглашению, которое сам Terraform использует для файлов .tf.json.
Что происходит с heredoc-строками?
Обе формы <<EOT и отступная форма <<-EOT преобразуются в обычную JSON-строку с настоящими разрывами строк. Отступная форма сначала имеет удалено общее начальное пространство, что соответствует тому, как это читает сам Terraform.
Можно ли получить плоский список блоков вместо одного большого объекта?
Да — переключите параметр "Формат выходных данных" на "Список блоков", чтобы получить массив записей, каждая с типом, метками и содержимым, что удобнее для написания скриптов.
Загружается ли где-нибудь моя конфигурация HCL?
Нет. Преобразование выполняется полностью в вашем браузере — ничто из того, что вы вставляете здесь, включая имена ресурсов или значения, никогда не покидает ваше устройство.