Read our newest book, Fundamentals of DevOps and Software Delivery, for free!

Installing Multiple Versions of Terraform with Homebrew

Headshot of Matt Calhoun

Matt Calhoun

MAY 21, 2019 | 4 min read
Featured Image of Installing Multiple Versions of Terraform with Homebrew
At Gruntwork, we work with many customers and environments and find it’s necessary to switch among multiple versions of Terraform daily.I happen to work on a Mac and find the Homebrew project to be an invaluable tool to help me install software. The biggest complaint I have about Homebrew, though, is that they don’t make it easy to install older versions of software.Luckily, through some experimentation, I was able to come up with the procedure outlined below to use Homebrew to manage multiple versions of Terraform and to be able to switch among them easily.[NOTE: YMMV with this particular workaround and I don’t know if this is ‘officially supported’ by the Homebrew project]Let’s start by cloning the Homebrew project to our local machine.
$ git clone git@github.com:Homebrew/homebrew-core.git $ cd homebrew-core
Next, find the Git commit id that added the version of Terraform we’re interested in installing. For this example, we’ll look to install Terraform version 0.11.8.
$ git log master -- Formula/terraform.rbcommit 49017817fb34b76fdc81f33665fdd7661fe5e558 (HEAD) Author: BrewTestBot <homebrew-test-bot@lists.sfconservancy.org> Date: Tue Oct 23 23:17:42 2018 +0000terraform: update 0.11.10 bottle.commit 252d11cbf0d63aad22d043ef490b996b7a1c115c Author: James Gregory <james@jagregory.com> Date: Wed Oct 24 09:28:21 2018 +1100terraform 0.11.10Closes #33324.Signed-off-by: commitay <commitay@users.noreply.github.com>commit 12c25cb2fc4b51bd0271f5d1fd00c6f500863966 Author: BrewTestBot <homebrew-test-bot@lists.sfconservancy.org> Date: Sat Oct 20 02:56:24 2018 +0000terraform: update 0.11.9 bottle.commit 7373f02c6f028904ac5c7f8d94290a44f911a736 Author: FX Coudert <fxcoudert@gmail.com> Date: Fri Oct 19 22:03:27 2018 +0200terraform 0.11.9Closes #33186.Signed-off-by: commitay <commitay@users.noreply.github.com>commit 3507fce2ba1f36cc371fe888fd093bf5aa79981d Author: BrewTestBot <homebrew-test-bot@lists.sfconservancy.org> Date: Mon Aug 20 10:47:28 2018 +0000terraform: update 0.11.8 bottle.<***remaining output truncated***>
We can see commit 3507fce2ba1f36cc371fe888fd093bf5aa79981d is the one that last updated 0.11.8, so we’ll use that commit.
$ git checkout 3507fce2ba1f36cc371fe888fd093bf5aa79981d $ cd Formula $ brew unpin terraform (I'll explain this further below) $ brew unlink terraform $ brew install terraform.rb
It’s as simple as that, and we now have Terraform 0.11.8 installed on our machine!Now that we have multiple versions of Terraform installed, there are a few other commands you’ll want to get familiar with.The brew switch command will allow you to switch among versions of Terraform that are installed on your system.
$ brew switch terraform 0.11.8 $ terraform --version Terraform v0.11.8$ brew switch terraform 0.11.14 $ terraform --version Terraform v0.11.14
The brew pin command will prevent Homebrew from updating/upgrading your version of Terraform when you run the brew upgrade command. I would strongly suggest pinning Terraform because otherwise, the brew upgrade command will remove all older versions of Terraform from your system.
$ brew pin terraform $ brew info terraformterraform: stable 0.11.14 (bottled), HEAD [pinned at 0.11.14] Tool to build, change, and version infrastructure https://www.terraform.io/ Conflicts with: tfenv (because tfenv symlinks terraform binaries) /usr/local/Cellar/terraform/0.11.8 (6 files, 88.9MB) * Poured from bottle on 2019-05-21 at 15:07:13 /usr/local/Cellar/terraform/0.11.14 (6 files, 42.4MB) Poured from bottle on 2019-05-21 at 15:02:18 From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/terraform.rb ==> Dependencies Build: go ✔, gox ✔ ==> Options --HEAD Install HEAD version ==> Analytics install: 18,754 (30 days), 64,658 (90 days), 200,703 (365 days) install_on_request: 17,871 (30 days), 61,462 (90 days), 189,133 (365 days) build_error: 0 (30 days)
Finally, if you’d like to see all of the versions of Terraform installed on your system, the easiest way I’ve found is by looking at the Homebrew Cellar directory.
$ ls /usr/local/Cellar/terraformdrwxrwxr-x 88 matt admin 2816 May 21 14:50 .. drwxr-xr-x 4 matt staff 128 May 21 15:02 . drwxr-xr-x 8 matt staff 256 May 21 15:07 0.11.14 drwxr-xr-x 8 matt staff 256 May 21 15:09 0.11.8
I hope this(relatively) simple procedure helps you easily install and manage the various versions of Terraform (and other packages) on your system!
Share
Grunty
Resources

Explore our latest blog

Get the most up-to-date information and trends from our DevOps community.
TerraformResouces Image

Promotion Workflows with Terraform

How to configure GitOps-driven, immutable infrastructure workflows for Terraform using Gruntwork Patcher.
avatar

Jason Griffin

October 3, 2023 7 min read
TerraformResouces Image

The Impact of the HashiCorp License Change on Gruntwork Customers

How to configure GitOps-driven, immutable infrastructure workflows for Terraform using Gruntwork Patcher.
avatar

Josh Padnick

October 3, 2023 7 min read