Sha256: 1d53b1c315508da2fbc5661c29144e35c5c61f7c45b323a3b0006e16b69435f8
Contents?: true
Size: 1.63 KB
Versions: 2
Compression:
Stored size: 1.63 KB
Contents
require 'fileutils' require 'zip' require_relative 'download' require_relative 'os' require_relative 'command' module TerraformDevKit class TerraformInstaller LOCAL_FILE_NAME = 'terraform.zip'.freeze def self.installed_terraform_version extract_version(Command.run('terraform --version')) rescue nil end def self.extract_version(output) # Terraform vx.y.z might be anywhere in the output (warnings may appear # before the version does). Therefore we scan all the lines. matches = output.map { |line| /Terraform v(\d+\.\d+\.\d+)/.match(line) } .reject(&:nil?) matches.count == 1 ? matches[0][1] : nil end def self.install_local(version, directory: Dir.pwd) if installed_terraform_version == version puts 'Terraform already installed' return end FileUtils.mkdir_p(directory) Dir.chdir(directory) do download_terraform(version) unzip_terraform end end private_class_method def self.download_terraform(version) TerraformDevKit.download_file( "https://releases.hashicorp.com/terraform/#{version}/terraform_#{version}_#{OS.host_os}_amd64.zip", LOCAL_FILE_NAME, force_download: true ) end private_class_method def self.unzip_terraform Zip::File.open(LOCAL_FILE_NAME) do |zip_file| zip_file.each do |entry| puts "Extracting #{entry.name}" entry.restore_permissions = true entry.extract(entry.name) { true } end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
TerraformDevKit-0.4.0 | lib/TerraformDevKit/terraform_installer.rb |
TerraformDevKit-0.3.8 | lib/TerraformDevKit/terraform_installer.rb |