class Terraform::Command

Wraps terraform command execution

Attributes

command[RW]

Public Class Methods

new(stack, command) click to toggle source
# File lib/terraform_dsl/command.rb, line 6
def initialize(stack, command)
  @stack = stack
  @command = options_for(command)
  prepare
end

Public Instance Methods

env() click to toggle source
# File lib/terraform_dsl/command.rb, line 12
def env
  vars = {}
  @stack.variables.each { |k, v| vars["TF_VAR_#{k}"] = v[:default] }
  @stack.module.secrets.each do |_provider, secrets|
    secrets.each do |k, v|
      vars[k.to_s] = v
    end
  end
  vars
end
execute() click to toggle source
# File lib/terraform_dsl/command.rb, line 23
def execute
  Process.waitpid(spawn(env, @command, chdir: @stack.stack_dir))
  fail 'Command failed' unless $CHILD_STATUS.to_i == 0
end

Protected Instance Methods

generate() click to toggle source
# File lib/terraform_dsl/command.rb, line 54
def generate
  @stack.module.generate
end
options_for(cmd) click to toggle source
# File lib/terraform_dsl/command.rb, line 35
def options_for(cmd)
  options = begin
    case cmd
    when :apply
      '-input=false'
    when :destroy
      '-input=false -force'
    when :plan
      '-input=false -module-depth=-1'
    when :graph
      '-draw-cycles'
    else
      ''
    end
  end

  "terraform #{cmd} #{options}"
end
prepare() click to toggle source
# File lib/terraform_dsl/command.rb, line 30
def prepare
  FileUtils.mkdir_p(@stack.stack_dir)
  File.open(File.join(@stack.stack_dir, 'terraform.tf.json'), 'w') { |f| f.write(generate) }
end