terraspace 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +30 -0
  3. data/README.md +57 -30
  4. data/lib/templates/base/arg/terraform.rb.tt +3 -0
  5. data/lib/templates/base/helper/%name%_helper.rb.tt +2 -0
  6. data/lib/templates/base/hook/%kind%.rb.tt +7 -0
  7. data/lib/terraspace.rb +7 -4
  8. data/lib/terraspace/all/base.rb +0 -1
  9. data/lib/terraspace/app.rb +1 -0
  10. data/lib/terraspace/autoloader.rb +20 -3
  11. data/lib/terraspace/cli.rb +2 -0
  12. data/lib/terraspace/cli/all.rb +1 -1
  13. data/lib/terraspace/cli/bundle.rb +0 -1
  14. data/lib/terraspace/cli/clean/base.rb +0 -1
  15. data/lib/terraspace/cli/clean/cache.rb +0 -1
  16. data/lib/terraspace/cli/cloud.rb +2 -0
  17. data/lib/terraspace/cli/help/all/init.md +33 -0
  18. data/lib/terraspace/cli/help/logs.md +4 -4
  19. data/lib/terraspace/cli/help/new/arg.md +19 -0
  20. data/lib/terraspace/cli/help/new/helper.md +39 -0
  21. data/lib/terraspace/cli/help/new/hook.md +25 -0
  22. data/lib/terraspace/cli/help/new/test.md +34 -0
  23. data/lib/terraspace/cli/info.rb +12 -0
  24. data/lib/terraspace/cli/list.rb +2 -1
  25. data/lib/terraspace/cli/logs/concern.rb +1 -0
  26. data/lib/terraspace/cli/new.rb +22 -16
  27. data/lib/terraspace/cli/new/arg.rb +62 -0
  28. data/lib/terraspace/cli/new/helper.rb +44 -12
  29. data/lib/terraspace/cli/new/helpers.rb +22 -0
  30. data/lib/terraspace/cli/new/helpers/plugin_gem.rb +25 -0
  31. data/lib/terraspace/cli/new/hook.rb +70 -0
  32. data/lib/terraspace/cli/new/module.rb +0 -11
  33. data/lib/terraspace/cli/new/plugin.rb +4 -4
  34. data/lib/terraspace/cli/new/plugin/helper.rb +1 -1
  35. data/lib/terraspace/cli/new/project.rb +16 -7
  36. data/lib/terraspace/cli/new/sequence.rb +3 -10
  37. data/lib/terraspace/cli/new/source/core.rb +1 -1
  38. data/lib/terraspace/cli/new/stack.rb +1 -12
  39. data/lib/terraspace/cli/new/test.rb +50 -0
  40. data/lib/terraspace/cli/summary.rb +0 -1
  41. data/lib/terraspace/command.rb +16 -0
  42. data/lib/terraspace/compiler/builder.rb +2 -0
  43. data/lib/terraspace/compiler/dsl/mod.rb +2 -0
  44. data/lib/terraspace/compiler/dsl/syntax/mod.rb +2 -0
  45. data/lib/terraspace/compiler/dsl/syntax/mod/backend.rb +1 -1
  46. data/lib/terraspace/compiler/erb/context.rb +2 -0
  47. data/lib/terraspace/compiler/helper_extender.rb +27 -0
  48. data/lib/terraspace/core.rb +0 -6
  49. data/lib/terraspace/ext/core/module.rb +16 -0
  50. data/lib/terraspace/hooks/builder.rb +6 -7
  51. data/lib/terraspace/hooks/concern.rb +2 -2
  52. data/lib/terraspace/logger.rb +6 -0
  53. data/lib/terraspace/mod.rb +0 -1
  54. data/lib/terraspace/plugin.rb +8 -4
  55. data/lib/terraspace/plugin/config/interface.rb +2 -2
  56. data/lib/terraspace/plugin/helper/interface.rb +31 -0
  57. data/lib/terraspace/shell.rb +5 -33
  58. data/lib/terraspace/shell/error.rb +46 -0
  59. data/lib/terraspace/terraform/args/custom.rb +2 -3
  60. data/lib/terraspace/terraform/args/default.rb +9 -19
  61. data/lib/terraspace/terraform/runner.rb +6 -14
  62. data/lib/terraspace/terraform/runner/retryer.rb +69 -0
  63. data/lib/terraspace/version.rb +1 -1
  64. data/spec/terraspace/terraform/args/custom_spec.rb +6 -4
  65. data/terraspace.gemspec +4 -4
  66. metadata +30 -21
  67. data/lib/terraspace/cli/help/new/bootstrap_test.md +0 -8
  68. data/lib/terraspace/cli/help/new/module_test.md +0 -12
  69. data/lib/terraspace/cli/help/new/project_test.md +0 -8
  70. data/lib/terraspace/cli/new/helper/plugin_gem.rb +0 -12
  71. data/lib/terraspace/cli/new/test/base.rb +0 -17
  72. data/lib/terraspace/cli/new/test/bootstrap.rb +0 -18
  73. data/lib/terraspace/cli/new/test/module.rb +0 -15
  74. data/lib/terraspace/cli/new/test/project.rb +0 -15
@@ -6,8 +6,6 @@ module Terraspace
6
6
 
7
7
  def initialize(mod, command, options={})
8
8
  @mod, @command, @options = mod, command, options
9
- # error_messages holds aggregation of all error lines
10
- @known_error, @error_messages = nil, ''
11
9
  end
12
10
 
13
11
  # requires @mod to be set
@@ -33,9 +31,9 @@ module Terraspace
33
31
  Open3.popen3(env, @command, chdir: @mod.cache_dir) do |stdin, stdout, stderr, wait_thread|
34
32
  mimic_terraform_input(stdin, stdout)
35
33
  while err = stderr.gets
36
- @error_messages << err # aggregate all error lines
37
- @known_error ||= known_error_type(err)
38
- unless @known_error
34
+ @error ||= Error.new
35
+ @error.lines << err # aggregate all error lines
36
+ unless @error.known?
39
37
  # Sometimes may print a "\e[31m\n" which like during dependencies fetcher init
40
38
  # suppress it so dont get a bunch of annoying "newlines"
41
39
  next if err == "\e[31m\n" && @options[:suppress_error_color]
@@ -48,38 +46,12 @@ module Terraspace
48
46
  end
49
47
  end
50
48
 
51
- def known_error_type(err)
52
- if reinit_required?(err)
53
- :reinit_required
54
- elsif bucket_not_found?(err)
55
- :bucket_not_found
56
- end
57
- end
58
-
59
- def bucket_not_found?(err)
60
- # Message is included in aws, azurerm, and google. See: https://bit.ly/3iOKDri
61
- err.include?("Failed to get existing workspaces")
62
- end
63
-
64
- def reinit_required?(err)
65
- # Example error: https://gist.github.com/tongueroo/f7e0a44b64f0a2e533089b18f331c21e
66
- squeezed = @error_messages.gsub("\n", ' ').squeeze(' ') # remove double whitespaces and newlines
67
- general_check = squeezed.include?("terraform init") && squeezed.include?("Error:")
68
-
69
- general_check ||
70
- err.include?("reinitialization required") ||
71
- err.include?("terraform init") ||
72
- err.include?("require reinitialization")
73
- end
74
-
75
49
  def exit_status(status)
76
50
  return if status == 0
77
51
 
78
52
  exit_on_fail = @options[:exit_on_fail].nil? ? true : @options[:exit_on_fail]
79
- if @known_error == :reinit_required
80
- raise InitRequiredError.new(@error_messages)
81
- elsif @known_error == :bucket_not_found
82
- raise BucketNotFoundError.new(@error_messages)
53
+ if @error && @error.known?
54
+ raise @error.instance
83
55
  elsif exit_on_fail
84
56
  logger.error "Error running command: #{@command}".color(:red)
85
57
  exit status
@@ -0,0 +1,46 @@
1
+ class Terraspace::Shell
2
+ class Error
3
+ attr_accessor :lines
4
+ def initialize
5
+ @lines = '' # holds aggregation of all error lines
6
+ end
7
+
8
+ def known?
9
+ !!instance
10
+ end
11
+
12
+ def instance
13
+ if reinit_required?
14
+ Terraspace::InitRequiredError.new(@lines)
15
+ elsif bucket_not_found?
16
+ Terraspace::BucketNotFound.new(@lines)
17
+ elsif shared_cache_error?
18
+ Terraspace::SharedCacheError.new(@lines)
19
+ end
20
+ end
21
+
22
+ def bucket_not_found?
23
+ # Message is included in aws, azurerm, and google. See: https://bit.ly/3iOKDri
24
+ message.include?("Failed to get existing workspaces")
25
+ end
26
+
27
+ def reinit_required?
28
+ # Example error: https://gist.github.com/tongueroo/f7e0a44b64f0a2e533089b18f331c21e
29
+ general_check = message.include?("terraform init") && message.include?("Error:")
30
+ general_check ||
31
+ message.include?("reinitialization required") ||
32
+ message.include?("terraform init") ||
33
+ message.include?("require reinitialization")
34
+ end
35
+
36
+ def message
37
+ @lines.gsub("\n", ' ').squeeze(' ') # remove double whitespaces and newlines
38
+ end
39
+
40
+ def shared_cache_error?
41
+ # Example: https://gist.github.com/tongueroo/4f2c925709d21f5810229ce9ca482560
42
+ message.include?("Failed to install provider from shared cache") ||
43
+ message.include?("Failed to validate installed provider")
44
+ end
45
+ end
46
+ end
@@ -7,13 +7,12 @@ module Terraspace::Terraform::Args
7
7
  attr_accessor :name
8
8
  def initialize(mod, name)
9
9
  @mod, @name = mod, name
10
- @file = "#{Terraspace.root}/config/args/terraform.rb"
11
10
  @commands = {}
12
11
  end
13
12
 
14
13
  def build
15
- return @commands unless File.exist?(@file)
16
- evaluate_file(@file)
14
+ evaluate_file("#{Terraspace.root}/config/args/terraform.rb")
15
+ evaluate_file("#{@mod.root}/config/args/terraform.rb")
17
16
  @commands.deep_stringify_keys!
18
17
  end
19
18
  memoize :build
@@ -26,7 +26,7 @@ module Terraspace::Terraform::Args
26
26
  args << var_files.map { |f| "-var-file #{Dir.pwd}/#{f}" }.join(' ')
27
27
  end
28
28
 
29
- args << input_option if input_option
29
+ args << input_option
30
30
 
31
31
  # must be at the end
32
32
  plan = @options[:plan]
@@ -45,27 +45,17 @@ module Terraspace::Terraform::Args
45
45
  end
46
46
 
47
47
  def input_option
48
- option = nil
49
- if @options[:auto] && @options[:input].nil?
50
- option = " -input=false"
51
- end
52
- unless @options[:input].nil?
53
- input = @options[:input] ? "true" : "false"
54
- option = " -input=#{input}" # = sign required for apply when there's a plan at the end. so input=false works input false doesnt
55
- end
56
- option
48
+ option = if @options[:auto]
49
+ "false"
50
+ else
51
+ @options[:input] ? @options[:input] : "false"
52
+ end
53
+ " -input=#{option}"
57
54
  end
58
55
 
59
56
  def init_args
60
57
  args = "-get"
61
- if @options[:auto] && @options[:input].nil?
62
- args << " -input=false"
63
- end
64
- unless @options[:input].nil?
65
- input = @options[:input] ? "true" : "false"
66
- args << " -input=#{input}"
67
- end
68
-
58
+ args << input_option
69
59
  args << " -reconfigure" if @options[:reconfigure]
70
60
 
71
61
  # must be at the end
@@ -86,7 +76,7 @@ module Terraspace::Terraform::Args
86
76
 
87
77
  def plan_args
88
78
  args = []
89
- args << input_option if input_option
79
+ args << input_option
90
80
  args << "-destroy" if @options[:destroy]
91
81
  args << "-out #{expanded_out}" if @options[:out]
92
82
  args
@@ -8,7 +8,6 @@ module Terraspace::Terraform
8
8
  def initialize(name, options={})
9
9
  @name = name
10
10
  super(options)
11
- @retries = 1
12
11
  end
13
12
 
14
13
  def run
@@ -21,24 +20,17 @@ module Terraspace::Terraform
21
20
  current_dir_message # only show once
22
21
 
23
22
  params = args.flatten.join(' ')
24
- command = "terraform #{name} #{params}"
23
+ command = "terraform #{name} #{params}".squish
25
24
  run_hooks("terraform.rb", name) do
26
25
  Terraspace::Shell.new(@mod, command, @options.merge(env: custom.env_vars)).run
27
26
  end
28
- rescue Terraspace::InitRequiredError => e
29
- logger.info "Terraform reinitialization required detected. Will run `terraform init` and try again."
30
- logger.debug "Retry attempt: #{@retries}"
31
- logger.debug "#{e.class}"
32
- Runner.new("init", @options).run
33
- if @retries <= 3
34
- backoff = 2 ** @retries # 2, 4, 8
35
- logger.debug "Waiting #{backoff}s before retrying"
36
- sleep(backoff)
37
- @retries += 1
27
+ rescue Terraspace::SharedCacheError, Terraspace::InitRequiredError
28
+ @retryer ||= Retryer.new(@mod, @options, name, $!)
29
+ if @retryer.retry?
30
+ @retryer.run
38
31
  retry
39
32
  else
40
- logger.info "ERROR: #{e.message}"
41
- exit 1
33
+ exit(1)
42
34
  end
43
35
  end
44
36
 
@@ -0,0 +1,69 @@
1
+ class Terraspace::Terraform::Runner
2
+ class Retryer
3
+ include Terraspace::Util::Logging
4
+ include Terraspace::Util::Pretty
5
+
6
+ def initialize(mod, options, command_name, exception)
7
+ @mod, @options, @command_name, @exception = mod, options, command_name, exception
8
+ @retries = 1
9
+ end
10
+
11
+ def retry?
12
+ if @retries <= 3 && !@stop_retrying
13
+ true # will retry
14
+ else
15
+ logger.info "ERROR: #{@exception.message}"
16
+ false # will not retry
17
+ end
18
+ end
19
+
20
+ def run
21
+ backoff = 2 ** @retries # 2, 4, 8
22
+ logger.debug "Waiting #{backoff}s before retrying"
23
+ sleep(backoff)
24
+ @retries += 1
25
+
26
+ case @exception
27
+ when Terraspace::SharedCacheError
28
+ shared_cache_error
29
+ when Terraspace::InitRequiredError
30
+ init_required_error
31
+ end
32
+ end
33
+
34
+ def shared_cache_error
35
+ logger.info "Terraform Shared Cache error detected. Will purge caches and run `terraform init` to try again."
36
+ logger.debug "Retry attempt: #{@retries}"
37
+ logger.debug "#{@exception.class}"
38
+ logger.debug "#{@exception.message}"
39
+ if Terraspace.config.terraform.plugin_cache.purge_on_error # Purging the cache "fixes" this terraform bug
40
+ purge_caches
41
+ reinit
42
+ else
43
+ @stop_retrying = true
44
+ end
45
+ end
46
+
47
+ def init_required_error
48
+ logger.info "Terraform reinitialization required detected. Will run `terraform init` and try again."
49
+ logger.debug "Retry attempt: #{@retries}"
50
+ logger.debug "#{@exception.class}"
51
+ reinit
52
+ end
53
+
54
+ def reinit
55
+ Terraspace::Terraform::Runner.new("init", @options).run unless @command_name == "init"
56
+ end
57
+
58
+ def purge_caches
59
+ dir = "#{@mod.cache_dir}/.terraform"
60
+ logger.info "Purging #{pretty_path(dir)}"
61
+ FileUtils.rm_rf(dir)
62
+
63
+ dir = "#{Terraspace.config.terraform.plugin_cache.dir}"
64
+ logger.info "Purging #{pretty_path(dir)}"
65
+ FileUtils.rm_rf(dir)
66
+ FileUtils.mkdir_p(dir) # need /tmp/terraspace/plugin_cache dir to exist
67
+ end
68
+ end
69
+ end
@@ -1,3 +1,3 @@
1
1
  module Terraspace
2
- VERSION = "0.4.0"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -10,17 +10,18 @@ describe Terraspace::Terraform::Args::Custom do
10
10
  let(:file) { fixture("terraform/args/single.rb") }
11
11
  let(:name) { "apply" }
12
12
  it "build creates the @commands structure" do
13
+ custom.evaluate_file(file)
13
14
  commands = custom.build
14
15
  expect(commands.keys).to include("apply")
15
16
  end
16
17
 
17
18
  it "args" do
18
- custom.build
19
+ custom.evaluate_file(file)
19
20
  expect(custom.args).to eq(["-lock-timeout=20m"])
20
21
  end
21
22
 
22
23
  it "var_files" do
23
- custom.build
24
+ custom.evaluate_file(file)
24
25
  allow(custom).to receive(:var_file_exist?).and_return(true)
25
26
  expect(custom.var_files).to eq(["-var-file=a.tfvars", "-var-file=b.tfvars"])
26
27
  end
@@ -30,17 +31,18 @@ describe Terraspace::Terraform::Args::Custom do
30
31
  let(:file) { fixture("terraform/args/multiple.rb") }
31
32
  let(:name) { "apply" }
32
33
  it "build creates the @commands structure" do
34
+ custom.evaluate_file(file)
33
35
  commands = custom.build
34
36
  expect(commands.keys).to include("apply")
35
37
  end
36
38
 
37
39
  it "args" do
38
- custom.build
40
+ custom.evaluate_file(file)
39
41
  expect(custom.args).to eq(["-lock-timeout=20m"])
40
42
  end
41
43
 
42
44
  it "var_files" do
43
- custom.build
45
+ custom.evaluate_file(file)
44
46
  allow(custom).to receive(:var_file_exist?).and_return(true)
45
47
  expect(custom.var_files).to eq([])
46
48
  end
@@ -34,10 +34,10 @@ Gem::Specification.new do |spec|
34
34
  spec.add_dependency "zeitwerk"
35
35
 
36
36
  # core baseline plugins
37
- spec.add_dependency "terraspace_plugin_aws", "~> 0.2.0"
38
- spec.add_dependency "terraspace_plugin_azurerm", "~> 0.2.0"
39
- spec.add_dependency "terraspace_plugin_google", "~> 0.2.0"
40
- spec.add_dependency "rspec-terraspace"
37
+ spec.add_dependency "terraspace_plugin_aws", "~> 0.3.0"
38
+ spec.add_dependency "terraspace_plugin_azurerm", "~> 0.3.0"
39
+ spec.add_dependency "terraspace_plugin_google", "~> 0.3.0"
40
+ spec.add_dependency "rspec-terraspace", "~> 0.2.0"
41
41
 
42
42
  spec.add_development_dependency "bundler"
43
43
  spec.add_development_dependency "byebug"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: terraspace
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tung Nguyen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-10-18 00:00:00.000000000 Z
11
+ date: 2020-11-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -212,56 +212,56 @@ dependencies:
212
212
  requirements:
213
213
  - - "~>"
214
214
  - !ruby/object:Gem::Version
215
- version: 0.2.0
215
+ version: 0.3.0
216
216
  type: :runtime
217
217
  prerelease: false
218
218
  version_requirements: !ruby/object:Gem::Requirement
219
219
  requirements:
220
220
  - - "~>"
221
221
  - !ruby/object:Gem::Version
222
- version: 0.2.0
222
+ version: 0.3.0
223
223
  - !ruby/object:Gem::Dependency
224
224
  name: terraspace_plugin_azurerm
225
225
  requirement: !ruby/object:Gem::Requirement
226
226
  requirements:
227
227
  - - "~>"
228
228
  - !ruby/object:Gem::Version
229
- version: 0.2.0
229
+ version: 0.3.0
230
230
  type: :runtime
231
231
  prerelease: false
232
232
  version_requirements: !ruby/object:Gem::Requirement
233
233
  requirements:
234
234
  - - "~>"
235
235
  - !ruby/object:Gem::Version
236
- version: 0.2.0
236
+ version: 0.3.0
237
237
  - !ruby/object:Gem::Dependency
238
238
  name: terraspace_plugin_google
239
239
  requirement: !ruby/object:Gem::Requirement
240
240
  requirements:
241
241
  - - "~>"
242
242
  - !ruby/object:Gem::Version
243
- version: 0.2.0
243
+ version: 0.3.0
244
244
  type: :runtime
245
245
  prerelease: false
246
246
  version_requirements: !ruby/object:Gem::Requirement
247
247
  requirements:
248
248
  - - "~>"
249
249
  - !ruby/object:Gem::Version
250
- version: 0.2.0
250
+ version: 0.3.0
251
251
  - !ruby/object:Gem::Dependency
252
252
  name: rspec-terraspace
253
253
  requirement: !ruby/object:Gem::Requirement
254
254
  requirements:
255
- - - ">="
255
+ - - "~>"
256
256
  - !ruby/object:Gem::Version
257
- version: '0'
257
+ version: 0.2.0
258
258
  type: :runtime
259
259
  prerelease: false
260
260
  version_requirements: !ruby/object:Gem::Requirement
261
261
  requirements:
262
- - - ">="
262
+ - - "~>"
263
263
  - !ruby/object:Gem::Version
264
- version: '0'
264
+ version: 0.2.0
265
265
  - !ruby/object:Gem::Dependency
266
266
  name: bundler
267
267
  requirement: !ruby/object:Gem::Requirement
@@ -385,7 +385,10 @@ files:
385
385
  - README.md
386
386
  - Rakefile
387
387
  - exe/terraspace
388
+ - lib/templates/base/arg/terraform.rb.tt
388
389
  - lib/templates/base/git_hook/hook.sh
390
+ - lib/templates/base/helper/%name%_helper.rb.tt
391
+ - lib/templates/base/hook/%kind%.rb.tt
389
392
  - lib/templates/base/project/.gitignore
390
393
  - lib/templates/base/project/Gemfile.tt
391
394
  - lib/templates/base/project/README.md
@@ -481,6 +484,7 @@ files:
481
484
  - lib/terraspace/cli/help.rb
482
485
  - lib/terraspace/cli/help/all/down.md
483
486
  - lib/terraspace/cli/help/all/graph.md
487
+ - lib/terraspace/cli/help/all/init.md
484
488
  - lib/terraspace/cli/help/all/output.md
485
489
  - lib/terraspace/cli/help/all/plan.md
486
490
  - lib/terraspace/cli/help/all/providers.md
@@ -509,16 +513,17 @@ files:
509
513
  - lib/terraspace/cli/help/logs.md
510
514
  - lib/terraspace/cli/help/logs/remove.md
511
515
  - lib/terraspace/cli/help/logs/truncate.md
512
- - lib/terraspace/cli/help/new/bootstrap_test.md
516
+ - lib/terraspace/cli/help/new/arg.md
513
517
  - lib/terraspace/cli/help/new/example.md
514
518
  - lib/terraspace/cli/help/new/git_hook.md
519
+ - lib/terraspace/cli/help/new/helper.md
520
+ - lib/terraspace/cli/help/new/hook.md
515
521
  - lib/terraspace/cli/help/new/module.md
516
- - lib/terraspace/cli/help/new/module_test.md
517
522
  - lib/terraspace/cli/help/new/plugin.md
518
523
  - lib/terraspace/cli/help/new/project.md
519
- - lib/terraspace/cli/help/new/project_test.md
520
524
  - lib/terraspace/cli/help/new/shim.md
521
525
  - lib/terraspace/cli/help/new/stack.md
526
+ - lib/terraspace/cli/help/new/test.md
522
527
  - lib/terraspace/cli/help/output.md
523
528
  - lib/terraspace/cli/help/plan.md
524
529
  - lib/terraspace/cli/help/providers.md
@@ -535,9 +540,12 @@ files:
535
540
  - lib/terraspace/cli/logs.rb
536
541
  - lib/terraspace/cli/logs/concern.rb
537
542
  - lib/terraspace/cli/new.rb
543
+ - lib/terraspace/cli/new/arg.rb
538
544
  - lib/terraspace/cli/new/git_hook.rb
539
545
  - lib/terraspace/cli/new/helper.rb
540
- - lib/terraspace/cli/new/helper/plugin_gem.rb
546
+ - lib/terraspace/cli/new/helpers.rb
547
+ - lib/terraspace/cli/new/helpers/plugin_gem.rb
548
+ - lib/terraspace/cli/new/hook.rb
541
549
  - lib/terraspace/cli/new/module.rb
542
550
  - lib/terraspace/cli/new/plugin.rb
543
551
  - lib/terraspace/cli/new/plugin/helper.rb
@@ -548,10 +556,7 @@ files:
548
556
  - lib/terraspace/cli/new/source/plugin.rb
549
557
  - lib/terraspace/cli/new/source/test.rb
550
558
  - lib/terraspace/cli/new/stack.rb
551
- - lib/terraspace/cli/new/test/base.rb
552
- - lib/terraspace/cli/new/test/bootstrap.rb
553
- - lib/terraspace/cli/new/test/module.rb
554
- - lib/terraspace/cli/new/test/project.rb
559
+ - lib/terraspace/cli/new/test.rb
555
560
  - lib/terraspace/cli/seed.rb
556
561
  - lib/terraspace/cli/summary.rb
557
562
  - lib/terraspace/cli/test.rb
@@ -589,6 +594,7 @@ files:
589
594
  - lib/terraspace/compiler/erb/helpers.rb
590
595
  - lib/terraspace/compiler/erb/render.rb
591
596
  - lib/terraspace/compiler/expander.rb
597
+ - lib/terraspace/compiler/helper_extender.rb
592
598
  - lib/terraspace/compiler/strategy/abstract_base.rb
593
599
  - lib/terraspace/compiler/strategy/mod.rb
594
600
  - lib/terraspace/compiler/strategy/mod/base.rb
@@ -629,6 +635,7 @@ files:
629
635
  - lib/terraspace/plugin/expander/generic.rb
630
636
  - lib/terraspace/plugin/expander/interface.rb
631
637
  - lib/terraspace/plugin/finder.rb
638
+ - lib/terraspace/plugin/helper/interface.rb
632
639
  - lib/terraspace/plugin/infer_provider.rb
633
640
  - lib/terraspace/plugin/layer/interface.rb
634
641
  - lib/terraspace/plugin/meta.rb
@@ -638,6 +645,7 @@ files:
638
645
  - lib/terraspace/seeder/content.rb
639
646
  - lib/terraspace/seeder/where.rb
640
647
  - lib/terraspace/shell.rb
648
+ - lib/terraspace/shell/error.rb
641
649
  - lib/terraspace/terraform/api.rb
642
650
  - lib/terraspace/terraform/api/base.rb
643
651
  - lib/terraspace/terraform/api/client.rb
@@ -669,6 +677,7 @@ files:
669
677
  - lib/terraspace/terraform/remote_state/output_proxy.rb
670
678
  - lib/terraspace/terraform/remote_state/unresolved.rb
671
679
  - lib/terraspace/terraform/runner.rb
680
+ - lib/terraspace/terraform/runner/retryer.rb
672
681
  - lib/terraspace/tester.rb
673
682
  - lib/terraspace/tester/finder.rb
674
683
  - lib/terraspace/tester/meta.rb
@@ -825,7 +834,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
825
834
  - !ruby/object:Gem::Version
826
835
  version: '0'
827
836
  requirements: []
828
- rubygems_version: 3.1.2
837
+ rubygems_version: 3.1.4
829
838
  signing_key:
830
839
  specification_version: 4
831
840
  summary: 'Terraspace: The Terraspace Framework'