Upgrade terraform to specific version

Use case

I have installed Terraform v0.11.13 via homebrew and as recommended by terraform I want to ugprade to version v0.11.14 before doing the major upgrade to v0.12.0.

The problem

When I run brew upgrade terraform or download the Mac package from the terraform website it would immediately update my terraform version to v0.12.0 I think.

So how can I upgrade to v0.11.14 instead?


Solution 1:

Especially when playing around with Terraform 0.12 betas, I learned to love tfenv.

After installation (via brew install tfenv on MacOS), this allows you to easily discover, install and activate any Terraform version:

$ tfenv list-remote
0.12.0
0.12.0-rc1
0.12.0-beta2
0.12.0-beta1
0.12.0
0.11.14
...

$ tfenv install 0.11.14
[INFO] Installing Terraform v0.11.14
[INFO] Downloading release tarball from https://releases.hashicorp.com/terraform/0.11.14/terraform_0.11.14_darwin_amd64.zip
...
[INFO] Installation of terraform v0.11.14 successful
[INFO] Switching to v0.11.14
[INFO] Switching completed

If you want to switch to a different version:

$ tfenv use 0.12.0
[INFO] Switching to v0.12.0
[INFO] Switching completed

Solution 2:

For anyone looking to do the same without using homebrew:

  1. Get source
$ wget https://releases.hashicorp.com/terraform/0.11.14/terraform_0.11.14_linux_amd64.zip

$ unzip terraform_0.11.14_linux_amd64.zip
  1. Give binary executable permissions and install (will overwrite current version)
$ chmod +x terraform

$ sudo mv terraform /usr/local/bin/
  1. Confirm version
$ terraform --version

Source: https://titosoft.github.io/kvm/terraform-and-kvm/#installing-terraform

Solution 3:

There is a nice alternative to tfenv that I've been using for few years now - tfswitch.

  1. Simple installation process with:
# MacOS
brew install warrensbox/tap/tfswitch

# Linux
curl -L https://raw.githubusercontent.com/warrensbox/terraform-switcher/release/install.sh | bash
  1. Supplies alpha, beta and release candidates terraform versions.
  2. Supports multiple options for changing versions like:
  • Manual with tfswitch VERSION_NUMBER.
  • Automatically detects and switch to version described in version.tf file.
  • Automatically switch to custom binaries under custom path (helpful for users or services with limited privileges).
  • Automatically switch with .tfswitchrc, .terrafom-version - requires minimum setup and supports bash, zsh and fish.
  1. Can be easily integrated with Jenkins and CircleCI - I haven't tested it out, these features were added 10 and 5 months ago respectively.

All in all it's a great and simple helper, would recommend this one.

Solution 4:

Apart from the conventional solutions, an easy implementation to the required problem would be installing tfswitch. It can change terraform versions with only one command. Installation and usage guide is provided in the given link.

Note: You can not downgrade to previous versions after the script has been initialised (terraform init).

Solution 5:

Easy and best way to do:-

# MacOS
 brew install warrensbox/tap/tfswitch

# Linux
curl -L https://raw.githubusercontent.com/warrensbox/terraform- 
switcher/release/install.sh | bash

then use Either one of command to change version-

1. tfswitch ==> you will see option to select version.


2. tfswitch 0.14.3 ==> this way