2018-06-26 02:26:45 +02:00
|
|
|
|
---
|
2018-12-21 03:18:13 +01:00
|
|
|
|
layout: "guides"
|
2018-06-26 02:26:45 +02:00
|
|
|
|
page_title: "Upgrading to Terraform 0.12"
|
|
|
|
|
sidebar_current: "upgrade-guides-0-12"
|
|
|
|
|
description: |-
|
|
|
|
|
Upgrading to Terraform v0.12
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
# Upgrading to Terraform v0.12
|
|
|
|
|
|
2018-12-05 21:19:08 +01:00
|
|
|
|
~> Terraform 0.12 has not yet been released. This guide is proactive to help
|
|
|
|
|
users understand what the upgrade path to 0.12 will be like. This guide will
|
|
|
|
|
be updated with more detail up until the release of 0.12.
|
2018-06-26 02:26:45 +02:00
|
|
|
|
|
|
|
|
|
[Terraform v0.12 will be a major release](https://hashicorp.com/blog/terraform-0-1-2-preview)
|
|
|
|
|
focused on configuration language improvements and thus will include some
|
|
|
|
|
changes that you'll need to consider when upgrading. The goal of this guide is
|
|
|
|
|
to cover the most common upgrade concerns and issues. For the majority of users,
|
|
|
|
|
no steps will need to be taken to upgrade. The sections below explain which
|
|
|
|
|
users are likely to be in the small group who will need to make manual changes
|
|
|
|
|
to upgrade to 0.12.
|
|
|
|
|
|
|
|
|
|
This guide focuses on changes from v0.11 to v0.12. Each previous major release
|
|
|
|
|
has its own upgrade guide, so please consult the other guides (available in the
|
|
|
|
|
navigation) if you are upgrading directly from an earlier version.
|
|
|
|
|
|
|
|
|
|
## Upgrading Terraform configuration
|
2018-06-29 19:27:35 +02:00
|
|
|
|
|
2018-06-26 02:26:45 +02:00
|
|
|
|
The majority of users will not need to make manual changes to their Terraform
|
|
|
|
|
configurations to upgrade to 0.12. The users who will need to make manual
|
|
|
|
|
changes are users who use language workarounds in previous Terraform versions.
|
|
|
|
|
Examples of these workarounds include:
|
|
|
|
|
|
|
|
|
|
- Treating block types like attributes in an attempt to work around Terraform
|
2018-06-29 19:27:35 +02:00
|
|
|
|
not supporting generating nested blocks dynamically.
|
|
|
|
|
([#7034](https://github.com/hashicorp/terraform/issues/7034))
|
|
|
|
|
|
|
|
|
|
- Wrapping redundant list brackets (`[` and `]`) around splat expressions in
|
|
|
|
|
order to force them to be interpreted as lists even when there are unknown
|
|
|
|
|
items in the list.
|
2018-06-26 02:26:45 +02:00
|
|
|
|
|
|
|
|
|
Note that these workarounds are not "wrong", but rather clever solutions by
|
|
|
|
|
dedicated community members! These folks have been the inspiration for HCL2 and
|
2018-06-29 19:27:35 +02:00
|
|
|
|
these solutions have given guidance on how to make the Terraform language
|
2018-06-26 02:26:45 +02:00
|
|
|
|
more flexible to meet the needs of complex infrastructure.
|
|
|
|
|
|
2018-06-29 19:27:35 +02:00
|
|
|
|
Terraform 0.12 will be released with a migration tool that will make most of
|
|
|
|
|
the required updates automatically, and also provide guidance on any changes
|
|
|
|
|
that require human input.
|
|
|
|
|
|
2018-06-26 02:26:45 +02:00
|
|
|
|
For users who follow the examples in the Terraform documentation, there should
|
2018-06-29 19:27:35 +02:00
|
|
|
|
be no required changes. However, we still recommend to run the migration tool
|
|
|
|
|
to upgrade to the more readable syntax conventions supported in this release,
|
|
|
|
|
and to draw attention to any potential issues.
|
2018-06-26 02:26:45 +02:00
|
|
|
|
|
|
|
|
|
## Upgrading Terraform providers
|
|
|
|
|
|
|
|
|
|
We’ve updated the RPC protocol used by Terraform plugins to support typed data
|
|
|
|
|
and schema transfer.
|
|
|
|
|
|
|
|
|
|
In Terraform 0.12 Terraform will have an awareness of the schemas used by both
|
|
|
|
|
provider and provisioner plugins. This V1 for the RPC plugin protocols will
|
2018-06-29 19:27:35 +02:00
|
|
|
|
still use the old-style passing of `map[string]interface{}` for config and
|
|
|
|
|
`map[string]string` with flatmap for state and diff.
|
|
|
|
|
|
|
|
|
|
To avoid the need to atomically upgrade both Terraform Core and the providers
|
|
|
|
|
all at once, new provider versions will be released that are compatible with
|
|
|
|
|
both v0.12 and prior versions. Users will need to upgrade to the new
|
|
|
|
|
v0.12-compatible provider releases before upgrading Terraform Core, but can
|
|
|
|
|
use these newer provider releases with prior Terraform versions to transition
|
|
|
|
|
gradually and reduce risk.
|
|
|
|
|
|
|
|
|
|
This compatibility support will be handled automatically by a new version of
|
|
|
|
|
the plugin SDK so that provider maintainers need only to upgrade to the
|
|
|
|
|
latest version and rebuild.
|
|
|
|
|
|
|
|
|
|
The dual-protocol compatibility will be retained at least until the next
|
|
|
|
|
major release of the plugin SDK, in order to give users time to perform a
|
|
|
|
|
gradual upgrade of each provider and of Terraform Core itself.
|
2018-06-26 02:26:45 +02:00
|
|
|
|
|
|
|
|
|
## Upgrading modules
|
2018-06-29 19:27:35 +02:00
|
|
|
|
|
|
|
|
|
Module authors will need to complete several steps to get their modules ready
|
|
|
|
|
for v0.12.
|
|
|
|
|
|
|
|
|
|
1. Follow the steps in "Upgrading Terraform configurations" above to get the
|
|
|
|
|
module code upgraded
|
|
|
|
|
1. The migration tool will automatically add a `>= 0.12.0` Terraform version
|
|
|
|
|
constraint to indicate that the module has been upgraded to use v0.12-only
|
|
|
|
|
features.
|
|
|
|
|
1. If the module is published in a module registry, publish a new major version
|
|
|
|
|
of the module to indicate that the new version is not compatible with older
|
|
|
|
|
versions of Terraform. If you are not using a registry, be sure that
|
|
|
|
|
downstream consumers of the module are aware of the update.
|
2018-06-26 02:26:45 +02:00
|
|
|
|
|
|
|
|
|
Module consumers can then upgrade to the new versions of the module by upgrading
|
2018-06-29 19:27:35 +02:00
|
|
|
|
their configurations to 0.12 and updating the module version constraint in each
|
|
|
|
|
configuration to refer to the new major version.
|
2018-06-26 02:26:45 +02:00
|
|
|
|
|
|
|
|
|
## Upgrading Sentinel policies
|
2018-06-29 19:27:35 +02:00
|
|
|
|
|
2018-06-26 02:26:45 +02:00
|
|
|
|
Terraform Enterprise users of Sentinel will need to complete the below steps to
|
|
|
|
|
upgrade Sentinel to work with Terraform 0.12.
|
|
|
|
|
|
|
|
|
|
1. Update Terraform configurations to 0.12
|
|
|
|
|
1. Update Sentinel policies
|
|
|
|
|
|
|
|
|
|
Because Sentinel is applied across all workspaces in Terraform Enterprise, all
|
|
|
|
|
workspaces must be upgraded to Terraform 0.12 otherwise Sentinel policies will
|
|
|
|
|
fail on versions below 0.12.
|
2018-06-29 19:27:35 +02:00
|
|
|
|
|
|
|
|
|
More details on this upgrade process will be added prior to the final release.
|