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

Sign up to get free protection for your applications and to get access to all the features.
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