rspec-terraform 0.1.0.pre.27 → 0.1.0.pre.30

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: fbe0f55f0b5903a638e780131a1a32b5e0859b0b92c36f431938ffb929568efc
4
- data.tar.gz: d052537b7512b50b1b94509b50cbb07b493f2efe18ec34a1326bf0555b7631ed
3
+ metadata.gz: b023d70b2108c48cd8043ce090e91a5232d32df7cef1b14c0045bd29a5742196
4
+ data.tar.gz: c335a6a00992aa894ede64d821be06033727ae056182f475244d77e720b23b35
5
5
  SHA512:
6
- metadata.gz: 9cbe733d1fd152518c6d9df00f5c9137ed51f3e7d7e4121b13c5f4b090fce912a965f2de6417b687b77bc1b68c5c9058b3402e4d6b4434f07383d3511364562d
7
- data.tar.gz: 0ef10564041a355a71e1cf61bfe4eeaf9b1db740074c24916d3d995b5935a24286571cf2098bef841356beb98359acb5ea883ea40cf0b5524435022f2fd573c9
6
+ metadata.gz: 922d9f5a1ca42a48a49cca3880d3bd3e36530bd0311d90e431a113c4eec359af133a7a5f1c24be311dd85d026584aeebf05f103ac88e6adf2ae021b2639a8648
7
+ data.tar.gz: e344912487fe48386df455ae61ef00d9e22075211f6317f7b45ccbb4905938811187394daac4ec04800f9b9934dc3bbb06c8755f523a9a44e4c620e825a1d28d
data/Gemfile.lock CHANGED
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rspec-terraform (0.1.0.pre.27)
4
+ rspec-terraform (0.1.0.pre.30)
5
+ confidante (>= 0.27)
5
6
  rspec (>= 3.0)
6
7
  ruby-terraform (= 1.7.0.pre.15)
7
8
 
@@ -19,8 +20,15 @@ GEM
19
20
  coderay (1.1.3)
20
21
  colored2 (3.1.2)
21
22
  concurrent-ruby (1.1.10)
23
+ confidante (0.27.0)
24
+ activesupport (>= 4)
25
+ hiera (~> 3.3, >= 3.3.1)
26
+ shikashi (~> 0.6)
22
27
  diff-lcs (1.5.0)
23
28
  docile (1.4.0)
29
+ evalhook (0.6.0)
30
+ partialruby (~> 0.3)
31
+ sexp_processor (~> 4.0)
24
32
  excon (0.92.4)
25
33
  faker (2.22.0)
26
34
  i18n (>= 1.8.11, < 2)
@@ -31,6 +39,7 @@ GEM
31
39
  ffi (1.15.5)
32
40
  formatador (1.1.0)
33
41
  gem-release (2.2.2)
42
+ getsource (0.2.2)
34
43
  guard (2.18.0)
35
44
  formatador (>= 0.2.4)
36
45
  listen (>= 2.7, < 4.0)
@@ -50,6 +59,7 @@ GEM
50
59
  rubocop (< 2.0)
51
60
  hamster (3.0.0)
52
61
  concurrent-ruby (~> 1.0)
62
+ hiera (3.10.0)
53
63
  i18n (1.12.0)
54
64
  concurrent-ruby (~> 1.0)
55
65
  immutable-struct (2.4.1)
@@ -74,6 +84,9 @@ GEM
74
84
  parallel (1.22.1)
75
85
  parser (3.1.2.1)
76
86
  ast (~> 2.4.1)
87
+ partialruby (0.3.0)
88
+ ruby2ruby (~> 2)
89
+ ruby_parser (~> 3)
77
90
  pry (0.14.1)
78
91
  coderay (~> 1.1)
79
92
  method_source (~> 1.0)
@@ -139,12 +152,21 @@ GEM
139
152
  immutable-struct (~> 2.4)
140
153
  lino (~> 3.0)
141
154
  ruby2_keywords (0.0.5)
155
+ ruby2ruby (2.4.4)
156
+ ruby_parser (~> 3.1)
157
+ sexp_processor (~> 4.6)
142
158
  ruby_gpg2 (0.8.0)
143
159
  lino (>= 1.5)
160
+ ruby_parser (3.19.1)
161
+ sexp_processor (~> 4.16)
144
162
  sawyer (0.9.2)
145
163
  addressable (>= 2.3.5)
146
164
  faraday (>= 0.17.3, < 3)
165
+ sexp_processor (4.16.1)
147
166
  shellany (0.0.1)
167
+ shikashi (0.6.0)
168
+ evalhook (>= 0.6.0)
169
+ getsource (>= 0.1.0)
148
170
  simplecov (0.21.2)
149
171
  docile (~> 1.1)
150
172
  simplecov-html (~> 0.11)
@@ -183,4 +205,4 @@ DEPENDENCIES
183
205
  terminal-notifier-guard
184
206
 
185
207
  BUNDLED WITH
186
- 2.3.20
208
+ 2.3.21
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ruby_terraform'
4
+
5
+ module RSpec
6
+ module Terraform
7
+ module Configuration
8
+ module Providers
9
+ class Base
10
+ def reset; end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'confidante'
4
+ require 'ruby_terraform'
5
+
6
+ require_relative './base'
7
+ require_relative '../merger'
8
+
9
+ module RSpec
10
+ module Terraform
11
+ module Configuration
12
+ module Providers
13
+ class Confidante < Base
14
+ attr_reader(
15
+ :parameters,
16
+ :scope_selector,
17
+ :overrides_selector,
18
+ :configuration,
19
+ :merger
20
+ )
21
+
22
+ def initialize(opts = {})
23
+ super()
24
+ @parameters = opts[:parameters] || []
25
+ @scope_selector = opts[:scope_selector] || ->(o) { o }
26
+ @overrides_selector = opts[:overrides_selector] || ->(o) { o }
27
+ @configuration = ::Confidante.configuration
28
+ @merger = opts[:merger] || Merger.new
29
+ end
30
+
31
+ def resolve(overrides = {})
32
+ resolved_configuration =
33
+ configuration
34
+ .for_scope(scope_selector.call(overrides))
35
+ .for_overrides(overrides_selector.call(overrides))
36
+ result = parameters.inject({}) do |acc, parameter|
37
+ value = resolved_configuration.send(parameter)
38
+ value.nil? ? acc : acc.merge(parameter => value)
39
+ end
40
+ merger.merge(result, overrides)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -2,11 +2,13 @@
2
2
 
3
3
  require 'ruby_terraform'
4
4
 
5
+ require_relative './base'
6
+
5
7
  module RSpec
6
8
  module Terraform
7
9
  module Configuration
8
10
  module Providers
9
- class Identity
11
+ class Identity < Base
10
12
  def resolve(overrides = {})
11
13
  overrides
12
14
  end
@@ -1,16 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'ruby_terraform'
4
+
5
+ require_relative './base'
4
6
  require_relative '../merger'
5
7
 
6
8
  module RSpec
7
9
  module Terraform
8
10
  module Configuration
9
11
  module Providers
10
- class InMemory
12
+ class InMemory < Base
11
13
  attr_reader(:configuration)
12
14
 
13
15
  def initialize(configuration = {})
16
+ super()
14
17
  @configuration = configuration
15
18
  @merger = Merger.new
16
19
  end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ruby_terraform'
4
+ require 'securerandom'
5
+
6
+ require_relative './base'
7
+
8
+ module RSpec
9
+ module Terraform
10
+ module Configuration
11
+ module Providers
12
+ class Seed < Base
13
+ attr_reader(:generator, :merger)
14
+
15
+ def initialize(opts = {})
16
+ super()
17
+ @generator =
18
+ opts[:generator] || -> { SecureRandom.alphanumeric(10) }
19
+ @merger = opts[:merger] || Merger.new
20
+ end
21
+
22
+ def resolve(overrides = {})
23
+ merger.merge({ seed: seed }, overrides)
24
+ end
25
+
26
+ def reset
27
+ @seed = nil
28
+ end
29
+
30
+ private
31
+
32
+ def seed
33
+ @seed ||= generator.call
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -2,6 +2,8 @@
2
2
 
3
3
  require_relative 'providers/identity'
4
4
  require_relative 'providers/in_memory'
5
+ require_relative 'providers/confidante'
6
+ require_relative 'providers/seed'
5
7
 
6
8
  module RSpec
7
9
  module Terraform
@@ -12,8 +12,12 @@ module RSpec
12
12
  Providers::Identity.new
13
13
  end
14
14
 
15
- def in_memory_provider(overrides)
16
- Providers::InMemory.new(overrides)
15
+ def in_memory_provider(opts)
16
+ Providers::InMemory.new(opts)
17
+ end
18
+
19
+ def confidante_provider(opts)
20
+ Providers::Confidante.new(opts)
17
21
  end
18
22
  end
19
23
  end
@@ -0,0 +1,130 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ruby_terraform'
4
+
5
+ module RSpec
6
+ module Terraform
7
+ module Helpers
8
+ class Output
9
+ attr_reader(
10
+ :overrides, :configuration_provider, :binary, :execution_mode
11
+ )
12
+
13
+ def initialize(overrides = {}, configuration_provider = nil)
14
+ @overrides = overrides
15
+ @configuration_provider =
16
+ configuration_provider || Configuration.identity_provider
17
+ @binary = RSpec.configuration.terraform_binary
18
+ @execution_mode = RSpec.configuration.terraform_execution_mode
19
+ end
20
+
21
+ def execute
22
+ parameters = with_configuration_provider_parameters(overrides)
23
+ parameters = with_mandatory_parameters(parameters)
24
+
25
+ ensure_required_parameters(parameters)
26
+
27
+ clean(parameters)
28
+ init(parameters)
29
+ output_value = output(parameters)
30
+
31
+ JSON.parse(output_value, symbolize_names: true)
32
+ end
33
+
34
+ private
35
+
36
+ def with_configuration_provider_parameters(parameters)
37
+ configuration_provider.resolve(parameters)
38
+ end
39
+
40
+ def with_mandatory_parameters(parameters)
41
+ parameters.merge(
42
+ json: true
43
+ )
44
+ end
45
+
46
+ def required_parameters(execution_mode)
47
+ {
48
+ in_place: %i[name configuration_directory],
49
+ isolated: %i[name source_directory configuration_directory]
50
+ }[execution_mode] || []
51
+ end
52
+
53
+ def ensure_required_parameters(parameters)
54
+ missing_parameters =
55
+ required_parameters(execution_mode)
56
+ .filter { |parameter| parameters[parameter].nil? }
57
+
58
+ return if missing_parameters.empty?
59
+
60
+ raise_missing_parameters(missing_parameters)
61
+ end
62
+
63
+ def raise_missing_parameters(parameters)
64
+ parameters = parameters.collect { |parameter| "`:#{parameter}`" }
65
+ if parameters.count == 1
66
+ raise StandardError,
67
+ "Required parameter: #{parameters[0]} missing."
68
+ else
69
+ parameters = "#{parameters[..-2].join(', ')} and #{parameters[-1]}"
70
+ raise StandardError,
71
+ "Required parameters: #{parameters} missing."
72
+ end
73
+ end
74
+
75
+ def clean(parameters)
76
+ return unless execution_mode == :isolated
77
+
78
+ FileUtils.rm_rf(parameters[:configuration_directory])
79
+ FileUtils.mkdir_p(parameters[:configuration_directory])
80
+ end
81
+
82
+ def init(parameters)
83
+ init_command.execute(init_parameters(parameters))
84
+ end
85
+
86
+ def output(parameters)
87
+ stdout = StringIO.new
88
+ output_command(stdout: stdout)
89
+ .execute(output_parameters(parameters))
90
+ stdout.string
91
+ end
92
+
93
+ def init_command
94
+ RubyTerraform::Commands::Init.new(binary: binary)
95
+ end
96
+
97
+ def output_command(opts = {})
98
+ RubyTerraform::Commands::Output.new(opts.merge(binary: binary))
99
+ end
100
+
101
+ def init_parameters(parameters)
102
+ init_parameters = parameters.merge(
103
+ chdir: parameters[:configuration_directory],
104
+ input: false
105
+ )
106
+ if execution_mode == :isolated
107
+ init_parameters =
108
+ init_parameters.merge(from_module: parameters[:source_directory])
109
+ end
110
+
111
+ init_parameters
112
+ end
113
+
114
+ def output_parameters(parameters)
115
+ output_parameters =
116
+ parameters.merge(
117
+ chdir: parameters[:configuration_directory]
118
+ )
119
+
120
+ if parameters[:state_file]
121
+ output_parameters =
122
+ output_parameters.merge(state: parameters[:state_file])
123
+ end
124
+
125
+ output_parameters
126
+ end
127
+ end
128
+ end
129
+ end
130
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../configuration/var_captor'
4
+
5
+ module RSpec
6
+ module Terraform
7
+ module Helpers
8
+ class Var
9
+ attr_reader(:overrides, :configuration_provider)
10
+
11
+ def initialize(overrides = {}, configuration_provider = nil)
12
+ @overrides = overrides
13
+ @configuration_provider =
14
+ configuration_provider || Configuration.identity_provider
15
+ end
16
+
17
+ def execute(&block)
18
+ parameters = with_configuration_provider_parameters(overrides)
19
+ parameters = with_resolved_vars(parameters, &block)
20
+
21
+ parameters[:vars][parameters[:name].to_sym]
22
+ end
23
+
24
+ private
25
+
26
+ def with_configuration_provider_parameters(parameters)
27
+ configuration_provider.resolve(parameters)
28
+ end
29
+
30
+ def with_resolved_vars(parameters, &block)
31
+ return parameters unless block_given?
32
+
33
+ var_captor = Configuration::VarCaptor.new(parameters[:vars] || {})
34
+ block.call(var_captor)
35
+ parameters.merge(vars: var_captor.to_h)
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -3,6 +3,8 @@
3
3
  require_relative './helpers/apply'
4
4
  require_relative './helpers/destroy'
5
5
  require_relative './helpers/plan'
6
+ require_relative './helpers/output'
7
+ require_relative './helpers/var'
6
8
 
7
9
  module RSpec
8
10
  module Terraform
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RSpec
4
4
  module Terraform
5
- VERSION = '0.1.0.pre.27'
5
+ VERSION = '0.1.0.pre.30'
6
6
  end
7
7
  end
@@ -37,6 +37,7 @@ Gem::Specification.new do |spec|
37
37
 
38
38
  spec.required_ruby_version = '>= 2.7'
39
39
 
40
+ spec.add_dependency 'confidante', '>= 0.27'
40
41
  spec.add_dependency 'rspec', '>= 3.0'
41
42
  spec.add_dependency 'ruby-terraform', '1.7.0.pre.15'
42
43
 
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-terraform
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.pre.27
4
+ version: 0.1.0.pre.30
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-24 00:00:00.000000000 Z
11
+ date: 2022-08-26 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: confidante
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0.27'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0.27'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: rspec
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -282,13 +296,18 @@ files:
282
296
  - lib/rspec/terraform/configuration.rb
283
297
  - lib/rspec/terraform/configuration/merger.rb
284
298
  - lib/rspec/terraform/configuration/providers.rb
299
+ - lib/rspec/terraform/configuration/providers/base.rb
300
+ - lib/rspec/terraform/configuration/providers/confidante.rb
285
301
  - lib/rspec/terraform/configuration/providers/identity.rb
286
302
  - lib/rspec/terraform/configuration/providers/in_memory.rb
303
+ - lib/rspec/terraform/configuration/providers/seed.rb
287
304
  - lib/rspec/terraform/configuration/var_captor.rb
288
305
  - lib/rspec/terraform/helpers.rb
289
306
  - lib/rspec/terraform/helpers/apply.rb
290
307
  - lib/rspec/terraform/helpers/destroy.rb
308
+ - lib/rspec/terraform/helpers/output.rb
291
309
  - lib/rspec/terraform/helpers/plan.rb
310
+ - lib/rspec/terraform/helpers/var.rb
292
311
  - lib/rspec/terraform/matchers.rb
293
312
  - lib/rspec/terraform/matchers/include_output_change.rb
294
313
  - lib/rspec/terraform/matchers/include_resource_change.rb