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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 95958411883b88589c0b4ebbf69198bd96d00f545dfc3bfde950029f2c809417
4
- data.tar.gz: 4442f9b3b60bc414a736d339578f058505fff7ac545d0e0bbda6648ae2415459
3
+ metadata.gz: fbe0f55f0b5903a638e780131a1a32b5e0859b0b92c36f431938ffb929568efc
4
+ data.tar.gz: d052537b7512b50b1b94509b50cbb07b493f2efe18ec34a1326bf0555b7631ed
5
5
  SHA512:
6
- metadata.gz: d731325a5f7bcc520f50d0d89baaa3d700d533c831088c355d58b1be128393b406b95df513367b69e7423f99e5b1f7d73066f3cdaa14ddbbd234f485388f5d8a
7
- data.tar.gz: d5cdaf53682c7b036fd829b72a013318010b45ec39db3a260afda5c9dd9c69d731ebd6b2def20a8b651c2db97f9f74209fa393ecb99bf58c9a0d3731ad171bba
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.26)
4
+ rspec-terraform (0.1.0.pre.27)
5
5
  rspec (>= 3.0)
6
- ruby-terraform (= 1.7.0.pre.13)
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.0)
17
- public_suffix (>= 2.0.2, < 5.0)
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.3.0)
28
- faraday-net_http (~> 2.0)
27
+ faraday (2.5.2)
28
+ faraday-net_http (>= 2.0, < 3.1)
29
29
  ruby2_keywords (>= 0.0.4)
30
- faraday-net_http (2.0.3)
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.2)
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 (4.0.7)
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.0)
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.13)
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
- 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)
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
- 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)
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
@@ -2,6 +2,7 @@
2
2
 
3
3
  require_relative './helpers/apply'
4
4
  require_relative './helpers/destroy'
5
+ require_relative './helpers/plan'
5
6
 
6
7
  module RSpec
7
8
  module Terraform
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RSpec
4
4
  module Terraform
5
- VERSION = '0.1.0.pre.26'
5
+ VERSION = '0.1.0.pre.27'
6
6
  end
7
7
  end
@@ -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.13'
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.26
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-21 00:00:00.000000000 Z
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.13
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.13
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