Terraform Extensions
Two module extensions live in //terraform:extensions.bzl:
terraform_toolchains
No user-facing configuration. On evaluation it materializes one hub repo
(@terraform_toolchains) that declares a toolchain per (version, platform),
each guarded by a target_settings matching
//terraform/settings:version_<v>. rules_terraform's own MODULE.bazel
use_repos the hub and register_toolchainss it, so downstream users get
toolchain resolution for free — no ceremony beyond flipping
//terraform/settings:version to pick which Terraform
release to actually download. Per-(version, platform) http_archives are
lazy; only the selected combination is fetched.
# In your MODULE.bazel — nothing to do beyond `bazel_dep`:
bazel_dep(name = "rules_terraform", version = "...")
terraform
Carries providers and modules tag classes for users who want to pin
providers or registry-modules via Bazel-managed fetching.
terraform = use_extension("@rules_terraform//terraform:extensions.bzl", "terraform")
# One providers hub per `.terraform.lock.hcl` you want to fetch.
terraform.providers(
name = "my_providers",
lock = "//path/to/module:.terraform.lock.hcl",
# registry = "registry.opentofu.org", # optional; defaults to registry.terraform.io
)
# One modules hub per `terraform_modules.lock.json` (generated by lockgen).
terraform.modules(
name = "my_modules",
lock = "//path/to/module:terraform_modules.lock.json",
)
use_repo(terraform, "my_providers", "my_modules")
terraform.providers
| Attribute | Type | Description |
|---|---|---|
name | string (required) | Hub repository name. Each declared provider lives at @<name>//<namespace>_<name>. |
lock | label (required) | .terraform.lock.hcl file to fetch providers from. |
registry | string (default registry.terraform.io) | Registry host to query. |
terraform.modules
| Attribute | Type | Description |
|---|---|---|
name | string (required) | Hub repository name. Each fetched module is aggregated under @<name>//:<name>. |
lock | label (required) | terraform_modules.lock.json file (see terraform_modules_lock.md). |