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

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: 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