Skip to main content

Python-powered structural DSL for authoring native HCL2.

Project description

PHCL

PHCL is a Python DSL that compiles to native HCL2 and enables dynamic infrastructure generation.

Idea

In Terraform, HCL is great for describing infrastructure, but not for generating it dynamically. As complexity grows, configuration turns into a combinatorial explosion and becomes hard to maintain.

It also struggles when infrastructure depends on external data — YAML, JSON, databases, APIs — where data needs to be loaded, transformed, and combined before turning into resources.

PHCL moves generation, composition, and data processing into Python while keeping the output as clean, readable HCL2.

Architecture

PHCL is built around a small declarative core that treats Python classes as reusable HCL declaration shapes.

  • Classes as declarations — class bodies describe HCL structures directly instead of building an intermediate runtime config format.
  • Inheritance as refinement — subclasses extend and override existing declaration shapes, making reuse and specialization native to the model.
  • Registry and rendering — concrete top-level declarations are collected and emitted as plain HCL2.
  • Shared core, thin dialects — Terraform-, Packer-, and other HCL2-oriented layers can stay thin on top of the same PHCL foundation.

For example, instead of writing Terraform like this:

resource "aws_instance" "web" {
  ami           = "ami-123"
  instance_type = "t3.small"
}

PHCL aims to let you express the same declaration shape like this:

from phcl.terraform import Resource, TerraformPHCL as PHCL


class Web(Resource["aws_instance"]):
    ami = "ami-123"
    instance_type = "t3.small"

See also:

CLI

The CLI supports:

  • compile a single Python file into HCL output
  • walk a directory and compile each file independently
  • emit generated files next to sources, into another directory, or to stdout
  • read per-file output settings from a module-level PHCL config, defaulting output to .hcl

This makes PHCL easy to adopt incrementally:

  • generate one file beside existing HCL
  • generate one subtree into a separate output directory
  • generate an entire repository in place
  • generate an entire repository into another target tree

See also:

Installation

The package exposes a phcl CLI entrypoint:

pip install phcl

To install the Terraform dialect layer together with PHCL:

pip install 'phcl[terraform]'

Then:

phcl build <target>

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

phcl-0.1.1.tar.gz (16.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

phcl-0.1.1-py3-none-any.whl (21.5 kB view details)

Uploaded Python 3

File details

Details for the file phcl-0.1.1.tar.gz.

File metadata

  • Download URL: phcl-0.1.1.tar.gz
  • Upload date:
  • Size: 16.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for phcl-0.1.1.tar.gz
Algorithm Hash digest
SHA256 5958997b0b75f83e4d796427c60b4a7ed35e4b6485b1774f0282bf412af09178
MD5 ad56f1f731faa42b7dea96c04b69f2e2
BLAKE2b-256 7cf786057e91e5ee01c25a96f198cd7457787030bd4e3bad3e4af8b81bd8c8ac

See more details on using hashes here.

File details

Details for the file phcl-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: phcl-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 21.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for phcl-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b8e49de3712d24232beb3f86b67093000c907d5d39fc07042a5d3995d75f32b3
MD5 4d4401afed943d5423d0c7a2d30184b4
BLAKE2b-256 327adf1ca32a220a7b1e2cc852bcfd219ee5bf8e52d6f0441601ef446ba724c6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page