Loading…

Про сервіс Онлайн форматувальник HCL / Terraform

Terraform, Packer та інші інструменти HashiCorp використовують HCL2 — і всі вони виглядають краще при послідовному форматуванні. Цей форматувальник HCL надсилає вашу конфігурацію на захищений бекенд, який застосовує правила у стилі terraform fmt до відступів, пробілів та розмітки, а потім повертає нормалізований HCL2, не змінюючи семантику.

Ключові можливості

  • Форматування з підтримкою HCL2 для блоків у стилі Terraform, атрибутів, списків/мап та heredoc
  • Послідовні відступи та пробіли навколо =, ком, фігурних дужок та вкладених блоків
  • Зберігає коментарі та навмисні порожні рядки, де це можливо, для зручності читання
  • Працює з файлами .tf, .hcl, .tfvars на основі HCL та Packer .pkr.hcl
  • Ідемпотентний вивід: повторний запуск форматувальника дає той самий результат
  • Мінімальна складність: одна дія «Форматувати», без налаштувань стилю для суперечок
  • Одно-клікове копіювання або завантаження відформатованого результату з редактора
  • Обробка через захищений ендпоінт — чудово для швидких виправлень; для дуже конфіденційного коду краще використовувати локальний CLI

🔧 Як використовувати форматувальник HCL for hcl-formatter

1

1. Вставте або перетягніть ваш код

Відкрийте ваш HCL/Terraform файл (.tf, HCL-based .tfvars, .hcl, .pkr.hcl тощо) і вставте вміст у редактор, або перетягніть файл, якщо ваш браузер підтримує це.

2

2. Натисніть «Форматувати»

Натисніть кнопку Форматувати. Ваша конфігурація надсилається на захищений серверний компонент, який застосовує правила форматування terraform fmt до відступів, пробілів та розташування, а потім повертає відформатований HCL2.

3

3. Перегляньте, скопіюйте або завантажте

Перевірте результат у редакторі, потім скопіюйте його назад у ваше IDE або завантажте відформатований файл і закомітьте його у ваш репозиторій.

Технічні характеристики

Модель виконання

Форматер працює на сервері та розроблений для імітації нормалізації розташування у стилі terraform fmt для HCL2.

АспектДеталі
РежимСерверний (без WASM у браузері)
Область застосуванняПробіли, відступи, інтервали, базове розташування
ПереупорядкуванняБез семантичного переупорядкування ресурсів або блоків
ОпціїВідсутні — єдина дія Форматування для передбачуваного результату
ОбмеженняПриблизно 1–2 МБ вхідних даних, ~25с таймаут сервера (може змінюватися)
ЗберіганняТимчасова обробка — вхідні дані видаляються після форматування
Як і з будь-яким онлайн-інструментом, уникайте вставки виробничих секретів. Використовуйте terraform fmt або packer fmt локально для чутливого коду.

Покриття мови

Розуміє поширені конструкції HCL2, що використовуються в Terraform та інших інструментах HashiCorp.

КонструкціяПрикладиПримітки
Блокиresource, variable, output, module, locals, job, taskСтруктура вкладених блоків зберігається
Атрибутиname = "web", count = 2Пробіли нормалізовані навколо = та між атрибутами
Колекції[1, 2, 3], { key = value }Уніфіковане розташування для списків та карт/об'єктів
Heredocs<<-EOF ... EOFМаркери збережено; відступи нормалізовано там, де це можливо
КоментаріКоментарі у стилі # та //Зберігаються там, де це можливо, для збереження наміру та документації

Міні До/Після

Невеликий приклад очищення відступів та пробілів у ресурсі Terraform.

# До
resource "aws_s3_bucket" "b"{bucket="demo"
  tags={Name="demo"}}

# Після
resource "aws_s3_bucket" "b" {
  bucket = "demo"

  tags = {
    Name = "demo"
  }
}
Лише трансформація розташування: ідентифікатори, вирази та посилання залишаються незмінними.

Помилки та Граничні Випадки

Якщо форматування не вдається або повертає помилку, це зазвичай пов'язано з проблемами парсингу вхідних даних HCL2.

СимптомЙмовірна причинаЩо перевірити
Немає виводу / помилка парсингуНезакрита фігурна дужка, квадратна дужка або дужкаПорахуйте відповідні пари { }, [ ], ( ) та закрийте всі блоки
Проблеми з HeredocВідсутній або невідповідний термінаторПереконайтеся, що маркери на кшталт EOF з'являються точно та на окремому рядку
Змішані стиліТабуляції/пробіли або зайві символиНормалізуйте відступи, видаліть зайві керівні символи
Плутанина з .tfvarsСинтаксис JSON проти HCLВикористовуйте форматер JSON або terraform fmt для файлів *.tfvars.json

Альтернативи Командного Рядка

Для щоденних робочих процесів Інфраструктури як Код використовуйте офіційні форматери локально та в CI, а цей онлайн-інструмент зберігайте для швидких ад-хок очищень.

macOS / Linux

Terraform: форматування на місці

terraform fmt

Переписує .tf та HCL-базовані .tfvars файли в поточному каталозі.

Terraform: рекурсивна перевірка CI (без запису)

terraform fmt -check -recursive

Завершується ненульовим кодом, якщо будь-який файл потребує форматування — ідеально для CI та pre-commit хуків.

Packer: форматування шаблону

packer fmt path/to/template.pkr.hcl

Форматує вказаний HCL файл Packer на місці.

Windows (PowerShell)

Форматувати всі файли Terraform рекурсивно

Get-ChildItem -Recurse -Filter *.tf | ForEach-Object { terraform fmt $_.FullName }

Запускає terraform fmt для кожного знайденого файлу .tf у поточному каталозі.

Перевірка форматування у стилі CI

terraform fmt -check -recursive

Використовуйте в пайплайнах збірки для провалу, коли форматування застаріло.

GitHub Actions

Провалити збірку, якщо потрібне форматування

steps:
  - uses: hashicorp/setup-terraform@v3
  - run: terraform fmt -check -recursive

Зупиняє workflow, коли будь-який файл Terraform не відформатовано належним чином.

Автоформатування в pull requests (опціонально)

steps:
  - run: terraform fmt -recursive
  - run: git diff --quiet || (git config user.name "bot" && git config user.email "bot@example" && git commit -am "chore: terraform fmt" && git push)

Застосовує terraform fmt і відправляє коміт лише з форматуванням назад у гілку.

Для регульованого або конфіденційного коду інфраструктури віддавайте перевагу локальним CLI інструментам і застосовуйте `terraform fmt -check -recursive` в CI замість відправки файлів до онлайн форматерів.

Практичне Застосування

Гігієна PR та Рев'ю

Уніфікуйте пробіли та відступи, щоб рецензенти могли зосередитись на реальних змінах інфраструктури.

  • Запустіть форматування перед відкриттям pull request
  • Зменшіть дріб'язкові коментарі щодо стилю в рев'ю Terraform
  • Зберігайте git diff невеликими та змістовними

Розробка Модулів Terraform

Підтримуйте узгодженість модулів між командами, репозиторіями та реєстрами.

  • Вирівняйте блоки змінних та виводу в спільних модулях
  • Забезпечте відповідність прикладів конфігурацій єдиному стилю

Контроль у CI

Використовуйте перевірки terraform fmt в CI для запобігання дрейфу стилю з часом.

  • Додайте `terraform fmt -check -recursive` як обов'язковий крок пайплайну
  • Блокуйте злиття, доки всі файли .tf не відформатовано

Онбординг та Документація

Читабельні приклади допомагають новим членам команди швидко вивчити як Terraform, так і стиль компанії.

  • Публікуйте узгоджені фрагменти в README
  • Використовуйте чисті приклади у внутрішніх тренінгах з Terraform

❓ Frequently Asked Questions

🔒Мій код обробляється локально?

Ні. Цей HCL форматер працює на сервері: ваші вхідні дані відправляються на безпечний кінцевий пункт для форматування, і отриманий HCL повертається у ваш браузер. Для високочутливого або регульованого коду інфраструктури віддавайте перевагу локальному запуску `terraform fmt` (або `packer fmt`).

🛡️Чи можна вставляти секрети сюди?

Ми настійно рекомендуємо не вставляти робочі секрети в будь-які онлайн-інструменти. Навіть якщо сервіс захищений і розроблений для тимчасової обробки, довготривалі або високочутливі облікові дані повинні зберігатися лише в локальних файлах, сховищах секретів або CI-сховищах — а не в браузерних інструментах.

🧩Чи змінює форматування поведінку конфігурації?

Ні. Форматувальник зосереджується на макеті: пробіли, відступи та інтервали. Блоки ресурсів, аргументи, вирази та посилання залишаються незмінними, за умови, що оригінальний HCL був коректним.

📄Чи можна форматувати .tfvars файли?

Так, якщо .tfvars файл використовує синтаксис HCL. Terraform також підтримує змінні у форматі JSON через `.tfvars.json`; вони слідують правилам JSON і краще обробляються JSON-форматувальником або самим `terraform fmt`.

⚙️Чим це відрізняється від `terraform fmt`?

`terraform fmt` — це канонічний форматувальник, що постачається з Terraform, і він ідеальний для локальної розробки та CI. Цей веб-інструмент призначений для швидкого, ад-hoc очищення, коли у вас немає під рукою CLI або ви хочете прибрати невеликий фрагмент у браузері.

🧯Чому форматування не вдалося?

Більшість невдач — це помилки парсингу: незакриті дужки або квадратні дужки, неправильно сформовані heredocs, або змішування tfvars у стилі JSON з синтаксисом HCL. Виправте структурну проблему (або використовуйте правильний діалект/форматувальник) і спробуйте ще раз.

Pro Tips

CI Tip

Застосовуйте `terraform fmt -check -recursive` у CI, щоб запобігти розбіжностям у форматуванні у великих репозиторіях інфраструктури.

Security Tip

Уникайте вставки секретів або даних, пов'язаних із станом, в онлайн-інструменти; зберігайте приклади конфігурацій очищеними та використовуйте локальні CLI-форматувальники для реального коду інфраструктури.

Best Practice

Нормалізуйте кінцеві нові рядки та відступи у вашому редакторі, щоб файли Terraform створювали чисті, стабільні диффи на різних платформах.

Best Practice

Додайте pre-commit хук, який запускає `terraform fmt`, щоб pull requests надходили вже відформатованими, а обговорення рецензій могли зосередитися на архітектурі та ризиках.

Additional Resources

Other Tools