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

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: 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