class Terraspace::Terraform::Args::Default
Public Class Methods
new(mod, name, options={})
click to toggle source
# File lib/terraspace/terraform/args/default.rb, line 5 def initialize(mod, name, options={}) @mod, @name, @options = mod, name.underscore, options @quiet = @options[:quiet].nil? ? true : @options[:quiet] end
terraform_init_log(mod_name)
click to toggle source
Use different tmp log file in case uses run terraspace up in 2 terminals at the same time
Log for init is in /tmp because using shell >> redirection It requires full path since we're running terraform within the .terraspace-cache folder This keeps the printed command shorter:
=> terraform init -get >> /tmp/terraspace/log/init/demo.log
# File lib/terraspace/terraform/args/default.rb, line 133 def terraform_init_log(mod_name) "#{Terraspace.tmp_root}/log/init/#{mod_name}.log" end
Public Instance Methods
apply_args()
click to toggle source
# File lib/terraspace/terraform/args/default.rb, line 38 def apply_args args = auto_approve_arg var_files = @options[:var_files] if var_files var_files.each do |file| copy_to_cache(plan) end args << var_files.map { |f| "-var-file #{f}" }.join(' ') end args << input_option # must be at the end plan = @options[:plan] if plan copy_to_cache(plan) args << " #{plan}" end args end
args()
click to toggle source
# File lib/terraspace/terraform/args/default.rb, line 10 def args # https://terraspace.cloud/docs/ci-automation/ ENV['TF_IN_AUTOMATION'] = '1' if @options[:auto] args = [] if straight_delegate_args? args += @options[:rest] args.flatten! end args_meth = "#{@name}_args".gsub(' ', '_') # IE: apply_args, init_args if respond_to?(args_meth) args += send(args_meth) end args end
auto_approve_arg()
click to toggle source
# File lib/terraspace/terraform/args/default.rb, line 118 def auto_approve_arg @options[:yes] || @options[:auto] ? ["-auto-approve"] : [] end
destroy_args()
click to toggle source
# File lib/terraspace/terraform/args/default.rb, line 114 def destroy_args auto_approve_arg end
expanded_out()
click to toggle source
# File lib/terraspace/terraform/args/default.rb, line 110 def expanded_out @options[:out] end
force_unlock_args()
click to toggle source
# File lib/terraspace/terraform/args/default.rb, line 34 def force_unlock_args [" -force #{@options[:lock_id]}"] end
init_args()
click to toggle source
# File lib/terraspace/terraform/args/default.rb, line 68 def init_args args = "-get" args << input_option args << " -reconfigure" if @options[:reconfigure] # must be at the end if @quiet log_path = self.class.terraform_init_log(@mod.name) FileUtils.mkdir_p(File.dirname(log_path)) args << " >> #{log_path}" end [args] end
input_option()
click to toggle source
# File lib/terraspace/terraform/args/default.rb, line 59 def input_option option = if @options[:auto] "false" else @options[:input] ? @options[:input] : "false" end " -input=#{option}" end
output_args()
click to toggle source
# File lib/terraspace/terraform/args/default.rb, line 82 def output_args args = [] args << "-json" if @options[:format] == "json" args << "> #{expanded_out}" if @options[:out] args end
plan_args()
click to toggle source
# File lib/terraspace/terraform/args/default.rb, line 89 def plan_args args = [] args << input_option args << "-destroy" if @options[:destroy] args << "-out #{expanded_out}" if @options[:out] # Note: based on the @options[:out] will run an internal hook to copy plan # file back up to the root project folder for use. Think this is convenient and expected behavior. args end
show_args()
click to toggle source
# File lib/terraspace/terraform/args/default.rb, line 99 def show_args args = [] args << " -json" if @options[:json] plan = @options[:plan] if plan copy_to_cache(@options[:plan]) args << " #{@options[:plan]}" # terraform show /path/to/plan end args end
straight_delegate_args?()
click to toggle source
delegate args straight through for special commands, currently state seems to be the only case
# File lib/terraspace/terraform/args/default.rb, line 30 def straight_delegate_args? @name.include?("state") # IE: "state list", "state pull", "state show" end
Private Instance Methods
copy_to_cache(file)
click to toggle source
# File lib/terraspace/terraform/args/default.rb, line 144 def copy_to_cache(file) return if file =~ %r{^/} # not need to copy absolute path name = file.sub("#{Terraspace.root}/",'') src = name dest = "#{@mod.cache_dir}/#{name}" FileUtils.mkdir_p(File.dirname(dest)) FileUtils.cp(src, dest) unless same_file?(src, dest) end
same_file?(src, dest)
click to toggle source
# File lib/terraspace/terraform/args/default.rb, line 140 def same_file?(src, dest) src == dest end