Перейти до вмісту

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?
Ні. Перетворення виконується повністю у вашому браузері — ніщо з того, що ви вставляєте тут, включаючи імена ресурсів чи значення, ніколи не залишає ваш пристрій.