rspec-terraform 0.1.0.pre.44 → 0.1.0.pre.46
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 +4 -4
- data/lib/rspec/terraform/helpers/actions.rb +209 -0
- data/lib/rspec/terraform/helpers/apply.rb +6 -137
- data/lib/rspec/terraform/helpers/base.rb +56 -0
- data/lib/rspec/terraform/helpers/destroy.rb +3 -133
- data/lib/rspec/terraform/helpers/output.rb +11 -119
- data/lib/rspec/terraform/helpers/parameters.rb +33 -0
- data/lib/rspec/terraform/helpers/plan.rb +4 -156
- data/lib/rspec/terraform/helpers/var.rb +3 -24
- data/lib/rspec/terraform/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2595a9e060198c8472a6a91148d1d0e8c11532efee15fef65d9c732605b17a8d
|
4
|
+
data.tar.gz: e63395a9eb9228904cf3641b27e8f98d383757e1f2caa32a4249db296de99162
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a8cf7c02682147df95b9229c8fbf923b0cb1d35fc2b3b104452b560bbc5f0ee796d0fac397bc24ce188d7293ec7bc49bbed9782846d3e381aac20be9d2e89d94
|
7
|
+
data.tar.gz: 531a6420c69096768cb72f8593bea6e8e1d347ebe0182cc58e7a8c9b2ca76cfc67ec89b67c47bf1579712978a5d76a38bc850683cfe192adead3ca1e7d8e9368
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rspec-terraform (0.1.0.pre.
|
4
|
+
rspec-terraform (0.1.0.pre.46)
|
5
5
|
confidante (>= 0.27)
|
6
6
|
rspec (>= 3.0)
|
7
7
|
ruby-terraform (= 1.7.0.pre.17)
|
@@ -145,8 +145,8 @@ GEM
|
|
145
145
|
parser (>= 3.1.1.0)
|
146
146
|
rubocop-rake (0.6.0)
|
147
147
|
rubocop (~> 1.0)
|
148
|
-
rubocop-rspec (2.
|
149
|
-
rubocop (~> 1.
|
148
|
+
rubocop-rspec (2.13.2)
|
149
|
+
rubocop (~> 1.33)
|
150
150
|
ruby-progressbar (1.11.0)
|
151
151
|
ruby-terraform (1.7.0.pre.17)
|
152
152
|
immutable-struct (~> 2.4)
|
@@ -178,7 +178,7 @@ GEM
|
|
178
178
|
thor (1.2.1)
|
179
179
|
tzinfo (2.0.5)
|
180
180
|
concurrent-ruby (~> 1.0)
|
181
|
-
unicode-display_width (2.
|
181
|
+
unicode-display_width (2.3.0)
|
182
182
|
|
183
183
|
PLATFORMS
|
184
184
|
arm64-darwin-21
|
@@ -0,0 +1,209 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../configuration/var_captor'
|
4
|
+
|
5
|
+
module RSpec
|
6
|
+
module Terraform
|
7
|
+
module Helpers
|
8
|
+
# rubocop:disable Metrics/ModuleLength
|
9
|
+
module Actions
|
10
|
+
def execute_if_required(parameters, &block)
|
11
|
+
only_if = parameters[:only_if]
|
12
|
+
only_if_args = only_if ? [parameters].slice(0, only_if.arity) : []
|
13
|
+
should_execute = only_if ? only_if.call(*only_if_args) : true
|
14
|
+
|
15
|
+
block.call if should_execute
|
16
|
+
end
|
17
|
+
|
18
|
+
def clean(parameters)
|
19
|
+
return unless execution_mode == :isolated
|
20
|
+
|
21
|
+
FileUtils.rm_rf(parameters[:configuration_directory])
|
22
|
+
FileUtils.mkdir_p(parameters[:configuration_directory])
|
23
|
+
end
|
24
|
+
|
25
|
+
def remove(parameters, file)
|
26
|
+
FileUtils.rm_f(
|
27
|
+
File.join(parameters[:configuration_directory], file)
|
28
|
+
)
|
29
|
+
end
|
30
|
+
|
31
|
+
def validate(parameters)
|
32
|
+
missing_parameters =
|
33
|
+
required_parameters(execution_mode)
|
34
|
+
.filter { |parameter| parameters[parameter].nil? }
|
35
|
+
|
36
|
+
return if missing_parameters.empty?
|
37
|
+
|
38
|
+
raise_missing_parameters(missing_parameters)
|
39
|
+
end
|
40
|
+
|
41
|
+
def init(parameters)
|
42
|
+
init_command.execute(init_parameters(parameters))
|
43
|
+
end
|
44
|
+
|
45
|
+
def apply(parameters)
|
46
|
+
apply_command.execute(apply_parameters(parameters))
|
47
|
+
end
|
48
|
+
|
49
|
+
def destroy(parameters)
|
50
|
+
destroy_command.execute(destroy_parameters(parameters))
|
51
|
+
end
|
52
|
+
|
53
|
+
def plan(parameters)
|
54
|
+
plan_parameters = plan_parameters(parameters)
|
55
|
+
plan_command.execute(plan_parameters)
|
56
|
+
plan_parameters[:out]
|
57
|
+
end
|
58
|
+
|
59
|
+
def show(parameters, plan_file)
|
60
|
+
stdout = StringIO.new
|
61
|
+
show_command(stdout: stdout)
|
62
|
+
.execute(show_parameters(parameters, plan_file))
|
63
|
+
stdout.string
|
64
|
+
end
|
65
|
+
|
66
|
+
def output(parameters)
|
67
|
+
stdout = StringIO.new
|
68
|
+
output_command(stdout: stdout)
|
69
|
+
.execute(output_parameters(parameters))
|
70
|
+
stdout.string
|
71
|
+
end
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
def raise_missing_parameters(parameters)
|
76
|
+
parameters = parameters.collect { |parameter| "`:#{parameter}`" }
|
77
|
+
if parameters.count == 1
|
78
|
+
raise StandardError,
|
79
|
+
"Required parameter: #{parameters[0]} missing."
|
80
|
+
else
|
81
|
+
parameters = "#{parameters[..-2].join(', ')} and #{parameters[-1]}"
|
82
|
+
raise StandardError,
|
83
|
+
"Required parameters: #{parameters} missing."
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def instantiate_command(klass, opts = {})
|
88
|
+
klass.new(command_options.merge(opts))
|
89
|
+
end
|
90
|
+
|
91
|
+
def init_command
|
92
|
+
instantiate_command(RubyTerraform::Commands::Init)
|
93
|
+
end
|
94
|
+
|
95
|
+
def apply_command
|
96
|
+
instantiate_command(RubyTerraform::Commands::Apply)
|
97
|
+
end
|
98
|
+
|
99
|
+
def destroy_command
|
100
|
+
instantiate_command(RubyTerraform::Commands::Destroy)
|
101
|
+
end
|
102
|
+
|
103
|
+
def plan_command
|
104
|
+
instantiate_command(RubyTerraform::Commands::Plan)
|
105
|
+
end
|
106
|
+
|
107
|
+
def show_command(opts = {})
|
108
|
+
instantiate_command(RubyTerraform::Commands::Show, opts)
|
109
|
+
end
|
110
|
+
|
111
|
+
def output_command(opts = {})
|
112
|
+
instantiate_command(RubyTerraform::Commands::Output, opts)
|
113
|
+
end
|
114
|
+
|
115
|
+
def init_parameters(parameters)
|
116
|
+
init_parameters = parameters.merge(
|
117
|
+
chdir: parameters[:configuration_directory],
|
118
|
+
input: false
|
119
|
+
)
|
120
|
+
if execution_mode == :isolated
|
121
|
+
init_parameters =
|
122
|
+
init_parameters.merge(from_module: parameters[:source_directory])
|
123
|
+
end
|
124
|
+
|
125
|
+
init_parameters
|
126
|
+
end
|
127
|
+
|
128
|
+
# rubocop:disable Metrics/MethodLength
|
129
|
+
def apply_parameters(parameters)
|
130
|
+
apply_parameters =
|
131
|
+
parameters.merge(
|
132
|
+
chdir: parameters[:configuration_directory],
|
133
|
+
input: false,
|
134
|
+
auto_approve: true
|
135
|
+
)
|
136
|
+
|
137
|
+
if parameters[:state_file]
|
138
|
+
apply_parameters =
|
139
|
+
apply_parameters.merge(state: parameters[:state_file])
|
140
|
+
end
|
141
|
+
|
142
|
+
apply_parameters
|
143
|
+
end
|
144
|
+
# rubocop:enable Metrics/MethodLength
|
145
|
+
|
146
|
+
# rubocop:disable Metrics/MethodLength
|
147
|
+
def destroy_parameters(parameters)
|
148
|
+
destroy_parameters =
|
149
|
+
parameters.merge(
|
150
|
+
chdir: parameters[:configuration_directory],
|
151
|
+
input: false,
|
152
|
+
auto_approve: true
|
153
|
+
)
|
154
|
+
|
155
|
+
if parameters[:state_file]
|
156
|
+
destroy_parameters =
|
157
|
+
destroy_parameters.merge(state: parameters[:state_file])
|
158
|
+
end
|
159
|
+
|
160
|
+
destroy_parameters
|
161
|
+
end
|
162
|
+
# rubocop:enable Metrics/MethodLength
|
163
|
+
|
164
|
+
# rubocop:disable Metrics/MethodLength
|
165
|
+
def plan_parameters(parameters)
|
166
|
+
plan_parameters =
|
167
|
+
parameters.merge(
|
168
|
+
chdir: parameters[:configuration_directory],
|
169
|
+
out: parameters[:plan_file_name] ||
|
170
|
+
"#{SecureRandom.hex[0, 10]}.tfplan",
|
171
|
+
input: false
|
172
|
+
)
|
173
|
+
|
174
|
+
if parameters[:state_file]
|
175
|
+
plan_parameters =
|
176
|
+
plan_parameters.merge(state: parameters[:state_file])
|
177
|
+
end
|
178
|
+
|
179
|
+
plan_parameters
|
180
|
+
end
|
181
|
+
# rubocop:enable Metrics/MethodLength
|
182
|
+
|
183
|
+
def show_parameters(parameters, plan_file)
|
184
|
+
parameters.merge(
|
185
|
+
chdir: parameters[:configuration_directory],
|
186
|
+
path: plan_file,
|
187
|
+
no_color: true,
|
188
|
+
json: true
|
189
|
+
)
|
190
|
+
end
|
191
|
+
|
192
|
+
def output_parameters(parameters)
|
193
|
+
output_parameters =
|
194
|
+
parameters.merge(
|
195
|
+
chdir: parameters[:configuration_directory]
|
196
|
+
)
|
197
|
+
|
198
|
+
if parameters[:state_file]
|
199
|
+
output_parameters =
|
200
|
+
output_parameters.merge(state: parameters[:state_file])
|
201
|
+
end
|
202
|
+
|
203
|
+
output_parameters
|
204
|
+
end
|
205
|
+
end
|
206
|
+
# rubocop:enable Metrics/ModuleLength
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|
@@ -2,38 +2,14 @@
|
|
2
2
|
|
3
3
|
require 'ruby_terraform'
|
4
4
|
|
5
|
-
require_relative '
|
5
|
+
require_relative './base'
|
6
6
|
|
7
7
|
module RSpec
|
8
8
|
module Terraform
|
9
9
|
module Helpers
|
10
|
-
|
11
|
-
class Apply
|
12
|
-
attr_reader(
|
13
|
-
:configuration_provider,
|
14
|
-
:binary,
|
15
|
-
:logger,
|
16
|
-
:stdin,
|
17
|
-
:stdout,
|
18
|
-
:stderr,
|
19
|
-
:execution_mode
|
20
|
-
)
|
21
|
-
|
22
|
-
def initialize(opts = {})
|
23
|
-
@configuration_provider =
|
24
|
-
opts[:configuration_provider] || Configuration.identity_provider
|
25
|
-
@binary = opts[:binary] || 'terraform'
|
26
|
-
@logger = opts[:logger]
|
27
|
-
@stdin = opts[:stdin]
|
28
|
-
@stdout = opts[:stdout]
|
29
|
-
@stderr = opts[:stderr]
|
30
|
-
@execution_mode = opts[:execution_mode] || :in_place
|
31
|
-
end
|
32
|
-
|
10
|
+
class Apply < Base
|
33
11
|
def execute(overrides = {}, &block)
|
34
|
-
parameters =
|
35
|
-
parameters = with_resolved_vars(parameters, &block)
|
36
|
-
parameters = with_mandatory_parameters(parameters)
|
12
|
+
parameters = resolve_parameters(overrides, &block)
|
37
13
|
|
38
14
|
execute_if_required(parameters) do
|
39
15
|
validate(parameters)
|
@@ -45,31 +21,11 @@ module RSpec
|
|
45
21
|
|
46
22
|
private
|
47
23
|
|
48
|
-
def
|
49
|
-
|
50
|
-
only_if_args = only_if ? [parameters].slice(0, only_if.arity) : []
|
51
|
-
should_execute = only_if ? only_if.call(*only_if_args) : true
|
52
|
-
|
53
|
-
block.call if should_execute
|
54
|
-
end
|
55
|
-
|
56
|
-
def with_configuration_provider_parameters(parameters)
|
57
|
-
configuration_provider.resolve(parameters)
|
58
|
-
end
|
59
|
-
|
60
|
-
def with_resolved_vars(parameters, &block)
|
61
|
-
return parameters unless block_given?
|
62
|
-
|
63
|
-
var_captor = Configuration::VarCaptor.new(parameters[:vars] || {})
|
64
|
-
block.call(var_captor)
|
65
|
-
parameters.merge(vars: var_captor.to_h)
|
66
|
-
end
|
67
|
-
|
68
|
-
def with_mandatory_parameters(parameters)
|
69
|
-
parameters.merge(
|
24
|
+
def mandatory_parameters
|
25
|
+
{
|
70
26
|
input: false,
|
71
27
|
auto_approve: true
|
72
|
-
|
28
|
+
}
|
73
29
|
end
|
74
30
|
|
75
31
|
def required_parameters(execution_mode)
|
@@ -78,94 +34,7 @@ module RSpec
|
|
78
34
|
isolated: %i[source_directory configuration_directory]
|
79
35
|
}[execution_mode] || []
|
80
36
|
end
|
81
|
-
|
82
|
-
def raise_missing_parameters(parameters)
|
83
|
-
parameters = parameters.collect { |parameter| "`:#{parameter}`" }
|
84
|
-
if parameters.count == 1
|
85
|
-
raise StandardError,
|
86
|
-
"Required parameter: #{parameters[0]} missing."
|
87
|
-
else
|
88
|
-
parameters = "#{parameters[..-2].join(', ')} and #{parameters[-1]}"
|
89
|
-
raise StandardError,
|
90
|
-
"Required parameters: #{parameters} missing."
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
def validate(parameters)
|
95
|
-
missing_parameters =
|
96
|
-
required_parameters(execution_mode)
|
97
|
-
.filter { |parameter| parameters[parameter].nil? }
|
98
|
-
|
99
|
-
return if missing_parameters.empty?
|
100
|
-
|
101
|
-
raise_missing_parameters(missing_parameters)
|
102
|
-
end
|
103
|
-
|
104
|
-
def clean(parameters)
|
105
|
-
return unless execution_mode == :isolated
|
106
|
-
|
107
|
-
FileUtils.rm_rf(parameters[:configuration_directory])
|
108
|
-
FileUtils.mkdir_p(parameters[:configuration_directory])
|
109
|
-
end
|
110
|
-
|
111
|
-
def init(parameters)
|
112
|
-
init_command.execute(init_parameters(parameters))
|
113
|
-
end
|
114
|
-
|
115
|
-
def apply(parameters)
|
116
|
-
apply_command.execute(apply_parameters(parameters))
|
117
|
-
end
|
118
|
-
|
119
|
-
def init_command
|
120
|
-
RubyTerraform::Commands::Init.new(command_options)
|
121
|
-
end
|
122
|
-
|
123
|
-
def apply_command
|
124
|
-
RubyTerraform::Commands::Apply.new(command_options)
|
125
|
-
end
|
126
|
-
|
127
|
-
def init_parameters(parameters)
|
128
|
-
init_parameters = parameters.merge(
|
129
|
-
chdir: parameters[:configuration_directory],
|
130
|
-
input: false
|
131
|
-
)
|
132
|
-
if execution_mode == :isolated
|
133
|
-
init_parameters =
|
134
|
-
init_parameters.merge(from_module: parameters[:source_directory])
|
135
|
-
end
|
136
|
-
|
137
|
-
init_parameters
|
138
|
-
end
|
139
|
-
|
140
|
-
# rubocop:disable Metrics/MethodLength
|
141
|
-
def apply_parameters(parameters)
|
142
|
-
apply_parameters =
|
143
|
-
parameters.merge(
|
144
|
-
chdir: parameters[:configuration_directory],
|
145
|
-
input: false,
|
146
|
-
auto_approve: true
|
147
|
-
)
|
148
|
-
|
149
|
-
if parameters[:state_file]
|
150
|
-
apply_parameters =
|
151
|
-
apply_parameters.merge(state: parameters[:state_file])
|
152
|
-
end
|
153
|
-
|
154
|
-
apply_parameters
|
155
|
-
end
|
156
|
-
# rubocop:enable Metrics/MethodLength
|
157
|
-
|
158
|
-
def command_options
|
159
|
-
{
|
160
|
-
binary: binary,
|
161
|
-
logger: logger,
|
162
|
-
stdin: stdin,
|
163
|
-
stdout: stdout,
|
164
|
-
stderr: stderr
|
165
|
-
}
|
166
|
-
end
|
167
37
|
end
|
168
|
-
# rubocop:enable Metrics/ClassLength
|
169
38
|
end
|
170
39
|
end
|
171
40
|
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative './actions'
|
4
|
+
require_relative './parameters'
|
5
|
+
|
6
|
+
module RSpec
|
7
|
+
module Terraform
|
8
|
+
module Helpers
|
9
|
+
class Base
|
10
|
+
include Parameters
|
11
|
+
include Actions
|
12
|
+
|
13
|
+
attr_reader(
|
14
|
+
:configuration_provider,
|
15
|
+
:binary,
|
16
|
+
:logger,
|
17
|
+
:stdin,
|
18
|
+
:stdout,
|
19
|
+
:stderr,
|
20
|
+
:execution_mode
|
21
|
+
)
|
22
|
+
|
23
|
+
def initialize(opts = {})
|
24
|
+
@configuration_provider =
|
25
|
+
opts[:configuration_provider] || Configuration.identity_provider
|
26
|
+
@binary = opts[:binary] || 'terraform'
|
27
|
+
@logger = opts[:logger]
|
28
|
+
@stdin = opts[:stdin]
|
29
|
+
@stdout = opts[:stdout]
|
30
|
+
@stderr = opts[:stderr]
|
31
|
+
@execution_mode = opts[:execution_mode] || :in_place
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def mandatory_parameters
|
37
|
+
{}
|
38
|
+
end
|
39
|
+
|
40
|
+
def required_parameters(_)
|
41
|
+
[]
|
42
|
+
end
|
43
|
+
|
44
|
+
def command_options
|
45
|
+
{
|
46
|
+
binary: binary,
|
47
|
+
logger: logger,
|
48
|
+
stdin: stdin,
|
49
|
+
stdout: stdout,
|
50
|
+
stderr: stderr
|
51
|
+
}
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -2,37 +2,14 @@
|
|
2
2
|
|
3
3
|
require 'ruby_terraform'
|
4
4
|
|
5
|
-
require_relative '
|
5
|
+
require_relative './base'
|
6
6
|
|
7
7
|
module RSpec
|
8
8
|
module Terraform
|
9
9
|
module Helpers
|
10
|
-
|
11
|
-
class Destroy
|
12
|
-
attr_reader(
|
13
|
-
:configuration_provider,
|
14
|
-
:binary,
|
15
|
-
:logger,
|
16
|
-
:stdin,
|
17
|
-
:stdout,
|
18
|
-
:stderr,
|
19
|
-
:execution_mode
|
20
|
-
)
|
21
|
-
|
22
|
-
def initialize(opts = {})
|
23
|
-
@configuration_provider =
|
24
|
-
opts[:configuration_provider] || Configuration.identity_provider
|
25
|
-
@binary = opts[:binary] || 'terraform'
|
26
|
-
@logger = opts[:logger]
|
27
|
-
@stdin = opts[:stdin]
|
28
|
-
@stdout = opts[:stdout]
|
29
|
-
@stderr = opts[:stderr]
|
30
|
-
@execution_mode = opts[:execution_mode] || :in_place
|
31
|
-
end
|
32
|
-
|
10
|
+
class Destroy < Base
|
33
11
|
def execute(overrides = {}, &block)
|
34
|
-
parameters =
|
35
|
-
parameters = with_resolved_vars(parameters, &block)
|
12
|
+
parameters = resolve_parameters(overrides, &block)
|
36
13
|
|
37
14
|
execute_if_required(parameters) do
|
38
15
|
validate(parameters)
|
@@ -44,120 +21,13 @@ module RSpec
|
|
44
21
|
|
45
22
|
private
|
46
23
|
|
47
|
-
def execute_if_required(parameters, &block)
|
48
|
-
only_if = parameters[:only_if]
|
49
|
-
only_if_args = only_if ? [parameters].slice(0, only_if.arity) : []
|
50
|
-
should_execute = only_if ? only_if.call(*only_if_args) : true
|
51
|
-
|
52
|
-
block.call if should_execute
|
53
|
-
end
|
54
|
-
|
55
|
-
def with_configuration_provider_parameters(parameters)
|
56
|
-
configuration_provider.resolve(parameters)
|
57
|
-
end
|
58
|
-
|
59
|
-
def with_resolved_vars(parameters, &block)
|
60
|
-
return parameters unless block_given?
|
61
|
-
|
62
|
-
var_captor = Configuration::VarCaptor.new(parameters[:vars] || {})
|
63
|
-
block.call(var_captor)
|
64
|
-
parameters.merge(vars: var_captor.to_h)
|
65
|
-
end
|
66
|
-
|
67
24
|
def required_parameters(execution_mode)
|
68
25
|
{
|
69
26
|
in_place: [:configuration_directory],
|
70
27
|
isolated: %i[source_directory configuration_directory]
|
71
28
|
}[execution_mode] || []
|
72
29
|
end
|
73
|
-
|
74
|
-
def raise_missing_parameters(parameters)
|
75
|
-
parameters = parameters.collect { |parameter| "`:#{parameter}`" }
|
76
|
-
if parameters.count == 1
|
77
|
-
raise StandardError,
|
78
|
-
"Required parameter: #{parameters[0]} missing."
|
79
|
-
else
|
80
|
-
parameters = "#{parameters[..-2].join(', ')} and #{parameters[-1]}"
|
81
|
-
raise StandardError,
|
82
|
-
"Required parameters: #{parameters} missing."
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
def validate(parameters)
|
87
|
-
missing_parameters =
|
88
|
-
required_parameters(execution_mode)
|
89
|
-
.filter { |parameter| parameters[parameter].nil? }
|
90
|
-
|
91
|
-
return if missing_parameters.empty?
|
92
|
-
|
93
|
-
raise_missing_parameters(missing_parameters)
|
94
|
-
end
|
95
|
-
|
96
|
-
def clean(parameters)
|
97
|
-
return unless execution_mode == :isolated
|
98
|
-
|
99
|
-
FileUtils.rm_rf(parameters[:configuration_directory])
|
100
|
-
FileUtils.mkdir_p(parameters[:configuration_directory])
|
101
|
-
end
|
102
|
-
|
103
|
-
def init(parameters)
|
104
|
-
init_command.execute(init_parameters(parameters))
|
105
|
-
end
|
106
|
-
|
107
|
-
def destroy(parameters)
|
108
|
-
destroy_command.execute(destroy_parameters(parameters))
|
109
|
-
end
|
110
|
-
|
111
|
-
def init_command
|
112
|
-
RubyTerraform::Commands::Init.new(command_options)
|
113
|
-
end
|
114
|
-
|
115
|
-
def destroy_command
|
116
|
-
RubyTerraform::Commands::Destroy.new(command_options)
|
117
|
-
end
|
118
|
-
|
119
|
-
def init_parameters(parameters)
|
120
|
-
init_parameters = parameters.merge(
|
121
|
-
chdir: parameters[:configuration_directory],
|
122
|
-
input: false
|
123
|
-
)
|
124
|
-
if execution_mode == :isolated
|
125
|
-
init_parameters =
|
126
|
-
init_parameters.merge(from_module: parameters[:source_directory])
|
127
|
-
end
|
128
|
-
|
129
|
-
init_parameters
|
130
|
-
end
|
131
|
-
|
132
|
-
# rubocop:disable Metrics/MethodLength
|
133
|
-
def destroy_parameters(parameters)
|
134
|
-
destroy_parameters =
|
135
|
-
parameters.merge(
|
136
|
-
chdir: parameters[:configuration_directory],
|
137
|
-
input: false,
|
138
|
-
auto_approve: true
|
139
|
-
)
|
140
|
-
|
141
|
-
if parameters[:state_file]
|
142
|
-
destroy_parameters =
|
143
|
-
destroy_parameters.merge(state: parameters[:state_file])
|
144
|
-
end
|
145
|
-
|
146
|
-
destroy_parameters
|
147
|
-
end
|
148
|
-
# rubocop:enable Metrics/MethodLength
|
149
|
-
|
150
|
-
def command_options
|
151
|
-
{
|
152
|
-
binary: binary,
|
153
|
-
logger: logger,
|
154
|
-
stdin: stdin,
|
155
|
-
stdout: stdout,
|
156
|
-
stderr: stderr
|
157
|
-
}
|
158
|
-
end
|
159
30
|
end
|
160
|
-
# rubocop:enable Metrics/ClassLength
|
161
31
|
end
|
162
32
|
end
|
163
33
|
end
|
@@ -2,55 +2,29 @@
|
|
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 Helpers
|
8
|
-
|
9
|
-
class Output
|
10
|
-
attr_reader(
|
11
|
-
:configuration_provider,
|
12
|
-
:binary,
|
13
|
-
:logger,
|
14
|
-
:stdin,
|
15
|
-
:stdout,
|
16
|
-
:stderr,
|
17
|
-
:execution_mode
|
18
|
-
)
|
19
|
-
|
20
|
-
def initialize(opts = {})
|
21
|
-
@configuration_provider =
|
22
|
-
opts[:configuration_provider] || Configuration.identity_provider
|
23
|
-
@binary = opts[:binary] || 'terraform'
|
24
|
-
@logger = opts[:logger]
|
25
|
-
@stdin = opts[:stdin]
|
26
|
-
@stdout = opts[:stdout]
|
27
|
-
@stderr = opts[:stderr]
|
28
|
-
@execution_mode = opts[:execution_mode] || :in_place
|
29
|
-
end
|
30
|
-
|
10
|
+
class Output < Base
|
31
11
|
def execute(overrides = {})
|
32
|
-
parameters =
|
33
|
-
parameters = with_mandatory_parameters(parameters)
|
34
|
-
|
35
|
-
ensure_required_parameters(parameters)
|
12
|
+
parameters = resolve_parameters(overrides)
|
36
13
|
|
14
|
+
validate(parameters)
|
37
15
|
clean(parameters)
|
38
16
|
init(parameters)
|
39
17
|
output_value = output(parameters)
|
40
18
|
|
41
|
-
|
19
|
+
parse(output_value)
|
42
20
|
end
|
43
21
|
|
44
22
|
private
|
45
23
|
|
46
|
-
def
|
47
|
-
|
48
|
-
end
|
49
|
-
|
50
|
-
def with_mandatory_parameters(parameters)
|
51
|
-
parameters.merge(
|
24
|
+
def mandatory_parameters
|
25
|
+
{
|
52
26
|
json: true
|
53
|
-
|
27
|
+
}
|
54
28
|
end
|
55
29
|
|
56
30
|
def required_parameters(execution_mode)
|
@@ -60,92 +34,10 @@ module RSpec
|
|
60
34
|
}[execution_mode] || []
|
61
35
|
end
|
62
36
|
|
63
|
-
def
|
64
|
-
|
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
|
-
init_command.execute(init_parameters(parameters))
|
94
|
-
end
|
95
|
-
|
96
|
-
def output(parameters)
|
97
|
-
stdout = StringIO.new
|
98
|
-
output_command(stdout: stdout)
|
99
|
-
.execute(output_parameters(parameters))
|
100
|
-
stdout.string
|
101
|
-
end
|
102
|
-
|
103
|
-
def init_command
|
104
|
-
RubyTerraform::Commands::Init.new(command_options)
|
105
|
-
end
|
106
|
-
|
107
|
-
def output_command(opts = {})
|
108
|
-
RubyTerraform::Commands::Output.new(command_options.merge(opts))
|
109
|
-
end
|
110
|
-
|
111
|
-
def init_parameters(parameters)
|
112
|
-
init_parameters = parameters.merge(
|
113
|
-
chdir: parameters[:configuration_directory],
|
114
|
-
input: false
|
115
|
-
)
|
116
|
-
if execution_mode == :isolated
|
117
|
-
init_parameters =
|
118
|
-
init_parameters.merge(from_module: parameters[:source_directory])
|
119
|
-
end
|
120
|
-
|
121
|
-
init_parameters
|
122
|
-
end
|
123
|
-
|
124
|
-
def output_parameters(parameters)
|
125
|
-
output_parameters =
|
126
|
-
parameters.merge(
|
127
|
-
chdir: parameters[:configuration_directory]
|
128
|
-
)
|
129
|
-
|
130
|
-
if parameters[:state_file]
|
131
|
-
output_parameters =
|
132
|
-
output_parameters.merge(state: parameters[:state_file])
|
133
|
-
end
|
134
|
-
|
135
|
-
output_parameters
|
136
|
-
end
|
137
|
-
|
138
|
-
def command_options
|
139
|
-
{
|
140
|
-
binary: binary,
|
141
|
-
logger: logger,
|
142
|
-
stdin: stdin,
|
143
|
-
stdout: stdout,
|
144
|
-
stderr: stderr
|
145
|
-
}
|
37
|
+
def parse(output_value)
|
38
|
+
JSON.parse(output_value, symbolize_names: true)
|
146
39
|
end
|
147
40
|
end
|
148
41
|
end
|
149
|
-
# rubocop:enable Metrics/ClassLength
|
150
42
|
end
|
151
43
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../configuration/var_captor'
|
4
|
+
|
5
|
+
module RSpec
|
6
|
+
module Terraform
|
7
|
+
module Helpers
|
8
|
+
module Parameters
|
9
|
+
def resolve_parameters(overrides, &block)
|
10
|
+
parameters = with_configuration_provider_parameters(overrides)
|
11
|
+
parameters = with_resolved_vars(parameters, &block)
|
12
|
+
with_mandatory_parameters(parameters)
|
13
|
+
end
|
14
|
+
|
15
|
+
def with_configuration_provider_parameters(parameters)
|
16
|
+
configuration_provider.resolve(parameters)
|
17
|
+
end
|
18
|
+
|
19
|
+
def with_resolved_vars(parameters, &block)
|
20
|
+
return parameters unless block_given?
|
21
|
+
|
22
|
+
var_captor = Configuration::VarCaptor.new(parameters[:vars] || {})
|
23
|
+
block.call(var_captor)
|
24
|
+
parameters.merge(vars: var_captor.to_h)
|
25
|
+
end
|
26
|
+
|
27
|
+
def with_mandatory_parameters(parameters)
|
28
|
+
parameters.merge(mandatory_parameters)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -4,40 +4,16 @@ require 'ruby_terraform'
|
|
4
4
|
require 'securerandom'
|
5
5
|
require 'stringio'
|
6
6
|
|
7
|
-
require_relative '
|
7
|
+
require_relative './base'
|
8
8
|
|
9
9
|
module RSpec
|
10
10
|
module Terraform
|
11
11
|
module Helpers
|
12
|
-
|
13
|
-
class Plan
|
14
|
-
attr_reader(
|
15
|
-
:configuration_provider,
|
16
|
-
:binary,
|
17
|
-
:logger,
|
18
|
-
:stdin,
|
19
|
-
:stdout,
|
20
|
-
:stderr,
|
21
|
-
:execution_mode
|
22
|
-
)
|
23
|
-
|
24
|
-
def initialize(opts = {})
|
25
|
-
@configuration_provider =
|
26
|
-
opts[:configuration_provider] || Configuration.identity_provider
|
27
|
-
@binary = opts[:binary] || 'terraform'
|
28
|
-
@logger = opts[:logger]
|
29
|
-
@stdin = opts[:stdin]
|
30
|
-
@stdout = opts[:stdout]
|
31
|
-
@stderr = opts[:stderr]
|
32
|
-
@execution_mode = opts[:execution_mode] || :in_place
|
33
|
-
end
|
34
|
-
|
12
|
+
class Plan < Base
|
35
13
|
def execute(overrides = {}, &block)
|
36
|
-
parameters =
|
37
|
-
parameters = with_resolved_vars(parameters, &block)
|
38
|
-
|
39
|
-
ensure_required_parameters(parameters)
|
14
|
+
parameters = resolve_parameters(overrides, &block)
|
40
15
|
|
16
|
+
validate(parameters)
|
41
17
|
clean(parameters)
|
42
18
|
init(parameters)
|
43
19
|
plan_file = plan(parameters)
|
@@ -48,18 +24,6 @@ module RSpec
|
|
48
24
|
|
49
25
|
private
|
50
26
|
|
51
|
-
def with_configuration_provider_parameters(parameters)
|
52
|
-
configuration_provider.resolve(parameters)
|
53
|
-
end
|
54
|
-
|
55
|
-
def with_resolved_vars(parameters, &block)
|
56
|
-
return parameters unless block_given?
|
57
|
-
|
58
|
-
var_captor = Configuration::VarCaptor.new(parameters[:vars] || {})
|
59
|
-
block.call(var_captor)
|
60
|
-
parameters.merge(vars: var_captor.to_h)
|
61
|
-
end
|
62
|
-
|
63
27
|
def required_parameters(execution_mode)
|
64
28
|
{
|
65
29
|
in_place: [:configuration_directory],
|
@@ -67,128 +31,12 @@ module RSpec
|
|
67
31
|
}[execution_mode] || []
|
68
32
|
end
|
69
33
|
|
70
|
-
def ensure_required_parameters(parameters)
|
71
|
-
missing_parameters =
|
72
|
-
required_parameters(execution_mode)
|
73
|
-
.filter { |parameter| parameters[parameter].nil? }
|
74
|
-
|
75
|
-
return if missing_parameters.empty?
|
76
|
-
|
77
|
-
raise_missing_parameters(missing_parameters)
|
78
|
-
end
|
79
|
-
|
80
|
-
def raise_missing_parameters(parameters)
|
81
|
-
parameters = parameters.collect { |parameter| "`:#{parameter}`" }
|
82
|
-
if parameters.count == 1
|
83
|
-
raise StandardError,
|
84
|
-
"Required parameter: #{parameters[0]} missing."
|
85
|
-
else
|
86
|
-
parameters = "#{parameters[..-2].join(', ')} and #{parameters[-1]}"
|
87
|
-
raise StandardError,
|
88
|
-
"Required parameters: #{parameters} missing."
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
def clean(parameters)
|
93
|
-
return unless execution_mode == :isolated
|
94
|
-
|
95
|
-
FileUtils.rm_rf(parameters[:configuration_directory])
|
96
|
-
FileUtils.mkdir_p(parameters[:configuration_directory])
|
97
|
-
end
|
98
|
-
|
99
|
-
def init(parameters)
|
100
|
-
init_command.execute(init_parameters(parameters))
|
101
|
-
end
|
102
|
-
|
103
|
-
def plan(parameters)
|
104
|
-
plan_parameters = plan_parameters(parameters)
|
105
|
-
plan_command.execute(plan_parameters)
|
106
|
-
plan_parameters[:out]
|
107
|
-
end
|
108
|
-
|
109
|
-
def show(parameters, plan_file)
|
110
|
-
stdout = StringIO.new
|
111
|
-
show_command(stdout: stdout)
|
112
|
-
.execute(show_parameters(parameters, plan_file))
|
113
|
-
stdout.string
|
114
|
-
end
|
115
|
-
|
116
34
|
def parse(plan_contents)
|
117
35
|
RubyTerraform::Models::Plan.new(
|
118
36
|
JSON.parse(plan_contents, symbolize_names: true)
|
119
37
|
)
|
120
38
|
end
|
121
|
-
|
122
|
-
def remove(parameters, plan_file)
|
123
|
-
FileUtils.rm_f(
|
124
|
-
File.join(parameters[:configuration_directory], plan_file)
|
125
|
-
)
|
126
|
-
end
|
127
|
-
|
128
|
-
def init_command
|
129
|
-
RubyTerraform::Commands::Init.new(command_options)
|
130
|
-
end
|
131
|
-
|
132
|
-
def plan_command
|
133
|
-
RubyTerraform::Commands::Plan.new(command_options)
|
134
|
-
end
|
135
|
-
|
136
|
-
def show_command(opts = {})
|
137
|
-
RubyTerraform::Commands::Show.new(command_options.merge(opts))
|
138
|
-
end
|
139
|
-
|
140
|
-
def init_parameters(parameters)
|
141
|
-
init_parameters = parameters.merge(
|
142
|
-
chdir: parameters[:configuration_directory],
|
143
|
-
input: false
|
144
|
-
)
|
145
|
-
if execution_mode == :isolated
|
146
|
-
init_parameters =
|
147
|
-
init_parameters.merge(from_module: parameters[:source_directory])
|
148
|
-
end
|
149
|
-
|
150
|
-
init_parameters
|
151
|
-
end
|
152
|
-
|
153
|
-
# rubocop:disable Metrics/MethodLength
|
154
|
-
def plan_parameters(parameters)
|
155
|
-
plan_parameters =
|
156
|
-
parameters.merge(
|
157
|
-
chdir: parameters[:configuration_directory],
|
158
|
-
out: parameters[:plan_file_name] ||
|
159
|
-
"#{SecureRandom.hex[0, 10]}.tfplan",
|
160
|
-
input: false
|
161
|
-
)
|
162
|
-
|
163
|
-
if parameters[:state_file]
|
164
|
-
plan_parameters =
|
165
|
-
plan_parameters.merge(state: parameters[:state_file])
|
166
|
-
end
|
167
|
-
|
168
|
-
plan_parameters
|
169
|
-
end
|
170
|
-
# rubocop:enable Metrics/MethodLength
|
171
|
-
|
172
|
-
def show_parameters(parameters, plan_file)
|
173
|
-
parameters.merge(
|
174
|
-
chdir: parameters[:configuration_directory],
|
175
|
-
path: plan_file,
|
176
|
-
no_color: true,
|
177
|
-
json: true
|
178
|
-
)
|
179
|
-
end
|
180
|
-
|
181
|
-
def command_options
|
182
|
-
{
|
183
|
-
binary: binary,
|
184
|
-
logger: logger,
|
185
|
-
stdin: stdin,
|
186
|
-
stdout: stdout,
|
187
|
-
stderr: stderr
|
188
|
-
}
|
189
|
-
end
|
190
39
|
end
|
191
|
-
# rubocop:enable Metrics/ClassLength
|
192
40
|
end
|
193
41
|
end
|
194
42
|
end
|
@@ -1,38 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative './base'
|
3
4
|
require_relative '../configuration/var_captor'
|
4
5
|
|
5
6
|
module RSpec
|
6
7
|
module Terraform
|
7
8
|
module Helpers
|
8
|
-
class Var
|
9
|
-
attr_reader(:configuration_provider)
|
10
|
-
|
11
|
-
def initialize(opts = {})
|
12
|
-
@configuration_provider =
|
13
|
-
opts[:configuration_provider] || Configuration.identity_provider
|
14
|
-
end
|
15
|
-
|
9
|
+
class Var < Base
|
16
10
|
def execute(overrides = {}, &block)
|
17
|
-
parameters =
|
18
|
-
parameters = with_resolved_vars(parameters, &block)
|
11
|
+
parameters = resolve_parameters(overrides, &block)
|
19
12
|
|
20
13
|
parameters[:vars][parameters[:name].to_sym]
|
21
14
|
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def with_configuration_provider_parameters(parameters)
|
26
|
-
configuration_provider.resolve(parameters)
|
27
|
-
end
|
28
|
-
|
29
|
-
def with_resolved_vars(parameters, &block)
|
30
|
-
return parameters unless block_given?
|
31
|
-
|
32
|
-
var_captor = Configuration::VarCaptor.new(parameters[:vars] || {})
|
33
|
-
block.call(var_captor)
|
34
|
-
parameters.merge(vars: var_captor.to_h)
|
35
|
-
end
|
36
15
|
end
|
37
16
|
end
|
38
17
|
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.
|
4
|
+
version: 0.1.0.pre.46
|
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-09-
|
11
|
+
date: 2022-09-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: confidante
|
@@ -304,9 +304,12 @@ files:
|
|
304
304
|
- lib/rspec/terraform/configuration/providers/seed.rb
|
305
305
|
- lib/rspec/terraform/configuration/var_captor.rb
|
306
306
|
- lib/rspec/terraform/helpers.rb
|
307
|
+
- lib/rspec/terraform/helpers/actions.rb
|
307
308
|
- lib/rspec/terraform/helpers/apply.rb
|
309
|
+
- lib/rspec/terraform/helpers/base.rb
|
308
310
|
- lib/rspec/terraform/helpers/destroy.rb
|
309
311
|
- lib/rspec/terraform/helpers/output.rb
|
312
|
+
- lib/rspec/terraform/helpers/parameters.rb
|
310
313
|
- lib/rspec/terraform/helpers/plan.rb
|
311
314
|
- lib/rspec/terraform/helpers/var.rb
|
312
315
|
- lib/rspec/terraform/logging.rb
|