rspec-terraform 0.1.0.pre.27 → 0.1.0.pre.30
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 +4 -4
- data/Gemfile.lock +24 -2
- data/lib/rspec/terraform/configuration/providers/base.rb +15 -0
- data/lib/rspec/terraform/configuration/providers/confidante.rb +46 -0
- data/lib/rspec/terraform/configuration/providers/identity.rb +3 -1
- data/lib/rspec/terraform/configuration/providers/in_memory.rb +4 -1
- data/lib/rspec/terraform/configuration/providers/seed.rb +39 -0
- data/lib/rspec/terraform/configuration/providers.rb +2 -0
- data/lib/rspec/terraform/configuration.rb +6 -2
- data/lib/rspec/terraform/helpers/output.rb +130 -0
- data/lib/rspec/terraform/helpers/var.rb +40 -0
- data/lib/rspec/terraform/helpers.rb +2 -0
- data/lib/rspec/terraform/version.rb +1 -1
- data/rspec-terraform.gemspec +1 -0
- metadata +21 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b023d70b2108c48cd8043ce090e91a5232d32df7cef1b14c0045bd29a5742196
|
4
|
+
data.tar.gz: c335a6a00992aa894ede64d821be06033727ae056182f475244d77e720b23b35
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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.
|
208
|
+
2.3.21
|
@@ -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
|
@@ -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
|
@@ -12,8 +12,12 @@ module RSpec
|
|
12
12
|
Providers::Identity.new
|
13
13
|
end
|
14
14
|
|
15
|
-
def in_memory_provider(
|
16
|
-
Providers::InMemory.new(
|
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
|
data/rspec-terraform.gemspec
CHANGED
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.
|
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-
|
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
|