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

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: 0e28c4be63e7af5fe059859b2c2de2699f700ad3d163e56981c02a2fd946d477
4
- data.tar.gz: 45f56162be84a621752fc33868c350eaefd1c2b198d8bbe46f516af2f6d4dca4
3
+ metadata.gz: 55363f2208056bc93d1d421ee0ebc71110552d6d9d10b45f39daba918644df1c
4
+ data.tar.gz: 917d8cdb39c4d951faf1e6fadd38627f4adda1c901dc0451ed570fc1b4dec004
5
5
  SHA512:
6
- metadata.gz: 4ad8bfda440da3162a37740551ad3bf1fb8567700709893a349327e5a7145b106a179004cc5c8d47ed40641f1f2ed650f1e410b6cf379d5ebb37a7914c53f7de
7
- data.tar.gz: 533d8a62d6784ce2451354590333aecc60343449e2feb0f4a1634384dda203de7ddc668080b4169cdc422f92a793b4ac8897dcbb4a73217bc4b4ed80c6869921
6
+ metadata.gz: 1dc905624bc15111d9baa63d21771a2ecf5b6c2dc5039a92f72dc56d7cf04a45544ff07a3cb12365d757b5ad7bf33674b50897f982d15513c40848082f5a2f7c
7
+ data.tar.gz: 1ece7a058129b5d71618bb299ccf8e07da54e8bbd6b45ec86ed8f6775f2247b7e13f184d6a8c1a7eb504235c5bd167dced7f8a605f4f9f73060d3e0e9e279ca3
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rspec-terraform (0.1.0.pre.22)
4
+ rspec-terraform (0.1.0.pre.25)
5
5
  rspec (>= 3.0)
6
6
  ruby-terraform (= 1.7.0.pre.13)
7
7
 
@@ -17,29 +17,36 @@ module RSpec
17
17
  end
18
18
 
19
19
  def merge_accumulating_maps(left, right)
20
- left_vars = left[:vars] || {}
21
- right_vars = right[:vars] || {}
22
- vars = left_vars.merge(right_vars)
23
-
24
- merged = {}
25
- unless left_vars == {} && right_vars == {}
26
- merged = merged.merge(vars: vars)
20
+ %i[vars backend_config].inject({}) do |merged, parameter|
21
+ merge_accumulating_map(parameter, merged, left, right)
27
22
  end
23
+ end
24
+
25
+ def merge_accumulating_map(parameter, accumulator, left, right)
26
+ left_value = left[parameter] || {}
27
+ right_value = right[parameter] || {}
28
+ merged_value = left_value.merge(right_value)
29
+
30
+ return accumulator if merged_value == {}
28
31
 
29
- merged
32
+ accumulator.merge(parameter => merged_value)
30
33
  end
31
34
 
32
35
  def merge_accumulating_lists(left, right)
33
- left_var_files = left[:var_files] || []
34
- right_var_files = right[:var_files] || []
35
- var_files = left_var_files + right_var_files
36
-
37
- merged = {}
38
- unless left_var_files == [] && right_var_files == []
39
- merged = merged.merge(var_files: var_files)
36
+ %i[var_files targets replaces plugin_dirs platforms]
37
+ .inject({}) do |merged, parameter|
38
+ merge_accumulating_list(parameter, merged, left, right)
40
39
  end
40
+ end
41
+
42
+ def merge_accumulating_list(parameter, accumulator, left, right)
43
+ left_value = left[parameter] || []
44
+ right_value = right[parameter] || []
45
+ merged_value = left_value + right_value
46
+
47
+ return accumulator if merged_value == []
41
48
 
42
- merged
49
+ accumulator.merge(parameter => merged_value)
43
50
  end
44
51
  end
45
52
  end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RSpec
4
+ module Terraform
5
+ module Configuration
6
+ class VarCaptor
7
+ def initialize(vars)
8
+ @vars = vars
9
+ end
10
+
11
+ def method_missing(method, *args, &_)
12
+ if method.to_s =~ /.*=$/
13
+ set_var(method.to_s.chop.to_sym, args[0])
14
+ else
15
+ read_var(method)
16
+ end
17
+ end
18
+
19
+ def respond_to_missing?
20
+ true
21
+ end
22
+
23
+ def to_h
24
+ @vars
25
+ end
26
+
27
+ private
28
+
29
+ def set_var(var, value)
30
+ @vars[var] = value
31
+ end
32
+
33
+ def read_var(var)
34
+ @vars[var]
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -2,6 +2,7 @@
2
2
 
3
3
  require_relative 'configuration/providers'
4
4
  require_relative 'configuration/merger'
5
+ require_relative 'configuration/var_captor'
5
6
 
6
7
  module RSpec
7
8
  module Terraform
@@ -2,32 +2,109 @@
2
2
 
3
3
  require 'ruby_terraform'
4
4
 
5
+ require_relative '../configuration/var_captor'
6
+
5
7
  module RSpec
6
8
  module Terraform
7
9
  module Helpers
8
10
  class Apply
9
- attr_reader(:overrides, :configuration_provider)
11
+ attr_reader(
12
+ :overrides, :configuration_provider, :binary, :execution_mode
13
+ )
10
14
 
11
15
  def initialize(overrides = {}, configuration_provider = nil)
12
16
  @overrides = overrides
13
17
  @configuration_provider =
14
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
+ apply(parameters)
15
33
  end
16
34
 
17
- def execute
18
- parameters = configuration_provider.resolve(overrides)
19
- parameters = parameters.merge(
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(
20
51
  input: false,
21
52
  auto_approve: true
22
53
  )
54
+ end
23
55
 
24
- do_apply(parameters)
56
+ def required_parameters(execution_mode)
57
+ {
58
+ in_place: [:configuration_directory],
59
+ isolated: %i[source_directory configuration_directory]
60
+ }[execution_mode] || []
25
61
  end
26
62
 
27
- private
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?
28
69
 
29
- def do_apply(parameters)
30
- RubyTerraform.apply(
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 apply(parameters)
107
+ apply_command.execute(
31
108
  chdir: parameters[:configuration_directory],
32
109
  state: parameters[:state_file],
33
110
  vars: parameters[:vars],
@@ -35,6 +112,14 @@ module RSpec
35
112
  auto_approve: parameters[:auto_approve]
36
113
  )
37
114
  end
115
+
116
+ def init_command
117
+ RubyTerraform::Commands::Init.new(binary: binary)
118
+ end
119
+
120
+ def apply_command
121
+ RubyTerraform::Commands::Apply.new(binary: binary)
122
+ end
38
123
  end
39
124
  end
40
125
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RSpec
4
4
  module Terraform
5
- VERSION = '0.1.0.pre.22'
5
+ VERSION = '0.1.0.pre.25'
6
6
  end
7
7
  end
@@ -10,4 +10,7 @@ require_relative 'terraform/helpers'
10
10
 
11
11
  RSpec.configure do |config|
12
12
  config.include(RSpec::Terraform::Matchers)
13
+
14
+ config.add_setting(:terraform_binary, default: 'terraform')
15
+ config.add_setting(:terraform_execution_mode, default: :in_place)
13
16
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-terraform
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.pre.22
4
+ version: 0.1.0.pre.25
5
5
  platform: ruby
6
6
  authors:
7
7
  - InfraBlocks Maintainers
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-08-18 00:00:00.000000000 Z
11
+ date: 2022-08-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -284,6 +284,7 @@ files:
284
284
  - lib/rspec/terraform/configuration/providers.rb
285
285
  - lib/rspec/terraform/configuration/providers/identity.rb
286
286
  - lib/rspec/terraform/configuration/providers/in_memory.rb
287
+ - lib/rspec/terraform/configuration/var_captor.rb
287
288
  - lib/rspec/terraform/helpers.rb
288
289
  - lib/rspec/terraform/helpers/apply.rb
289
290
  - lib/rspec/terraform/matchers.rb