Skip to content

Instantly share code, notes, and snippets.

@danisla
Last active August 27, 2023 17:05
Show Gist options
  • Star 15 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
  • Save danisla/0a394c75bddce204688b21e28fd2fea5 to your computer and use it in GitHub Desktop.
Save danisla/0a394c75bddce204688b21e28fd2fea5 to your computer and use it in GitHub Desktop.
Terraform latest version install script
#!/bin/bash
function terraform-install() {
[[ -f ${HOME}/bin/terraform ]] && echo "`${HOME}/bin/terraform version` already installed at ${HOME}/bin/terraform" && return 0
LATEST_URL=$(curl -sL https://releases.hashicorp.com/terraform/index.json | jq -r '.versions[].builds[].url' | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n | egrep -v 'rc|beta' | egrep 'linux.*amd64' |tail -1)
curl ${LATEST_URL} > /tmp/terraform.zip
mkdir -p ${HOME}/bin
(cd ${HOME}/bin && unzip /tmp/terraform.zip)
if [[ -z $(grep 'export PATH=${HOME}/bin:${PATH}' ~/.bashrc) ]]; then
echo 'export PATH=${HOME}/bin:${PATH}' >> ~/.bashrc
fi
echo "Installed: `${HOME}/bin/terraform version`"
cat - << EOF
Run the following to reload your PATH with terraform:
source ~/.bashrc
EOF
}
terraform-install
@AHaymond
Copy link

AHaymond commented Dec 20, 2018

An alternative to line 5 above would sort by version assuring that the latest versions are at the bottom and exclude alpha releases.

LATEST_URL=$(curl -sL https://releases.hashicorp.com/terraform/index.json | jq -r '.versions[].builds[].url' | egrep 'terraform_[0-9]\.[0-9]{1,2}\.[0-9]{1,2}_linux.*amd64' | sort -V | tail -1)

Thanks for the quick script!

@christianhaller3000
Copy link

@AHaymond Thanks for sharing!

@hk1313
Copy link

hk1313 commented Apr 24, 2020

@danisla, your script is awesome but now latest terraform version is 0.12.24 but still it extract 0.12.9. so you may need to change line five for sort 5 number in version.
"LATEST_URL=$(curl https://releases.hashicorp.com/terraform/index.json | jq -r '.versions[].builds[].url' | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n | egrep -v 'rc|beta' | egrep 'linux.*amd64' |tail -1)"

@jacobeatsspam
Copy link

I like to do as much of the work in jq as possible:

$ curl -sL https://releases.hashicorp.com/terraform/index.json |
    jq -r '.versions[].builds[].url | select(.|test("alpha|beta|rc")|not) | select(.|contains("linux_amd64"))' |
    sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n |
    tail -n1
https://releases.hashicorp.com/terraform/0.13.2/terraform_0.13.2_linux_amd64.zip

@yanivpaz
Copy link

yanivpaz commented Aug 13, 2021

I replaced with

curl -sL https://releases.hashicorp.com/terraform/index.json | jq -r '.versions[].builds[].url' | egrep -v 'rc|beta|alpha' | egrep 'linux.*amd64'  | tail -1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment