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