terraform
stableA Terraform HCL code generator that produces resource, variable, output, provider, module, and backend blocks as strings for use in infrastructure-as-code workflows.
use plugin terraform::{build_resource, build_variable, build_output, …} Functions (14)
- build_resource Generate a resource block
- build_variable Generate a variable block
- build_output Generate an output block
- build_provider Generate a provider block
- build_data Generate a data source block
- build_locals Generate a locals block
- build_module Generate a module block
- build_terraform Generate a terraform required_providers block
- build_backend Generate a terraform backend block
- build_provisioner Generate a provisioner block
- concat_blocks Join multiple HCL blocks into one string
- hcl_string Wrap a value as a quoted HCL string
- hcl_list Render a table as an HCL list literal
- hcl_map Render a table as an HCL map literal
Generate a resource block
Generates a resource block. attrs is a table of attribute key-value pairs. Nested tables become nested blocks.
use plugin terraform::{terraform}
let block = terraform.build_resource("aws_s3_bucket", "my_bucket", #{"bucket": "my-app-bucket", "force_destroy": true})
print(block)
use plugin terraform::{terraform}
let vpc = terraform.build_resource("aws_vpc", "main", #{
"cidr_block": "10.0.0.0/16",
"tags": #{"Name": "main-vpc", "Env": "prod"}
})
print(vpc)
Generate a variable block
Generates a variable block with an optional default value and description.
use plugin terraform::{terraform}
let v = terraform.build_variable("region", "string", '"us-east-1"', "AWS region to deploy into")
print(v)
Generate an output block
Generates an output block. value_expr is the HCL expression string assigned to value.
use plugin terraform::{terraform}
let out = terraform.build_output("bucket_arn", "aws_s3_bucket.my_bucket.arn")
print(out)
Generate a provider block
Generates a provider block with the given attributes table.
use plugin terraform::{terraform}
let p = terraform.build_provider("aws", #{"region": "us-east-1", "profile": "default"})
print(p)
Generate a data source block
Generates a data source block, which reads existing infrastructure without managing it.
use plugin terraform::{terraform}
let ami = terraform.build_data("aws_ami", "ubuntu", #{
"most_recent": true,
"owners": '["099720109477"]'
})
print(ami)
Generate a locals block
Generates a locals block from a table of name-to-expression pairs.
use plugin terraform::{terraform}
let locals = terraform.build_locals(#{"env": '"production"', "prefix": '"myapp"'})
print(locals)
Generate a module block
Generates a module block referencing the given source path or registry address.
use plugin terraform::{terraform}
let mod = terraform.build_module("terraform-aws-modules/vpc/aws", "vpc", #{
"version": '"3.0.0"',
"cidr": '"10.0.0.0/16"'
})
print(mod)
Generate a terraform required_providers block
Generates a terraform { required_providers { ... } } block. Each key maps to a table with source and version.
use plugin terraform::{terraform}
let tf = terraform.build_terraform(#{
"aws": #{"source": "hashicorp/aws", "version": "~> 5.0"}
})
print(tf)
Generate a terraform backend block
Generates a terraform { backend "type" { ... } } block for remote state configuration.
use plugin terraform::{terraform}
let backend = terraform.build_backend("s3", #{
"bucket": "my-tfstate",
"key": "prod/terraform.tfstate",
"region": "us-east-1"
})
print(backend)
Generate a provisioner block
Generates a standalone provisioner block. Embed it inside a resource string using concat_blocks.
use plugin terraform::{terraform}
let prov = terraform.build_provisioner("local-exec", #{"command": "echo done"})
print(prov)
Join multiple HCL blocks into one string
Joins a table of HCL block strings together with newlines between them, producing a single file-ready string.
use plugin terraform::{terraform}
let provider = terraform.build_provider("aws", #{"region": "us-east-1"})
let bucket = terraform.build_resource("aws_s3_bucket", "assets", #{"bucket": "my-assets"})
let output = terraform.build_output("bucket_name", "aws_s3_bucket.assets.bucket")
let file = terraform.concat_blocks([provider, bucket, output])
print(file)
Wrap a value as a quoted HCL string
Wraps val in escaped HCL double quotes. Useful when building expressions to pass to build_variable or build_locals.
use plugin terraform::{terraform}
print(terraform.hcl_string("us-east-1"))
Render a table as an HCL list literal
Renders a table of values as an HCL list literal, e.g. ["a", "b"].
use plugin terraform::{terraform}
let zones = terraform.hcl_list(["us-east-1a", "us-east-1b", "us-east-1c"])
print(zones)
Render a table as an HCL map literal
Renders a table as an HCL map literal { key = value ... }. Useful for inline map attributes.
use plugin terraform::{terraform}
let tags = terraform.hcl_map(#{"Env": '"prod"', "Team": '"platform"'})
print(tags)