rspec-terraform 0.1.0.pre.26 → 0.1.0.pre.27
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 +11 -11
- data/lib/rspec/terraform/helpers/apply.rb +33 -18
- data/lib/rspec/terraform/helpers/destroy.rb +34 -26
- data/lib/rspec/terraform/helpers/plan.rb +164 -0
- data/lib/rspec/terraform/helpers.rb +1 -0
- data/lib/rspec/terraform/version.rb +1 -1
- data/rspec-terraform.gemspec +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fbe0f55f0b5903a638e780131a1a32b5e0859b0b92c36f431938ffb929568efc
|
4
|
+
data.tar.gz: d052537b7512b50b1b94509b50cbb07b493f2efe18ec34a1326bf0555b7631ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9cbe733d1fd152518c6d9df00f5c9137ed51f3e7d7e4121b13c5f4b090fce912a965f2de6417b687b77bc1b68c5c9058b3402e4d6b4434f07383d3511364562d
|
7
|
+
data.tar.gz: 0ef10564041a355a71e1cf61bfe4eeaf9b1db740074c24916d3d995b5935a24286571cf2098bef841356beb98359acb5ea883ea40cf0b5524435022f2fd573c9
|
data/Gemfile.lock
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rspec-terraform (0.1.0.pre.
|
4
|
+
rspec-terraform (0.1.0.pre.27)
|
5
5
|
rspec (>= 3.0)
|
6
|
-
ruby-terraform (= 1.7.0.pre.
|
6
|
+
ruby-terraform (= 1.7.0.pre.15)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
@@ -13,8 +13,8 @@ GEM
|
|
13
13
|
i18n (>= 1.6, < 2)
|
14
14
|
minitest (>= 5.1)
|
15
15
|
tzinfo (~> 2.0)
|
16
|
-
addressable (2.8.
|
17
|
-
public_suffix (>= 2.0.2, <
|
16
|
+
addressable (2.8.1)
|
17
|
+
public_suffix (>= 2.0.2, < 6.0)
|
18
18
|
ast (2.4.2)
|
19
19
|
coderay (1.1.3)
|
20
20
|
colored2 (3.1.2)
|
@@ -24,10 +24,10 @@ GEM
|
|
24
24
|
excon (0.92.4)
|
25
25
|
faker (2.22.0)
|
26
26
|
i18n (>= 1.8.11, < 2)
|
27
|
-
faraday (2.
|
28
|
-
faraday-net_http (
|
27
|
+
faraday (2.5.2)
|
28
|
+
faraday-net_http (>= 2.0, < 3.1)
|
29
29
|
ruby2_keywords (>= 0.0.4)
|
30
|
-
faraday-net_http (
|
30
|
+
faraday-net_http (3.0.0)
|
31
31
|
ffi (1.15.5)
|
32
32
|
formatador (1.1.0)
|
33
33
|
gem-release (2.2.2)
|
@@ -62,7 +62,7 @@ GEM
|
|
62
62
|
rb-inotify (~> 0.9, >= 0.9.10)
|
63
63
|
lumberjack (1.2.8)
|
64
64
|
method_source (1.0.0)
|
65
|
-
minitest (5.16.
|
65
|
+
minitest (5.16.3)
|
66
66
|
nenv (0.3.0)
|
67
67
|
notiffany (0.1.3)
|
68
68
|
nenv (~> 0.1)
|
@@ -77,7 +77,7 @@ GEM
|
|
77
77
|
pry (0.14.1)
|
78
78
|
coderay (~> 1.1)
|
79
79
|
method_source (~> 1.0)
|
80
|
-
public_suffix (
|
80
|
+
public_suffix (5.0.0)
|
81
81
|
rainbow (3.1.1)
|
82
82
|
rake (13.0.6)
|
83
83
|
rake_circle_ci (0.9.0)
|
@@ -118,7 +118,7 @@ GEM
|
|
118
118
|
diff-lcs (>= 1.2.0, < 2.0)
|
119
119
|
rspec-support (~> 3.11.0)
|
120
120
|
rspec-support (3.11.0)
|
121
|
-
rubocop (1.35.
|
121
|
+
rubocop (1.35.1)
|
122
122
|
json (~> 2.3)
|
123
123
|
parallel (~> 1.10)
|
124
124
|
parser (>= 3.1.2.1)
|
@@ -135,7 +135,7 @@ GEM
|
|
135
135
|
rubocop-rspec (2.12.1)
|
136
136
|
rubocop (~> 1.31)
|
137
137
|
ruby-progressbar (1.11.0)
|
138
|
-
ruby-terraform (1.7.0.pre.
|
138
|
+
ruby-terraform (1.7.0.pre.15)
|
139
139
|
immutable-struct (~> 2.4)
|
140
140
|
lino (~> 3.0)
|
141
141
|
ruby2_keywords (0.0.5)
|
@@ -90,27 +90,11 @@ module RSpec
|
|
90
90
|
end
|
91
91
|
|
92
92
|
def init(parameters)
|
93
|
-
|
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)
|
93
|
+
init_command.execute(init_parameters(parameters))
|
104
94
|
end
|
105
95
|
|
106
96
|
def apply(parameters)
|
107
|
-
apply_command.execute(
|
108
|
-
chdir: parameters[:configuration_directory],
|
109
|
-
state: parameters[:state_file],
|
110
|
-
vars: parameters[:vars],
|
111
|
-
input: parameters[:input],
|
112
|
-
auto_approve: parameters[:auto_approve]
|
113
|
-
)
|
97
|
+
apply_command.execute(apply_parameters(parameters))
|
114
98
|
end
|
115
99
|
|
116
100
|
def init_command
|
@@ -120,6 +104,37 @@ module RSpec
|
|
120
104
|
def apply_command
|
121
105
|
RubyTerraform::Commands::Apply.new(binary: binary)
|
122
106
|
end
|
107
|
+
|
108
|
+
def init_parameters(parameters)
|
109
|
+
init_parameters = parameters.merge(
|
110
|
+
chdir: parameters[:configuration_directory],
|
111
|
+
input: false
|
112
|
+
)
|
113
|
+
if execution_mode == :isolated
|
114
|
+
init_parameters =
|
115
|
+
init_parameters.merge(from_module: parameters[:source_directory])
|
116
|
+
end
|
117
|
+
|
118
|
+
init_parameters
|
119
|
+
end
|
120
|
+
|
121
|
+
# rubocop:disable Metrics/MethodLength
|
122
|
+
def apply_parameters(parameters)
|
123
|
+
apply_parameters =
|
124
|
+
parameters.merge(
|
125
|
+
chdir: parameters[:configuration_directory],
|
126
|
+
input: false,
|
127
|
+
auto_approve: true
|
128
|
+
)
|
129
|
+
|
130
|
+
if parameters[:state_file]
|
131
|
+
apply_parameters =
|
132
|
+
apply_parameters.merge(state: parameters[:state_file])
|
133
|
+
end
|
134
|
+
|
135
|
+
apply_parameters
|
136
|
+
end
|
137
|
+
# rubocop:enable Metrics/MethodLength
|
123
138
|
end
|
124
139
|
end
|
125
140
|
end
|
@@ -23,7 +23,6 @@ module RSpec
|
|
23
23
|
def execute(&block)
|
24
24
|
parameters = with_configuration_provider_parameters(overrides)
|
25
25
|
parameters = with_resolved_vars(parameters, &block)
|
26
|
-
parameters = with_mandatory_parameters(parameters)
|
27
26
|
|
28
27
|
ensure_required_parameters(parameters)
|
29
28
|
|
@@ -46,13 +45,6 @@ module RSpec
|
|
46
45
|
parameters.merge(vars: var_captor.to_h)
|
47
46
|
end
|
48
47
|
|
49
|
-
def with_mandatory_parameters(parameters)
|
50
|
-
parameters.merge(
|
51
|
-
input: false,
|
52
|
-
auto_approve: true
|
53
|
-
)
|
54
|
-
end
|
55
|
-
|
56
48
|
def required_parameters(execution_mode)
|
57
49
|
{
|
58
50
|
in_place: [:configuration_directory],
|
@@ -90,27 +82,11 @@ module RSpec
|
|
90
82
|
end
|
91
83
|
|
92
84
|
def init(parameters)
|
93
|
-
|
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)
|
85
|
+
init_command.execute(init_parameters(parameters))
|
104
86
|
end
|
105
87
|
|
106
88
|
def destroy(parameters)
|
107
|
-
destroy_command.execute(
|
108
|
-
chdir: parameters[:configuration_directory],
|
109
|
-
state: parameters[:state_file],
|
110
|
-
vars: parameters[:vars],
|
111
|
-
input: parameters[:input],
|
112
|
-
auto_approve: parameters[:auto_approve]
|
113
|
-
)
|
89
|
+
destroy_command.execute(destroy_parameters(parameters))
|
114
90
|
end
|
115
91
|
|
116
92
|
def init_command
|
@@ -120,6 +96,38 @@ module RSpec
|
|
120
96
|
def destroy_command
|
121
97
|
RubyTerraform::Commands::Destroy.new(binary: binary)
|
122
98
|
end
|
99
|
+
|
100
|
+
def init_parameters(parameters)
|
101
|
+
init_parameters =
|
102
|
+
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
|
+
# rubocop:disable Metrics/MethodLength
|
115
|
+
def destroy_parameters(parameters)
|
116
|
+
destroy_parameters =
|
117
|
+
parameters.merge(
|
118
|
+
chdir: parameters[:configuration_directory],
|
119
|
+
input: false,
|
120
|
+
auto_approve: true
|
121
|
+
)
|
122
|
+
|
123
|
+
if parameters[:state_file]
|
124
|
+
destroy_parameters =
|
125
|
+
destroy_parameters.merge(state: parameters[:state_file])
|
126
|
+
end
|
127
|
+
|
128
|
+
destroy_parameters
|
129
|
+
end
|
130
|
+
# rubocop:enable Metrics/MethodLength
|
123
131
|
end
|
124
132
|
end
|
125
133
|
end
|
@@ -0,0 +1,164 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'ruby_terraform'
|
4
|
+
require 'securerandom'
|
5
|
+
require 'stringio'
|
6
|
+
|
7
|
+
require_relative '../configuration/var_captor'
|
8
|
+
|
9
|
+
module RSpec
|
10
|
+
module Terraform
|
11
|
+
module Helpers
|
12
|
+
# rubocop:disable Metrics/ClassLength
|
13
|
+
class Plan
|
14
|
+
attr_reader(
|
15
|
+
:overrides, :configuration_provider, :binary, :execution_mode
|
16
|
+
)
|
17
|
+
|
18
|
+
def initialize(overrides = {}, configuration_provider = nil)
|
19
|
+
@overrides = overrides
|
20
|
+
@configuration_provider =
|
21
|
+
configuration_provider || Configuration.identity_provider
|
22
|
+
@binary = RSpec.configuration.terraform_binary
|
23
|
+
@execution_mode = RSpec.configuration.terraform_execution_mode
|
24
|
+
end
|
25
|
+
|
26
|
+
def execute(&block)
|
27
|
+
parameters = with_configuration_provider_parameters(overrides)
|
28
|
+
parameters = with_resolved_vars(parameters, &block)
|
29
|
+
|
30
|
+
ensure_required_parameters(parameters)
|
31
|
+
|
32
|
+
clean(parameters)
|
33
|
+
init(parameters)
|
34
|
+
plan_file = plan(parameters)
|
35
|
+
plan_contents = show(parameters, plan_file)
|
36
|
+
|
37
|
+
RubyTerraform::Models::Plan.new(
|
38
|
+
JSON.parse(plan_contents, symbolize_names: true)
|
39
|
+
)
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def with_configuration_provider_parameters(parameters)
|
45
|
+
configuration_provider.resolve(parameters)
|
46
|
+
end
|
47
|
+
|
48
|
+
def with_resolved_vars(parameters, &block)
|
49
|
+
return parameters unless block_given?
|
50
|
+
|
51
|
+
var_captor = Configuration::VarCaptor.new(parameters[:vars] || {})
|
52
|
+
block.call(var_captor)
|
53
|
+
parameters.merge(vars: var_captor.to_h)
|
54
|
+
end
|
55
|
+
|
56
|
+
def required_parameters(execution_mode)
|
57
|
+
{
|
58
|
+
in_place: [:configuration_directory],
|
59
|
+
isolated: %i[source_directory configuration_directory]
|
60
|
+
}[execution_mode] || []
|
61
|
+
end
|
62
|
+
|
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?
|
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 plan(parameters)
|
97
|
+
plan_parameters = plan_parameters(parameters)
|
98
|
+
plan_command.execute(plan_parameters)
|
99
|
+
plan_parameters[:out]
|
100
|
+
end
|
101
|
+
|
102
|
+
def show(parameters, plan_file)
|
103
|
+
stdout = StringIO.new
|
104
|
+
show_command(stdout: stdout)
|
105
|
+
.execute(show_parameters(parameters, plan_file))
|
106
|
+
stdout.string
|
107
|
+
end
|
108
|
+
|
109
|
+
def init_command
|
110
|
+
RubyTerraform::Commands::Init.new(binary: binary)
|
111
|
+
end
|
112
|
+
|
113
|
+
def plan_command
|
114
|
+
RubyTerraform::Commands::Plan.new(binary: binary)
|
115
|
+
end
|
116
|
+
|
117
|
+
def show_command(opts = {})
|
118
|
+
RubyTerraform::Commands::Show.new(opts.merge(binary: binary))
|
119
|
+
end
|
120
|
+
|
121
|
+
def init_parameters(parameters)
|
122
|
+
init_parameters = parameters.merge(
|
123
|
+
chdir: parameters[:configuration_directory],
|
124
|
+
input: false
|
125
|
+
)
|
126
|
+
if execution_mode == :isolated
|
127
|
+
init_parameters =
|
128
|
+
init_parameters.merge(from_module: parameters[:source_directory])
|
129
|
+
end
|
130
|
+
|
131
|
+
init_parameters
|
132
|
+
end
|
133
|
+
|
134
|
+
# rubocop:disable Metrics/MethodLength
|
135
|
+
def plan_parameters(parameters)
|
136
|
+
plan_parameters =
|
137
|
+
parameters.merge(
|
138
|
+
chdir: parameters[:configuration_directory],
|
139
|
+
out: parameters[:plan_file_name] || SecureRandom.hex(10),
|
140
|
+
input: false
|
141
|
+
)
|
142
|
+
|
143
|
+
if parameters[:state_file]
|
144
|
+
plan_parameters =
|
145
|
+
plan_parameters.merge(state: parameters[:state_file])
|
146
|
+
end
|
147
|
+
|
148
|
+
plan_parameters
|
149
|
+
end
|
150
|
+
# rubocop:enable Metrics/MethodLength
|
151
|
+
|
152
|
+
def show_parameters(parameters, plan_file)
|
153
|
+
parameters.merge(
|
154
|
+
chdir: parameters[:configuration_directory],
|
155
|
+
path: plan_file,
|
156
|
+
no_color: true,
|
157
|
+
json: true
|
158
|
+
)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
# rubocop:enable Metrics/ClassLength
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
data/rspec-terraform.gemspec
CHANGED
@@ -38,7 +38,7 @@ Gem::Specification.new do |spec|
|
|
38
38
|
spec.required_ruby_version = '>= 2.7'
|
39
39
|
|
40
40
|
spec.add_dependency 'rspec', '>= 3.0'
|
41
|
-
spec.add_dependency 'ruby-terraform', '1.7.0.pre.
|
41
|
+
spec.add_dependency 'ruby-terraform', '1.7.0.pre.15'
|
42
42
|
|
43
43
|
spec.add_development_dependency 'bundler'
|
44
44
|
spec.add_development_dependency 'faker'
|
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.27
|
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-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.7.0.pre.
|
33
|
+
version: 1.7.0.pre.15
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 1.7.0.pre.
|
40
|
+
version: 1.7.0.pre.15
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -288,6 +288,7 @@ files:
|
|
288
288
|
- lib/rspec/terraform/helpers.rb
|
289
289
|
- lib/rspec/terraform/helpers/apply.rb
|
290
290
|
- lib/rspec/terraform/helpers/destroy.rb
|
291
|
+
- lib/rspec/terraform/helpers/plan.rb
|
291
292
|
- lib/rspec/terraform/matchers.rb
|
292
293
|
- lib/rspec/terraform/matchers/include_output_change.rb
|
293
294
|
- lib/rspec/terraform/matchers/include_resource_change.rb
|