rspec-terraform 0.1.0.pre.25 → 0.1.0.pre.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 55363f2208056bc93d1d421ee0ebc71110552d6d9d10b45f39daba918644df1c
4
- data.tar.gz: 917d8cdb39c4d951faf1e6fadd38627f4adda1c901dc0451ed570fc1b4dec004
3
+ metadata.gz: 95958411883b88589c0b4ebbf69198bd96d00f545dfc3bfde950029f2c809417
4
+ data.tar.gz: 4442f9b3b60bc414a736d339578f058505fff7ac545d0e0bbda6648ae2415459
5
5
  SHA512:
6
- metadata.gz: 1dc905624bc15111d9baa63d21771a2ecf5b6c2dc5039a92f72dc56d7cf04a45544ff07a3cb12365d757b5ad7bf33674b50897f982d15513c40848082f5a2f7c
7
- data.tar.gz: 1ece7a058129b5d71618bb299ccf8e07da54e8bbd6b45ec86ed8f6775f2247b7e13f184d6a8c1a7eb504235c5bd167dced7f8a605f4f9f73060d3e0e9e279ca3
6
+ metadata.gz: d731325a5f7bcc520f50d0d89baaa3d700d533c831088c355d58b1be128393b406b95df513367b69e7423f99e5b1f7d73066f3cdaa14ddbbd234f485388f5d8a
7
+ data.tar.gz: d5cdaf53682c7b036fd829b72a013318010b45ec39db3a260afda5c9dd9c69d731ebd6b2def20a8b651c2db97f9f74209fa393ecb99bf58c9a0d3731ad171bba
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rspec-terraform (0.1.0.pre.25)
4
+ rspec-terraform (0.1.0.pre.26)
5
5
  rspec (>= 3.0)
6
6
  ruby-terraform (= 1.7.0.pre.13)
7
7
 
@@ -0,0 +1,126 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ruby_terraform'
4
+
5
+ require_relative '../configuration/var_captor'
6
+
7
+ module RSpec
8
+ module Terraform
9
+ module Helpers
10
+ class Destroy
11
+ attr_reader(
12
+ :overrides, :configuration_provider, :binary, :execution_mode
13
+ )
14
+
15
+ def initialize(overrides = {}, configuration_provider = nil)
16
+ @overrides = overrides
17
+ @configuration_provider =
18
+ configuration_provider || Configuration.identity_provider
19
+ @binary = RSpec.configuration.terraform_binary
20
+ @execution_mode = RSpec.configuration.terraform_execution_mode
21
+ end
22
+
23
+ def execute(&block)
24
+ parameters = with_configuration_provider_parameters(overrides)
25
+ parameters = with_resolved_vars(parameters, &block)
26
+ parameters = with_mandatory_parameters(parameters)
27
+
28
+ ensure_required_parameters(parameters)
29
+
30
+ clean(parameters)
31
+ init(parameters)
32
+ destroy(parameters)
33
+ end
34
+
35
+ private
36
+
37
+ def with_configuration_provider_parameters(parameters)
38
+ configuration_provider.resolve(parameters)
39
+ end
40
+
41
+ def with_resolved_vars(parameters, &block)
42
+ return parameters unless block_given?
43
+
44
+ var_captor = Configuration::VarCaptor.new(parameters[:vars] || {})
45
+ block.call(var_captor)
46
+ parameters.merge(vars: var_captor.to_h)
47
+ end
48
+
49
+ def with_mandatory_parameters(parameters)
50
+ parameters.merge(
51
+ input: false,
52
+ auto_approve: true
53
+ )
54
+ end
55
+
56
+ def required_parameters(execution_mode)
57
+ {
58
+ in_place: [:configuration_directory],
59
+ isolated: %i[source_directory configuration_directory]
60
+ }[execution_mode] || []
61
+ end
62
+
63
+ def ensure_required_parameters(parameters)
64
+ missing_parameters =
65
+ required_parameters(execution_mode)
66
+ .filter { |parameter| parameters[parameter].nil? }
67
+
68
+ return if missing_parameters.empty?
69
+
70
+ raise_missing_parameters(missing_parameters)
71
+ end
72
+
73
+ def raise_missing_parameters(parameters)
74
+ parameters = parameters.collect { |parameter| "`:#{parameter}`" }
75
+ if parameters.count == 1
76
+ raise StandardError,
77
+ "Required parameter: #{parameters[0]} missing."
78
+ else
79
+ parameters = "#{parameters[..-2].join(', ')} and #{parameters[-1]}"
80
+ raise StandardError,
81
+ "Required parameters: #{parameters} missing."
82
+ end
83
+ end
84
+
85
+ def clean(parameters)
86
+ return unless execution_mode == :isolated
87
+
88
+ FileUtils.rm_rf(parameters[:configuration_directory])
89
+ FileUtils.mkdir_p(parameters[:configuration_directory])
90
+ end
91
+
92
+ def init(parameters)
93
+ execution_parameters = {
94
+ chdir: parameters[:configuration_directory],
95
+ input: parameters[:input]
96
+ }
97
+ if execution_mode == :isolated
98
+ execution_parameters =
99
+ execution_parameters
100
+ .merge(from_module: parameters[:source_directory])
101
+ end
102
+
103
+ init_command.execute(execution_parameters)
104
+ end
105
+
106
+ def destroy(parameters)
107
+ destroy_command.execute(
108
+ chdir: parameters[:configuration_directory],
109
+ state: parameters[:state_file],
110
+ vars: parameters[:vars],
111
+ input: parameters[:input],
112
+ auto_approve: parameters[:auto_approve]
113
+ )
114
+ end
115
+
116
+ def init_command
117
+ RubyTerraform::Commands::Init.new(binary: binary)
118
+ end
119
+
120
+ def destroy_command
121
+ RubyTerraform::Commands::Destroy.new(binary: binary)
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative './helpers/apply'
4
+ require_relative './helpers/destroy'
4
5
 
5
6
  module RSpec
6
7
  module Terraform
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RSpec
4
4
  module Terraform
5
- VERSION = '0.1.0.pre.25'
5
+ VERSION = '0.1.0.pre.26'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-terraform
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.pre.25
4
+ version: 0.1.0.pre.26
5
5
  platform: ruby
6
6
  authors:
7
7
  - InfraBlocks Maintainers
@@ -287,6 +287,7 @@ files:
287
287
  - lib/rspec/terraform/configuration/var_captor.rb
288
288
  - lib/rspec/terraform/helpers.rb
289
289
  - lib/rspec/terraform/helpers/apply.rb
290
+ - lib/rspec/terraform/helpers/destroy.rb
290
291
  - lib/rspec/terraform/matchers.rb
291
292
  - lib/rspec/terraform/matchers/include_output_change.rb
292
293
  - lib/rspec/terraform/matchers/include_resource_change.rb