Note: An updated script with additional capabilities and multi-product support has been published to the hashicorp-installer repo. It defaults to installing Terraform and can be a drop-in replacement for this script.
The terraform-install script automates the process of downloading and installing Terraform. It provides an ideal method for installing installing updates or a specific version.
This script detects the latest version, OS and CPU-Architecture and allows installation to local or system locations. Optional parameters allow installing a specific version and installing to /usr/local/bin without prompting.
Example - install last pre-0.13 release: ./terraform-install.sh -i 0.12.29
Options:
-i VERSION
: Install specific version-a
: Automatically usesudo
to install to /usr/local/bin- allows for unattended installation via scripts or CD tools
- can be set as default behavior by uncommenting line 14 (
sudoInstall=true
) - sudo password may be required unless NOPASSWD is enabled
-c
: leave binary in working directory (for CI/DevOps use)-h
: help-v
: display version
This installer is similar to my Packer Installer and Vault Installer
Download Installer
curl -LO https://raw.github.com/robertpeteuil/terraform-installer/master/terraform-install.sh
chmod +x terraform-install.sh
Download installer via my bootstrap server (iac.sh or https://iac.sh)
curl iac.sh/terraform > getinst.sh
bash getinst.sh
# installer downloaded as terraform-install.sh in current directory
./terraform-install.sh
# usage: terraform-install.sh [-i VERSION] [-a] [-c] [-h] [-v]
# -i VERSION : specify version to install in format '' (OPTIONAL)
# -a : automatically use sudo to install to /usr/local/bin
# -c : leave binary in working directory (for CI/DevOps use)
# -h : help
# -v : display vault-install.sh version
- System with Bash Shell (Linux, macOS, Windows Subsystem for Linux)
unzip
- terraform downloads are in zip formatcurl
orwget
- script will use either one to retrieve metadata and download
Optional
jq
- if installed, latest version parsed from hashicorp downloads- Useful if latest github release differs from version on hashicorp downloads
- Avoids github api limit of 60 requests per hour (unauthenticated)
- Determines Version to Download and Install
- Uses Version specified by
-i VERSION
parameter (if specified) - Otherwise determines Latest Version
- If
jq
installed parse version from hashicorp downloads - Otherwise use GitHub API to retrieve latest version
- If
- Uses Version specified by
- Calculates Download URL based on Version, OS and CPU-Architecture
- Verifies URL Validity before Downloading in Case:
- VERSION incorrectly specified with
-i
- Download URL Format Changed on terraform Website
- VERSION incorrectly specified with
- Determines Install Destination
- The destination can be specified with
-c
option, or passingTF_INSTALL_DIR
environment variable - The default is
/usr/local/bin
if it is writable, or with-a
- Otherwise the user is prompted for options
- Performed before Download/Install Process in case user selects
abort
- The destination can be specified with
- Installation Process
- Download, Download SHA, Verify SHA of zip, Extract, Install, Cleanup and Display Results
CPU architecture is detected for each OS accordingly:
- Linux / Windows (WSL since this is a Bash script)
- detected with
lscpu
or by inspecting/proc/cpuinfo
- Arm variants use
arm
as it's the onlyarm
version available (for now)
- detected with
- macOS - uses Default Arch
amd64
as it's the only version available on macOS - Default Value -
amd64
I am a HashiCorp employee, but this is a personal project and not officially endorsed or supported by HashiCorp.
Apache 2.0 License - Copyright (c) 2020 Robert Peteuil