ویژگیهای کلیدی
- فرمتدهی آگاه از HCL2 برای بلوکهای سبک Terraform، ویژگیها، لیستها/نقشهها و heredocها
- تورفتگی و فاصلهگذاری یکپارچه حول =، کاماها، آکولادها و بلوکهای تو در تو
- نظرات و خطوط خالی عمدی را تا حد امکان برای خوانایی حفظ میکند
- با فایلهای .tf، .hcl، .tfvars مبتنی بر HCL و فایلهای Packer .pkr.hcl کار میکند
- خروجی idempotent: اجرای مجدد فرمتدهنده نتیجه یکسانی میدهد
- حداقل سطح تماس: یک عمل «Format» واحد، بدون تنظیمات سبک برای بحث
- کپی یا دانلود یککلیکی نتیجه فرمت شده از ویرایشگر
- پردازش مبتنی بر سرور از طریق یک endpoint امن — عالی برای اصلاحات سریع؛ برای کدهای بسیار حساس، CLI محلی را ترجیح دهید
🔧 نحوه استفاده از فرمتدهنده HCL for hcl-formatter
۱. کد خود را پیست یا رها کنید
فایل HCL/Terraform خود را باز کنید (.tf, .tfvars مبتنی بر HCL, .hcl, .pkr.hcl و غیره) و محتوا را در ویرایشگر پیست کنید، یا اگر مرورگر شما پشتیبانی میکند فایل را رها کنید.
۲. کلیک روی «قالببندی»
دکمه قالببندی را کلیک کنید. پیکربندی شما به یک بکاند امن ارسال میشود که قوانین سبک terraform fmt را برای تورفتگی، فاصلهگذاری و چیدمان اعمال میکند، سپس HCL2 قالببندی شده را برمیگرداند.
۳. بررسی، کپی یا دانلود
نتیجه را در ویرایشگر بررسی کنید، سپس آن را به IDE خود برگردانید یا فایل قالببندی شده را دانلود کرده و به مخزن خود commit کنید.
مشخصات فنی
مدل اجرا
قالببند مبتنی بر سرور است و برای شبیهسازی نرمالسازی چیدمان سبک terraform fmt برای HCL2 طراحی شده است.
| جنبه | جزئیات |
|---|---|
| حالت | مبتنی بر سرور (بدون WASM در مرورگر) |
| حوزه | فاصله سفید، تورفتگی، فاصلهگذاری، چیدمان پایه |
| بازچینی | بدون بازچینی معنایی منابع یا بلوکها |
| گزینهها | هیچ — یک عمل قالببندی برای خروجی قابل پیشبینی |
| محدودیتها | تقریباً ۱-۲ مگابایت ورودی، ~۲۵ ثانیه زمانانتظار سرور (قابل تنظیم) |
| نگهداری | پردازش موقت — ورودی پس از قالببندی دور ریخته میشود |
پوشش زبانی
سازههای رایج 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 | برای فایلهای *.tfvars.json از فرمتدهنده JSON یا terraform fmt استفاده کنید |
جایگزینهای خط فرمان
برای گردش کار روزمره زیرساخت به عنوان کد، از فرمتدهندههای رسمی به صورت محلی و در CI استفاده کنید و این ابزار آنلاین را برای پاکسازیهای سریع موردی نگه دارید.
macOS / Linux
Terraform: قالببندی در محل
terraform fmtفایلهای .tf و .tfvars مبتنی بر HCL را در دایرکتوری جاری بازنویسی میکند.
Terraform: بررسی بازگشتی CI (بدون نوشتن)
terraform fmt -check -recursiveدر صورت نیاز هر فایل به قالببندی، غیرصفر خارج میشود - مناسب برای CI و هوکهای پیش از commit.
Packer: قالببندی تمپلیت
packer fmt path/to/template.pkr.hclفایل HCL مشخص شده Packer را در محل قالببندی میکند.
ویندوز (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وقتی هر فایل Terraform به درستی فرمت نشده باشد، گردش کار را متوقف میکند.
فرمتبندی خودکار روی درخواستهای pull (اختیاری)
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 را اعمال میکند و یک کامیت فقط برای فرمتبندی به شاخه بازمیگرداند.
کاربردهای عملی
بهداشت PR و بازبینیها
فضاهای خالی و تورفتگیها را یکسان کنید تا بازبینها روی تغییرات واقعی زیرساخت تمرکز کنند.
- قبل از باز کردن یک درخواست pull فرمتبندی را اجرا کنید
- کاهش نظرات نکتهبینانه سبک در بازبینیهای Terraform
- تفاوتهای git را کوچک و معنادار نگه دارید
توسعه ماژول Terraform
ماژولها را در بین تیمها، مخازن و رجیستریها یکسان نگه دارید.
- تراز کردن بلوکهای متغیر و خروجی در ماژولهای مشترک
- اطمینان از مطابقت پیکربندیهای مثال با یک سبک خانه واحد
نگهبانی CI
از بررسیهای terraform fmt در CI برای جلوگیری از انحراف سبک در طول زمان استفاده کنید.
- افزودن `terraform fmt -check -recursive` به عنوان یک مرحله اجباری خط لوله
- مسدود کردن ادغامها تا زمانی که تمام فایلهای .tf فرمت شوند
راهاندازی و مستندات
مثالهای قابل خواندن به اعضای جدید تیم کمک میکنند تا هم Terraform و هم سبک خانه را سریع یاد بگیرند.
- انتشار قطعات کد یکسان فرمتشده در READMEها
- استفاده از مثالهای تمیز در جلسات آموزشی داخلی Terraform
❓ Frequently Asked Questions
🔒آیا کد من به صورت محلی پردازش میشود؟
🛡️آیا میتوانم رمزهای عبور را اینجا پیست کنم؟
🧩آیا قالببندی رفتار پیکربندی را تغییر میدهد؟
📄آیا میتوانم فایلهای .tfvars را قالببندی کنم؟
JSON از طریق `.tfvars.json` پشتیبانی میکند؛ آنها از قوانین JSON پیروی میکنند و بهتر است توسط یک قالببند JSON یا خود `terraform fmt` پردازش شوند.⚙️این ابزار چه تفاوتی با `terraform fmt` دارد؟
🧯چرا قالببندی شکست خورد؟
JSON با نحو HCL. مشکل ساختاری را برطرف کنید (یا از گویش/قالببند صحیح استفاده کنید) و دوباره امتحان کنید.Pro Tips
از `terraform fmt -check -recursive` در CI استفاده کنید تا از انحراف قالببندی در مخازن بزرگ زیرساخت جلوگیری شود.
از پیست کردن رمزهای عبور یا دادههای مرتبط با state در ابزارهای آنلاین خودداری کنید؛ مثالهای پیکربندی را پاکسازی نگه دارید و برای کد زیرساخت واقعی از قالببندهای CLI محلی استفاده کنید.
خطوط جدید انتهایی و تورفتگیها را در ویرایشگر خود نرمال کنید تا فایلهای Terraform diffهای تمیز و پایدار در تمام پلتفرمها تولید کنند.
یک هوک pre-commit اضافه کنید که `terraform fmt` را اجرا کند تا درخواستهای pull از قبل قالببندی شده ارسال شوند و گفتوگوهای بازبینی بر روی معماری و ریسک متمرکز بمانند.
Additional Resources
Other Tools
- زیباکننده CSS
- زیباکننده HTML
- زیباکننده JavaScript
- زیباکننده PHP
- انتخابگر رنگ
- استخراجکننده اسپرایت
- دیکودر Base64
- انکودر Base64
- فرمتدهنده C#
- فرمتدهنده CSV
- Dockerfile Formatter
- فرمتدهنده Elm
- فرمتدهنده ENV
- فرمتدهنده Go
- فرمتدهنده GraphQL
- فرمتدهنده INI
- فرمتدهنده JSON
- فرمتدهنده LaTeX
- فرمتدهنده Markdown
- فرمتدهنده Objective-C
- Php Formatter
- فرمتدهنده Proto
- فرمتدهنده Python
- فرمتدهنده Ruby
- فرمتدهنده Rust
- فرمتدهنده Scala
- فرمتدهنده اسکریپت شل
- فرمتدهنده SQL
- قالببندی SVG
- قالببندی Swift
- قالببندی TOML
- Typescript Formatter
- قالببندی XML
- قالببندی YAML
- قالببندی Yarn
- کوچککننده CSS
- Html Minifier
- Javascript Minifier
- کوچککننده JSON
- کوچککننده XML
- نمایشگر هدرهای HTTP
- PDF به متن
- تستکننده Regex
- بررسیکننده رتبه SERP
- جستجوی Whois