mrkeyoor.com_
Sat 26 Sept 21:08 UTC
Automationevaluationupdated 27 Aug 2026

terraform review

Terraform is an infrastructure-as-code command-line tool that compares declarative configuration with provider-managed infrastructure, shows a plan, and applies the resulting changes. It gives teams a versioned way to create and modify cloud, service, and in-house resources through provider plugins.

+42stars / 7d
Verdict

Our Terraform run built successfully but ended with 101 of 102 test results passing, so the code is substantial and the supplied log still leaves one failure unexplained. New adopters should compare OpenTofu before committing, because the license difference can settle the decision even when the operating model is familiar. Use Terraform only with deliberate state, credential, locking, and review practices; the plan is a control point, not an automatic safety guarantee.

We ran it

Lab card: what happened when we ran terraformScreenshot of terraform (developer.hashicorp.com/terraform)
Install✓ · 162s562 packages
Build✓ · 217s
Tests✗ · 482s101 passed · 1 failed of 102 (go test)
Repo5447 files~695,694 lines of source · 26.5 MB · 11 CI workflows · Dockerfile

Answers from our run

Does terraform build from source?

Dependencies installed in 162 seconds (562 packages), and the build succeeded in 217 seconds. We cloned commit 883c722 into a clean Debian container with 3 CPUs and no project-specific setup.

Do terraform's tests pass?

Not all of them: 101 of 102 passed and 1 failed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use terraform?

Vendors building a paid hosted or embedded product that competes with IBM's paid Terraform offerings: the Business Source License restricts that use unless another license is obtained.

What are the alternatives to terraform?

OpenTofu, Pulumi, Crossplane. Our Terraform run built successfully but ended with 101 of 102 test results passing, so the code is substantial and the supplied log still leaves one failure unexplained.

Setup3/5Simple CLI, but providers, credentials, and state need design
Docs5/5Extensive CLI, language, workflow, provider, and module guidance
Community5/5Current releases and active core, provider, and module ecosystems
Maturity5/5Established workflow and ecosystem, with a major license caveat

Discussed on

  1. hnTerraform 1.0691 points
  2. hnTerraform is currently not reviewing community pull requests249 points
  3. hnTerraform 0.15 General Availability245 points
  4. hnOpenTerraform – an MPL fork of Terraform after HashiCorp's license change151 points
  5. hnThe future of Terraform CDK136 points

Who it’s for

Infrastructure teams managing resources across several cloud or service providers.
Organizations that can store state safely and require reviewed plans before changes.
Platform teams building reusable modules and standardized provisioning workflows.
Existing Terraform users who value its provider registry, HCL ecosystem, and established operating practices.

Who it’s NOT for

Vendors building a paid hosted or embedded product that competes with IBM's paid Terraform offerings: the Business Source License restricts that use unless another license is obtained.
Teams requiring an OSI-approved license for current core releases: Terraform 1.6.0 and later use BSL 1.1 and change to MPL 2.0 after the stated change period.
Operators unwilling to manage state, provider credentials, version locks, and plan review: the CLI cannot safely infer your governance rules.
Configuration-management jobs centered on changing software inside existing servers: Terraform's resource graph is aimed at provisioning and lifecycle management.
Contributors who require a clean plain-container test run before starting: our Go test command reported one failing result.

Setup reality

Our clean Go container installed 562 packages in 162 seconds, then built Terraform successfully in 217 seconds. Tests failed with exit code 1 after 482 seconds; go test reported 101 passed and 1 failed out of 102.

The log tail showed successful packages including internal/terraform, internal/tfdiags, and tools/defect-detector, followed by the overall FAIL. It did not include the name or output of the failed package, so the cause is unknown from the supplied evidence.

Using the CLI also means configuring provider credentials, initializing provider plugins, choosing a state backend, and pinning provider and module versions. The repository contains Terraform core only; providers arrive separately.

The plan is still Terraform's best idea

Terraform describes desired infrastructure in HCL, asks provider plugins to read remote systems, builds a dependency graph, and produces a plan of proposed changes. An operator can inspect that plan before applying it. Configuration belongs in version control, so a resource change can move through the same review process as application code.

That workflow remains easy to explain and hard to replace in a large organization. A database, network, DNS record, repository setting, and monitoring resource can live in one graph even though different APIs own them. Terraform creates independent resources in parallel and orders dependent ones. Modules let a platform team package approved patterns for other teams.

The plan is only as trustworthy as its inputs. Provider behavior, configuration values, current state, and the remote API all affect what Terraform proposes. A saved plan can make review and apply refer to the same calculation, but teams still need access controls, state locking, drift policy, version pins, and a recovery process.

Core and providers are separate systems

This repository contains the CLI and graph engine. AWS, Azure, Google Cloud, GitHub, Kubernetes, and thousands of other integrations are provider plugins distributed elsewhere. terraform init resolves and downloads the providers declared by a configuration, while the lock file records selected versions.

That separation keeps core from becoming a collection of vendor clients. It also means Terraform health does not guarantee provider quality. Each provider has its own releases, maintainers, schema changes, bugs, and upgrade notes. A team should evaluate the providers it will depend on, pin acceptable ranges, commit the dependency lock file, and test module upgrades in a non-production account.

State is the other half of operation. Terraform uses it to associate declared resource addresses with remote objects and stored attributes. Local state is convenient for learning. Shared work needs a backend with access policy, locking where supported, backup, and recovery. State and plans may contain operationally sensitive values, so they belong in controlled storage rather than casual build artifacts.

What happened when we ran it

We cloned commit 883c722 into an unprivileged Debian container with 3 CPUs, 8 GB of RAM, no secrets, and Go 1.24. The checkout had 5,447 files, about 695,694 lines of source, and occupied 26.5 MB. It contained 11 CI workflow files and a Dockerfile. There was no top-level tests directory, which is normal for a Go project whose tests sit beside packages.

Installation succeeded in 162 seconds and downloaded 562 packages. The build succeeded in 217 seconds. These results confirm that core compiled in the clean lab environment without provider credentials or cloud accounts.

The test command failed with exit code 1 after 482 seconds. The go test summary reported 101 passed and 1 failed out of 102. Its final lines showed successful results for packages such as internal/terminal, internal/terraform, internal/tfdiags, tools/defect-detector, and version, then the overall FAIL. The failed package and error were outside the supplied tail, so we cannot say what broke.

Licensing changes the shortlist

Terraform core version 1.6.0 and later uses the Business Source License 1.1. The additional use grant permits production use unless the software is offered to third parties on a paid hosted or embedded basis as a competitive offering that significantly overlaps IBM's paid versions. Internal organizational use is explicitly outside that definition. Each version changes to MPL 2.0 after four years under the stated license parameters.

Most infrastructure teams using Terraform internally can operate within that grant. Vendors, managed-service builders, and products embedding Terraform need a careful license review. This is a concrete reason to walk away, not a philosophical footnote. OpenTofu preserves a closely related workflow under MPL 2.0 and has become the first comparison for organizations that require an open-source core.

Pulumi offers a different authoring choice, using familiar programming languages. Crossplane moves infrastructure into Kubernetes reconciliation. Ansible is better matched to procedural host configuration. None is a drop-in answer for every Terraform estate, but greenfield teams should choose the operating model and license before their module library becomes expensive to move.

Maintenance is current and conservative

Terraform was pushed on August 26, 2026, and release v1.16.0 arrived that day. It added import blocks inside modules, JSON output for state show and workspace list, and a Linux s390x binary. GitHub showed 1,917 open issues and pull requests combined, with current work on imports, state migration, plans, policy, and module installation.

Issue 39047 reports terraform init hanging when it reuses a cached Git module without a manifest version, including reproduction on the latest release. Issue 39026 tracks a flaky JSON plan test whose expected elapsed duration can change. These reports are specific, active, and surrounded by related fixes, which is healthier than a quiet tracker. They also support the usual advice: pin versions, test upgrades, and keep an escape path for initialization or state problems.

Terraform is still a strong tool when a team wants declarative provisioning, broad providers, reviewable plans, and a mature module culture. The correct default for an existing estate may be to stay. For a new platform, compare OpenTofu and Pulumi first, then choose with licensing, state operations, and team skills in view rather than repository popularity.

Alternatives

ProjectWhat it isPick it when
OpenTofu gh↗A Terraform-compatible infrastructure-as-code tool governed under the Linux Foundation and licensed MPL 2.0.pick this instead when open governance and an OSI-approved license are firm requirements.
Pulumi gh↗An infrastructure-as-code platform that uses general-purpose programming languages alongside declarative resource models.pick this instead when your team prefers TypeScript, Python, Go, C#, Java, or YAML over HCL.
Crossplane gh↗A Kubernetes control plane for composing and continuously reconciling external infrastructure.pick this instead when Kubernetes APIs and ongoing reconciliation are the center of your platform.
AnsibleAn agentless automation engine widely used for server configuration and procedural operations.pick this instead when configuring operating systems and applications matters more than declarative resource provisioning.

What people are saying

  1. [github-trending] hashicorp/terraform

Sources

  1. Terraform README
  2. Terraform Business Source License
  3. Terraform v1.16.0 release
  4. Cached Git module init hang
  5. Flaky JSON plan test
  6. Terraform state documentation

More automation reviews

runner-images · agent-fleet-manager · kargo · Rose · alchemy · laya · the whole board →