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