Sări la conținut

HCL în JSON

Convertiți configurația HCL în stil Terraform în JSON echivalent.

Intrare
Ieșire

HCL în JSON

Lipiți HCL — limbajul pe care îl folosesc Terraform, Packer și alte instrumente HashiCorp — și acest convertor returnează JSON-ul echivalent. Tratează formele comune ale unui fișier .tf real: atribute la nivel superior și blocuri cu zero sau mai multe etichete de șir, cum ar fi resource "aws_instance" "web", imbricate în alte blocuri la fel de adânc cât merge configurația dumneavoastră. Blocurile etichetate sunt convertite folosind aceeași convenție pe care o folosește sintaxa .tf.json din Terraform, deci o resursă cu un tip și un nume ajunge sub resource → type → name în rezultat, iar blocurile repetate pe același traseu — două blocuri ingress într-o resursă, să spunem — devin o matrice JSON în loc să se suprascrie una pe alta.

Şirurile, numerele, booleanul, null, listele și literalii de obiecte inline (tags = { Name = "web" }) se convertesc cu ușurință. Șirurile heredoc (<<EOT ... EOT și forma indentată <<-EOT) devin șiruri JSON simple cu salturi de linie păstrate, iar interpolările ${var.name} — alături de referințe directe ca var.region sau un apel ca merge(a, b) — rămân ca text literal în loc să fie evaluate, deoarece nicio unealtă de browser nu poate rezolva variabilele Terraform sau furnizorii.

Opțiunile acoperă lățimea indentării (2 spații, 4 spații, tabulații sau minificat), sortarea alfabetică a cheilor, păstrarea sau renunțarea la comentarii, și alegerea între un obiect JSON îmbinat sau o listă simplă de blocuri — fiecare cu tipul, etichetele și corpul acestuia — pentru scripturi mai ușoare. Cheile de atribut duplicate într-un bloc sunt marcate în contor în timp real, mai degrabă decât să fie tăcere eliminate, iar terminațiile de linie Windows și Unix sunt ambele acceptate.

Tot se execută local în browser — configurația dumneavoastră nu este niciodată încărcată, ceea ce contează atunci când denumește resurse reale, IP-uri sau ID-uri de cont. Copiați JSON-ul, descărcați ca fișier .txt sau trimiteți-l direct altei unelte pentru a continua lucrul.

FAQ

Aceasta evaluează variabilele și funcțiile Terraform?
Nu. Interpolările cum ar fi ${var.region} și expresiile directe cum ar fi var.region sau merge(a, b) sunt păstrate ca text literal ${...} în ieșire, exact așa cum le reprezintă sintaxa JSON a Terraform — această unealtă nu are acces la valorile variabilelor, starea sau furnizorii dumneavoastră.
Cum sunt reprezentate blocuri cum ar fi resource "aws_instance" "web"?
După etichetă, imbricat în obiect: resource → aws_instance → web conține atributele acelui bloc. Se potrivește cu convenția pe care o folosește Terraform pentru fișierele .tf.json.
Ce se întâmplă cu șirurile heredoc?
Atât <<EOT cât și forma indentată <<-EOT se convertesc într-un șir JSON normal cu salturi de linie reale. Forma indentată are spațiul său alb comun îndepărtat mai întâi, corespunzând modului în care o citește Terraform.
Pot obține o listă simplă de blocuri în loc de un obiect mare?
Da — schimbați "Forma de ieșire" la "Listă de blocuri" pentru a obține o matrice de înregistrări, fiecare cu tipul, etichetele și corpul acesteia, ceea ce este mai ușor de utilizat într-un script.
Configurația mea HCL este încărcată undeva?
Nu. Conversia se execută în întregime în browser — nimic din ceea ce lipiți aici, inclusiv nume de resurse sau valori, nu pleacă de pe dispozitivul dumneavoastră.