Releasing Terraform 0.12.0-rc1

We're almost there! Release candidate 1 of Terraform 0.12.0 is now available for testing. Unless testing identifies a significant blocker, we expect to publish the final 0.12.0 release a few weeks from now.

Thank you to everyone who has tested the beta1 and beta2 releases. Your feedback and bug reports have been invaluable for identifying some rough edges that our automated and manual tests weren't previously covering. As a result, we are optimistically confident that this release candidate should function well for most users.

With that said, it is still only a release candidate, so we recommend caution when testing against existing infrastructure. Please refer to the upgrade guide for information on the upgrade process. We would very much appreciate you testing this release candidate to find any remaining bugs and friction points so that we can address them before the final release.

We recommend creating a separate copy of your infrastructure to test and testing individual parts in isolation if your infrastructure is modularized. It is also safe to use terraform plan to run a speculative plan against existing infrastructure without affecting it or its Terraform state.

Warning: If you run terraform apply, terraform input, or any of the terraform state subcommands with an existing state file, Terraform will update your persisted state to the new 0.12 storage format, making it incompatible with Terraform 0.11.

Aside from responding to any further bug reports from this release candidate, we are planning to use the remaining time before the final release to finalize the upgrade guide and smooth some minor rough edges in the upgrade process.

» Provider Compatibility

During the beta1 and beta2 periods, the various Terraform provider developers (within HashiCorp, within partner companies, and in the community) have been hard at work making as many providers as possible available for testing. As we write this, the top 15 providers by download count have 0.12-compatible releases available, along with various others updated by community maintainers. In particular, the AWS, Azure, DigitalOcean, Google Cloud Platform, and Kubernetes providers are already compatible, along with the various "helper" providers like http, null, random, template, etc.

There are still several providers that do not yet have 0.12-ready releases. We have made the decision to move forward with Terraform Core release in spite of that, in the interests of making this new release available as soon as possible for as many users as possible. We have published a 0.12 readiness guide for provider developers with details on how to make a provider 0.12-ready.

Providers that are not yet compatible will report that no compatible versions are available during terraform init, with the following error message:

Error: no available version is compatible with this version of Terraform

Our provider teams are still hard at work making these releases and we expect to have compatible releases for all HashiCorp-hosted providers shortly after the final Core 0.12 release.

» How We Got Here

Terraform 0.12.0 is a big release and has been a long time in the making. We're thankful to the community for their patience as we've worked through the ups and downs of preparing this release.

In some ways, the language improvements for Terraform 0.12.0 have been in the making for several releases now, going back as far as Terraform 0.7.0, where we started making incremental improvements to the language such as the first-class collection indexing syntax, list and map variables, and the boolean and conditional operators.

During the 0.11 development cycle though, we realized that further progress would require some more fundamental changes. The type system for the Terraform language is a cross-cutting concern, affecting not only the language itself but the provider protocol, various file formats, etc. Further improvements to the Terraform language would therefore require some complex, coordinated changes across many subsystems, and that work has been the driver of Terraform 0.12.

Although the 0.12 label applies only to the Terraform Core release, work to prepare for this release has involved changes across the whole Terraform product offering, including:

  • An entirely revamped Terraform language engine.
  • New internal models for state and plan that use the new language type system.
  • New serialization formats for persisted state snapshots and saved plan files.
  • A new provider plugin protocol.
  • A compatibility layer to allow provider releases to work both across Terraform 0.10, 0.11 and 0.12 for a transitional period, while minimizing changes to the many individual provider codebases.
  • Adjustments to all of the major provider plugins to improve consistency, usability, and integration with Terraform 0.12 features, and to make releases supporting the new 0.12 plugin protocol.
  • Changes to the module builder and compliance features of Terraform Enterprise to support the new language features and type system.
  • Changes to Terraform Registry to support modules using 0.12 syntax and to now be the primary index for provider auto-installation too.
  • A total rewrite and re-organization of the Terraform language documentation.
  • Tools and documentation to smooth the upgrade path, particularly for those who had employed workarounds for the language limitations in prior releases.

As we're sure you can imagine, each of these had its own specific challenges, some of which have caused delays. Due to the cross-cutting nature of these changes we were unable to take the more incremental approach we've preferred with earlier releases.

Thank you again to the community for patience while we've completed all of the many changes required to make this release available. For more on the features coming in 0.12 see this blog post.

Sign up for the latest HashiCorp news