Private/Install-TerraformVersion.ps1
Function Install-TerraformVersion { [cmdletbinding()] Param( [parameter(Mandatory = $True)] [string] $Version, [parameter(Mandatory = $True)] $Config ) # install desired version # platform = windows, linux, darwin # arch = 386, amd64 # version # E.g https://releases.hashicorp.com/terraform/0.12.19/terraform_0.12.19_windows_386.zip $Environment = @{ Platform = $null Arch = $null BinaryPath = $null BinaryName = $null } # Determine platform $Environment.Platform = Get-Platform if ($Environment.Platform -eq "windows"){ $Environment.BinaryName = "terraform.exe" } else{ $Environment.BinaryName = "terraform" } # Determine arch if ([Environment]::Is64BitOperatingSystem) { $Environment.Arch = "amd64" } else { $Environment.Arch = "386" } $Url = "https://releases.hashicorp.com/terraform/{0}/terraform_{0}_{1}_{2}.zip" -f $Version, $Environment.Platform, $Environment.Arch $UserProfile = (Get-Item ~).FullName $WorkingDir = Join-Path -Path $UserProfile -ChildPath ".terrafun" $BaseName = (Split-Path -Path $Url -Leaf) $DownloadFilePath = Join-Path -Path $WorkingDir -ChildPath $BaseName $DestinationDir = Join-Path -Path $WorkingDir -ChildPath ("terraform_{0}_{1}_{2}" -f $Version, $Environment.Platform, $Environment.Arch) New-Item -Path $DestinationDir -ItemType Directory -Force | Out-Null $Environment.BinaryPath = Join-Path -Path $DestinationDir -ChildPath $Environment.BinaryName if (Test-Path -Path $Environment.BinaryPath) { Return $Environment } if ($Config.AvailableVersions -notcontains $Version) { throw ("Could not find release for version {0}" -f $Version) } Write-Verbose -Verbose ("downloading {0}..." -f $Url) $ProgressPreference = 'silentlyContinue' Invoke-WebRequest -Uri $Url -OutFile $DownloadFilePath Expand-Archive -Path $DownloadFilePath -DestinationPath $DestinationDir -Force Remove-Item $DownloadFilePath if (Test-Path -Path $Environment.BinaryPath) { if ($Environment.Platform -ne "windows"){ & chmod +x $Environment.BinaryPath } Return $Environment } else { throw ("failed to install terraform {0}" -f $Version) } } |