Přeskočit na obsah

HCL do JSON

Převeďte konfiguraci HCL v stylu Terraformu na ekvivalentní JSON.

Vstup
Výstup

HCL do JSON

Vložte HCL — jazyk používaný Terraformem, Packerem a dalšími nástroji HashiCorpu — a tento konvertor vrátí ekvivalentní JSON. Zpracovává běžné tvary skutečného souboru .tf: atributy na nejvyšší úrovni a bloky s nula nebo více řetězcovými popisky, jako je resource "aws_instance" "web", vnořené do dalších bloků tak hluboko, jak jde vaše konfigurace. Bloky s popisky se konvertují pomocí stejné konvence jako samotná Terraformova syntaxe .tf.json, takže zdroj s typem a jménem skončí pod resource → type → name ve výsledku a opakující se bloky na stejné cestě — dva ingress bloky v rámci jednoho zdroje — se stanou polem JSON místo vzájemného přepsání.

Řetězce, čísla, logické hodnoty, null, seznamy a vložené literály objektů (tags = { Name = "web" }) se konvertují přímo. Heredoc řetězce (<<EOT ... EOT a odsazená forma <<-EOT) se stanou běžnými JSON řetězci se zachovanými zlomením řádků a interpolace ${var.name} — spolu s odkazy jako var.region nebo volání jako merge(a, b) — zůstanou jako doslova text místo vyhodnocení, protože žádný nástroj v prohlížeči nemůže vyřešit Terraformovy proměnné nebo poskytovatele.

Možnosti zahrnují šířku odsazení (2 mezery, 4 mezery, tabulátory nebo minimalizované), řazení klíčů abecedně, zachování nebo vynechání komentářů a volbu mezi jedním sloučeným JSON objektem nebo plochým seznamem bloků — každý s jeho typem, popisky a tělem — pro snadnější skriptování. Duplicitné klíče atributů v bloku jsou označeny v živém počítadle místo tichého vynechání a znaky konce řádku Windows i Unix jsou přijímány.

Všechno se spouští lokálně ve vašem prohlížeči — vaše konfigurace se nikdy nenahrává, což je důležité, když pojmenovává skutečné zdroje, IP adresy nebo ID účtů. Zkopírujte JSON, stáhněte si jej jako soubor .txt nebo jej pošlete přímo do jiného nástroje, abyste mohli pokračovat v práci.

Časté dotazy

Vyhodnocuje to proměnné a funkce Terraformu?
Ne. Interpolace jako ${var.region} a čisté výrazy jako var.region nebo merge(a, b) se zachovávají jako doslovaný text ${...} ve výstupu, přesně tak, jak je představuje samotná Terraformova JSON syntaxe — nástroj nemá přístup k vašim hodnotám proměnných, stavu ani poskytovatelům.
Jak jsou reprezentovány bloky jako resource "aws_instance" "web"?
Podle popisku vnořeného v objektu: resource → aws_instance → web obsahuje atributy bloku. Odpovídá konvenci, kterou samotný Terraform používá pro soubory .tf.json.
Co se stane s heredoc řetězci?
Obě formy <<EOT i odsazená forma <<-EOT se konvertují na normální JSON řetězec se skutečným zlomením řádků. Odsazená forma má nejprve odstraněno své společné úvodní prázdné místo, což odpovídá tomu, jak ji čte Terraform.
Mohu dostat plochý seznam bloků místo jednoho velkého objektu?
Ano — přepněte "Forma výstupu" na "Seznam bloků" a získáte pole záznamů, z nichž každý má svůj typ, popisky a tělo, které je snadnější procházet ve skriptu.
Je moje konfigurace HCL kdekoli nahrána?
Ne. Konverze probíhá zcela ve vašem prohlížeči — nic, co sem vložíte, včetně názvů zdrojů nebo hodnot, nikdy neopustí vaše zařízení.