class Terraspace::Terraform::Runner

Attributes

name[R]

Public Class Methods

new(name, options={}) click to toggle source
Calls superclass method Terraspace::CLI::Base::new
# File lib/terraspace/terraform/runner.rb, line 8
def initialize(name, options={})
  @name = name
  super(options)
end

Public Instance Methods

args() click to toggle source
# File lib/terraspace/terraform/runner.rb, line 61
def args
  # base at end in case of redirection. IE: terraform output > /path
  custom.args + custom.var_files + default.args
end
current_dir_message() click to toggle source
# File lib/terraspace/terraform/runner.rb, line 50
def current_dir_message
  return if @@current_dir_message_shown
  log "Current directory: #{Terraspace::Util.pretty_path(@mod.cache_dir)}"
  @@current_dir_message_shown = true
end
custom() click to toggle source
# File lib/terraspace/terraform/runner.rb, line 66
def custom
  Args::Custom.new(@mod, @name)
end
default() click to toggle source
# File lib/terraspace/terraform/runner.rb, line 71
def default
  Args::Default.new(@mod, @name, @options)
end
log(msg) click to toggle source
# File lib/terraspace/terraform/runner.rb, line 56
def log(msg)
  # quiet useful for RemoteState::Fetcher
  @options[:quiet] ? logger.debug(msg) : logger.info(msg)
end
run() click to toggle source
# File lib/terraspace/terraform/runner.rb, line 13
def run
  time_took do
    terraform(name, args)
  end
end
run_internal_hook(type, name) click to toggle source
# File lib/terraspace/terraform/runner.rb, line 39
def run_internal_hook(type, name)
  begin
    klass = "Terraspace::Terraform::Ihooks::#{type.to_s.classify}::#{name.classify}".constantize
  rescue NameError
    return
  end
  ihook = klass.new(name, @options)
  ihook.run
end
terraform(name, *args) click to toggle source
# File lib/terraspace/terraform/runner.rb, line 19
def terraform(name, *args)
  current_dir_message # only show once

  params = args.flatten.join(' ')
  command = "terraform #{name} #{params}".squish
  run_hooks("terraform.rb", name) do
    run_internal_hook(:before, name)
    Terraspace::Shell.new(@mod, command, @options.merge(env: custom.env_vars)).run
    run_internal_hook(:after, name)
  end
rescue Terraspace::SharedCacheError, Terraspace::InitRequiredError
  @retryer ||= Retryer.new(@mod, @options, name, $!)
  if @retryer.retry?
    @retryer.run
    retry
  else
    exit(1)
  end
end

Private Instance Methods

time_took() { || ... } click to toggle source
# File lib/terraspace/terraform/runner.rb, line 77
def time_took
  t1 = Time.now
  yield
  t2 = Time.now
  if %w[apply destroy].include?(@name)
    logger.info "Time took: #{pretty_time(t2-t1)}"
  end
end