lib/rspec/terraform/helpers/apply.rb in rspec-terraform-0.1.0.pre.24 vs lib/rspec/terraform/helpers/apply.rb in rspec-terraform-0.1.0.pre.25

- old
+ new

@@ -6,25 +6,30 @@ module RSpec module Terraform module Helpers class Apply - attr_reader(:overrides, :configuration_provider) + attr_reader( + :overrides, :configuration_provider, :binary, :execution_mode + ) def initialize(overrides = {}, configuration_provider = nil) @overrides = overrides @configuration_provider = configuration_provider || Configuration.identity_provider + @binary = RSpec.configuration.terraform_binary + @execution_mode = RSpec.configuration.terraform_execution_mode end def execute(&block) parameters = with_configuration_provider_parameters(overrides) parameters = with_resolved_vars(parameters, &block) parameters = with_mandatory_parameters(parameters) ensure_required_parameters(parameters) + clean(parameters) init(parameters) apply(parameters) end private @@ -46,23 +51,58 @@ input: false, auto_approve: true ) end + def required_parameters(execution_mode) + { + in_place: [:configuration_directory], + isolated: %i[source_directory configuration_directory] + }[execution_mode] || [] + end + def ensure_required_parameters(parameters) - return if parameters[:configuration_directory] + missing_parameters = + required_parameters(execution_mode) + .filter { |parameter| parameters[parameter].nil? } - throw StandardError.new( - 'No Terraform configuration directory specified.' - ) + return if missing_parameters.empty? + + raise_missing_parameters(missing_parameters) end + def raise_missing_parameters(parameters) + parameters = parameters.collect { |parameter| "`:#{parameter}`" } + if parameters.count == 1 + raise StandardError, + "Required parameter: #{parameters[0]} missing." + else + parameters = "#{parameters[..-2].join(', ')} and #{parameters[-1]}" + raise StandardError, + "Required parameters: #{parameters} missing." + end + end + + def clean(parameters) + return unless execution_mode == :isolated + + FileUtils.rm_rf(parameters[:configuration_directory]) + FileUtils.mkdir_p(parameters[:configuration_directory]) + end + def init(parameters) - init_command.execute( + execution_parameters = { chdir: parameters[:configuration_directory], input: parameters[:input] - ) + } + if execution_mode == :isolated + execution_parameters = + execution_parameters + .merge(from_module: parameters[:source_directory]) + end + + init_command.execute(execution_parameters) end def apply(parameters) apply_command.execute( chdir: parameters[:configuration_directory], @@ -72,18 +112,14 @@ auto_approve: parameters[:auto_approve] ) end def init_command - RubyTerraform::Commands::Init.new( - binary: RSpec.configuration.terraform_binary - ) + RubyTerraform::Commands::Init.new(binary: binary) end def apply_command - RubyTerraform::Commands::Apply.new( - binary: RSpec.configuration.terraform_binary - ) + RubyTerraform::Commands::Apply.new(binary: binary) end end end end end