HCL2 Image Build Definition
A generic HCL2 image-build definition exercising the grammar rather than any vendor schema: labelled blocks, a list variable, locals, an indent-stripping heredoc with an interpolation inside it, and a for expression producing a list.
# Generic HCL2 image-build definition. Not tied to any one tool: the point is the HCL2 grammar
# (blocks with labels, heredocs, interpolation, functions), not a vendor's schema.
variable "version_tag" {
type = string
default = "1.4.0"
}
variable "channels" {
type = list(string)
default = ["stable", "edge"]
}
locals {
build_name = "novus-${var.version_tag}"
timestamp = "2026-01-15T09:30:00Z"
}
source "example-builder" "base" {
image_family = "example-linux-1"
machine_type = "example-medium"
disk_size_gb = 20
ssh_username = "builder"
labels = {
name = local.build_name
channel = var.channels[0]
}
}
build {
name = local.build_name
sources = ["source.example-builder.base"]
provisioner "inline-notes" {
notes = <<-EOT
This heredoc is indented content with the leading whitespace stripped by <<-.
It exists so an HCL parser has a real multi-line string to handle,
including an interpolated value: ${local.build_name}.
EOT
}
provisioner "file-list" {
files = [
for channel in var.channels : "manifests/${channel}.json"
]
}
post-processor "manifest" {
output = "manifest.json"
strip_path = trueSpecifications
- Grammar
- HCL2
- Blocks
- 5
- Labelled Blocks
- 4
- Heredocs
- 1
- Heredoc Style
- <<- (indent-stripping)
- For Expressions
- 1
- Interpolations
- 3
Testing contract
Expected to pass- Scenario
- Parse HCL2 including an indent-stripping heredoc that contains an interpolation
- Expected result
- The <<-EOT heredoc parses with its leading indentation removed and its ${local.build_name} interpolation recorded as a reference, not as literal text
What is a .hcl file?
HCL (HashiCorp Configuration Language) is the block-structured configuration language behind Terraform, Packer, Nomad, Consul, and Vault. A document is a sequence of attributes (`name = expression`) and blocks (a type, zero or more string labels, and a braced body), with support for heredocs, function calls, conditionals, and for-expressions. It is designed to be both hand-written and machine-generated, and has a documented JSON-equivalent syntax.
How to use this file
Use an example .hcl file to test HCL parsers, configuration linters, and JSON-syntax converters, exercising nested blocks with multiple labels, heredoc indentation, and comment styles (`#`, `//`, and `/* */`).
How to use this file for testing
“HCL2 Image Build Definition” is a deterministic Novus Examples fixture for Config testing, Config parsing, Syntax highlighting. TOML, INI, YAML, .env, and dotfile configuration samples with nested sections and typed values — for testing config parsers, loaders, and environment tooling.
Documented properties for this file: HCL · 1,224 bytes. Compare results against paired or grouped companions on this page when present (clean↔damaged, searchable↔scanned, or format twins) so scores stay reproducible across runs.
Download the file once, keep the path stable in CI or local scripts, and treat the spec table as the contract: dimensions, seeds, field lists, and roles are intentional. Corrupt or invalid samples are labelled as such — expect parsers to fail loudly rather than silently accept them.
Pipeline and infrastructure fixtures are inert configuration: steps reference fictional images and scripts, and nothing here executes. Run your linter, schema validator, migrator, or policy engine against them, and expect the deprecated-syntax and intentionally invalid variants to be rejected.
Point your config loader at the file and assert it reads the documented sections and typed values, including any deliberately-tricky nesting or comments.
Related files
- hclHCL2 Orchestrator Job DefinitionA deeply nested HCL2 job definition — job, group, task, service, check — with duration strings, a port mapping, and restart and update policies. Four levels of block nesting, which is where hand-rolled HCL readers usually break.

- hclHCL2 Policy DocumentA generic HCL2 policy document with three severity-graded rules, condition blocks using all_of / none_of / one_of, and a dated exemption. Grants nothing to anything; it exists so policy tooling has a realistic document to read.

- tfvarsTerraform Default terraform.tfvarsA terraform.tfvars assigning the staging defaults, including a nested map-of-objects value. Pairs with the production overrides file, which replaces that map wholesale rather than merging into it.

- tfTerraform Locals, for Expressions, and dynamic BlocksThe expression-heavy half of the stack: for expressions producing both a map and a filtered list, conditional expressions selecting whole objects, and a dynamic block that generates two firewall rules from a local list.

- tfTerraform Module Calls with Meta-ArgumentsThree module calls covering the shapes a dependency grapher has to handle: a local path with explicit provider passing, a versioned registry source under for_each, and a count-gated conditional module.

- tfTerraform Outputs and Splat ExpressionsFive Terraform outputs exercising a splat expression over a counted resource, a for expression over a for_each module, and a sensitive output that must stay redacted when propagated from a sensitive input.

Generated by generation/pipelines.py. Free for any use, no attribution required — license.