shared-bootstrap/Install-TerraformCliForWindows.ps1 (30 lines of code) (raw):
param(
[string]$toolsPath,
[string]$logFilePath
)
## Get latest version of Terraform
Write-Output "- Finding Latest Terraform Version..."
$versionResponse = Invoke-WebRequest -Uri "https://api.releases.hashicorp.com/v1/releases/terraform?limit=20"
if($versionResponse.StatusCode -ne "200") {
throw "Unable to query Terraform version, please check your internet connection and try again..."
}
$releases = ($versionResponse).Content | ConvertFrom-Json | Where-Object -Property is_prerelease -EQ $false
$release = $releases[0]
$version = $release.version
## Download Terraform
Write-Output "- Downloading Terraform $version..."
$unzipdir = Join-Path -Path $toolsPath -ChildPath "terraform_$version"
$zipfilePath = "$unzipdir.zip"
$os = "windows"
$architecture = "amd64"
$url = $release.builds | Where-Object { $_.arch -eq $architecture -and $_.os -eq $os } | Select-Object -First 1 -ExpandProperty url
Invoke-WebRequest -Uri $url -OutFile "$zipfilePath"
## Unzip Terraform
Write-Output "- Unzipping Terraform..."
Expand-Archive -Path $zipfilePath -DestinationPath $unzipdir
Remove-Item $zipfilePath
## Set Env vars
Write-Output "- Setting Terraform Path Environment Variable..."
$env:PATH = "$($unzipdir);$env:PATH"
[System.Environment]::SetEnvironmentVariable('PATH', $env:PATH, 'User')
Write-Output "- Finished Installing Terraform..."