class Terraspace::CLI::CheckSetup

Constants

REQUIRED_TERRAFORM_VERSION

Terraspace requires at least this version of terraform

Public Class Methods

check!() click to toggle source

Used as library call

# File lib/terraspace/cli/check_setup.rb, line 92
def check!
  setup = new
  return if setup.ok?
  # run meth designed for CLI and will puts out informative messages about installed version and exit 1 when version is not ok
  setup.run
end
new(options={}) click to toggle source
# File lib/terraspace/cli/check_setup.rb, line 8
def initialize(options={})
  @options = options
end

Public Instance Methods

check_command?() click to toggle source
# File lib/terraspace/cli/check_setup.rb, line 37
def check_command?
  Terraspace.argv[0] == "check_setup"
end
check_required_version!() click to toggle source
# File lib/terraspace/cli/check_setup.rb, line 25
def check_required_version!
  puts "Terraspace requires Terraform v#{REQUIRED_TERRAFORM_VERSION}.x and above"
  if ok?
    puts "You're all set!"
  else
    puts "The installed version of terraform may not work with terraspace."
    puts "Recommend using at least terraform v#{REQUIRED_TERRAFORM_VERSION}.x"
    puts "If you would like to bypass this check. Use TS_VERSION_CHECK=0" unless check_command?
    exit 1 unless ENV['TS_VERSION_CHECK'] == '0'
  end
end
ok?() click to toggle source
# File lib/terraspace/cli/check_setup.rb, line 48
def ok?
  unless terraform_bin
    puts terraform_is_not_installed
    exit 1
  end

  version = terraform_version_message.sub(/.*v/,'') # => 0.12.24
  unless version.match(/\d+\.\d+\.\d+/) # just parse did not find the version number
    puts "WARN: Unable to get the terraform version".color(:yellow)
    return true
  end
  major, minor, _ = version.split('.')
  required_major, required_minor = REQUIRED_TERRAFORM_VERSION.split('.')
  return true if major.to_i > required_major.to_i
  x = major.to_i >= required_major.to_i
  y = minor.to_i >= required_minor.to_i
  x && y
end
run() click to toggle source

Used for the CLI

# File lib/terraspace/cli/check_setup.rb, line 13
def run
  puts "Detected Terrspace version: #{Terraspace::VERSION}"
  if terraform_bin
    puts "Detected Terraform bin: #{terraform_bin}"
    puts "Detected #{terraform_version_message}"
    check_required_version!
  else
    puts terraform_is_not_installed
    exit 1
  end
end
terraform_bin() click to toggle source
# File lib/terraspace/cli/check_setup.rb, line 67
def terraform_bin
  out = `type terraform 2>&1`.strip
  return unless $?.success?
  md = out.match(/is (.*)/)
  md[1] if md
end
terraform_is_not_installed() click to toggle source
# File lib/terraspace/cli/check_setup.rb, line 41
    def terraform_is_not_installed
      <<~EOL
        Terraform not installed. Unable to detect a terraform command. Please double check that terraform is installed.
        See: https://terraspace.cloud/docs/install/terraform/
      EOL
    end
terraform_version_message() click to toggle source

Sometimes Terraform shows the version info on the first line and sometimes on the bottom line. Account for that by finding the line.

$ terraform --version
Terraform v0.12.24

Your version of Terraform is out of date! The latest version
is 0.12.26. You can update by downloading from https://www.terraform.io/downloads.html

Note: The -json option is only available in v0.13+

# File lib/terraspace/cli/check_setup.rb, line 85
def terraform_version_message
  `terraform --version`.split("\n").find { |l| l =~ /^Terraform / }.strip
end