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 Testaroo 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.
Generated by generation/pipelines.py. Free for any use, no attribution required, license.
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.
