terraspace 0.3.4 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +33 -0
  3. data/README.md +56 -29
  4. data/lib/templates/base/project/README.md +1 -1
  5. data/lib/terraspace/all/preview.rb +1 -1
  6. data/lib/terraspace/all/runner.rb +1 -0
  7. data/lib/terraspace/all/summary.rb +8 -1
  8. data/lib/terraspace/app.rb +9 -5
  9. data/lib/terraspace/builder.rb +10 -6
  10. data/lib/terraspace/cli.rb +11 -16
  11. data/lib/terraspace/cli/all.rb +6 -0
  12. data/lib/terraspace/cli/bundle.rb +2 -1
  13. data/lib/terraspace/cli/clean.rb +18 -6
  14. data/lib/terraspace/cli/clean/all.rb +18 -0
  15. data/lib/terraspace/cli/clean/base.rb +15 -0
  16. data/lib/terraspace/cli/clean/cache.rb +25 -0
  17. data/lib/terraspace/cli/{logs/tasks.rb → clean/logs.rb} +16 -5
  18. data/lib/terraspace/cli/help/all/init.md +33 -0
  19. data/lib/terraspace/cli/help/clean/all.md +10 -0
  20. data/lib/terraspace/cli/help/clean/cache.md +12 -0
  21. data/lib/terraspace/cli/help/clean/logs.md +17 -0
  22. data/lib/terraspace/cli/help/logs.md +48 -0
  23. data/lib/terraspace/cli/init.rb +3 -7
  24. data/lib/terraspace/cli/list.rb +2 -1
  25. data/lib/terraspace/cli/logs.rb +106 -9
  26. data/lib/terraspace/cli/{log → logs}/concern.rb +2 -1
  27. data/lib/terraspace/cli/new/helper.rb +9 -2
  28. data/lib/terraspace/compiler/dependencies/helpers.rb +34 -0
  29. data/lib/terraspace/compiler/dsl/syntax/helpers/common.rb +0 -26
  30. data/lib/terraspace/compiler/dsl/syntax/tfvar.rb +1 -0
  31. data/lib/terraspace/compiler/erb/context.rb +1 -1
  32. data/lib/terraspace/compiler/erb/helpers.rb +6 -0
  33. data/lib/terraspace/dependency/helper/base.rb +7 -0
  34. data/lib/terraspace/dependency/helper/depends_on.rb +12 -0
  35. data/lib/terraspace/dependency/helper/output.rb +11 -0
  36. data/lib/terraspace/hooks/builder.rb +52 -0
  37. data/lib/terraspace/hooks/concern.rb +9 -0
  38. data/lib/terraspace/{terraform/hooks → hooks}/dsl.rb +3 -2
  39. data/lib/terraspace/hooks/runner.rb +23 -0
  40. data/lib/terraspace/mod.rb +11 -2
  41. data/lib/terraspace/plugin/summary/interface.rb +3 -1
  42. data/lib/terraspace/shell.rb +15 -10
  43. data/lib/terraspace/terraform/args/custom.rb +1 -1
  44. data/lib/terraspace/terraform/args/default.rb +9 -19
  45. data/lib/terraspace/terraform/remote_state/fetcher.rb +13 -4
  46. data/lib/terraspace/terraform/remote_state/marker/output.rb +3 -1
  47. data/lib/terraspace/terraform/remote_state/output_proxy.rb +18 -14
  48. data/lib/terraspace/terraform/remote_state/unresolved.rb +40 -0
  49. data/lib/terraspace/terraform/runner.rb +3 -8
  50. data/lib/terraspace/version.rb +1 -1
  51. data/spec/fixtures/dependencies/app/stacks/a1/tfvars/dev.tfvars +1 -0
  52. data/spec/fixtures/fetcher/c1.json +4 -0
  53. data/spec/terraspace/compiler/erb/render_spec.rb +15 -0
  54. data/spec/terraspace/dependency/helper/depends_on_spec.rb +27 -0
  55. data/spec/terraspace/dependency/helper/output_spec.rb +29 -0
  56. data/spec/terraspace/{terraform/hooks → hooks}/builder_spec.rb +4 -5
  57. data/spec/terraspace/terraform/remote_state/fetcher_spec.rb +108 -27
  58. data/spec/terraspace/terraform/remote_state/marker/output_spec.rb +36 -0
  59. data/spec/terraspace/terraform/remote_state/output_proxy_spec.rb +69 -0
  60. data/terraspace.gemspec +1 -1
  61. metadata +38 -13
  62. data/lib/terraspace/cli/help/clean.md +0 -5
  63. data/lib/terraspace/cli/help/log.md +0 -48
  64. data/lib/terraspace/cli/log.rb +0 -112
  65. data/lib/terraspace/terraform/hooks/builder.rb +0 -40
@@ -1,6 +1,7 @@
1
1
  module Terraspace::Terraform
2
2
  class Runner < Terraspace::CLI::Base
3
3
  extend Memoist
4
+ include Terraspace::Hooks::Concern
4
5
  include Terraspace::Util
5
6
 
6
7
  attr_reader :name
@@ -20,8 +21,8 @@ module Terraspace::Terraform
20
21
  current_dir_message # only show once
21
22
 
22
23
  params = args.flatten.join(' ')
23
- command = "terraform #{name} #{params}"
24
- run_hooks(name) do
24
+ command = "terraform #{name} #{params}".squish
25
+ run_hooks("terraform.rb", name) do
25
26
  Terraspace::Shell.new(@mod, command, @options.merge(env: custom.env_vars)).run
26
27
  end
27
28
  rescue Terraspace::InitRequiredError => e
@@ -53,12 +54,6 @@ module Terraspace::Terraform
53
54
  @options[:quiet] ? logger.debug(msg) : logger.info(msg)
54
55
  end
55
56
 
56
- def run_hooks(name, &block)
57
- hooks = Hooks::Builder.new(@mod, name)
58
- hooks.build # build hooks
59
- hooks.run_hooks(&block)
60
- end
61
-
62
57
  def args
63
58
  # base at end in case of redirection. IE: terraform output > /path
64
59
  custom.args + custom.var_files + default.args
@@ -1,3 +1,3 @@
1
1
  module Terraspace
2
- VERSION = "0.3.4"
2
+ VERSION = "0.4.2"
3
3
  end
@@ -0,0 +1 @@
1
+ length = <%= output('b1.length') %>
@@ -8,6 +8,10 @@
8
8
  "value": 1,
9
9
  "type": "number"
10
10
  },
11
+ "complex": {
12
+ "value": ["a","b"],
13
+ "type": "list"
14
+ },
11
15
  "random_pet_id": {
12
16
  "value": "valued-buzzard",
13
17
  "type": "string"
@@ -0,0 +1,15 @@
1
+ describe Terraspace::Compiler::Erb::Render do
2
+ let(:render) { described_class.new(mod, src_path) }
3
+ let(:mod) { Terraspace::Mod.new("a1") }
4
+
5
+ # Only testing mod unresolved as a sanity check and its worth the ROI.
6
+ # The resolved would the Fetcher. We have unit tests to cover those other changes.
7
+ context "a1" do
8
+ let(:src_path) { fixture("dependencies/app/stacks/a1/tfvars/dev.tfvars") }
9
+ it "build" do
10
+ allow(Terraspace::Terraform::RemoteState::Marker::Output).to receive(:stack_names).and_return("b1")
11
+ result = render.build
12
+ expect(result).to eq "length = (unresolved)"
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,27 @@
1
+ describe Terraspace::Dependency::Helper::DependsOn do
2
+ let(:depends_on) do
3
+ described_class.new(mod, identifier, options)
4
+ end
5
+ let (:mod) { Terraspace::Mod.new("a1") }
6
+ # follow args dont matter for spec
7
+ let (:identifier) { "b1" }
8
+ let (:options) { {} }
9
+
10
+ context "unresolved" do
11
+ before(:each) { mod.resolved = false }
12
+ it "result calls Marker::Output" do
13
+ allow(Terraspace::Terraform::RemoteState::Marker::Output).to receive(:new).and_return(double(:marker_output).as_null_object)
14
+ result = depends_on.result
15
+ expect(result).to be_a(RSpec::Mocks::Double)
16
+ expect(result.instance_variable_get(:@name)).to eq :marker_output
17
+ end
18
+ end
19
+
20
+ context "resolved" do
21
+ before(:each) { mod.resolved = true }
22
+ it "return an raw String" do
23
+ result = depends_on.result
24
+ expect(result).to eq "# a1 depends on b1"
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,29 @@
1
+ describe Terraspace::Dependency::Helper::Output do
2
+ let(:output) do
3
+ described_class.new(mod, identifier, options)
4
+ end
5
+ let (:mod) { Terraspace::Mod.new("foo") }
6
+ # doesnt matter for spec
7
+ let (:identifier) { nil }
8
+ let (:options) { nil }
9
+
10
+ context "unresolved" do
11
+ before(:each) { mod.resolved = false }
12
+ it "result calls Marker::Output" do
13
+ allow(Terraspace::Terraform::RemoteState::Marker::Output).to receive(:new).and_return(double(:marker_output).as_null_object)
14
+ result = output.result
15
+ expect(result).to be_a(RSpec::Mocks::Double)
16
+ expect(result.instance_variable_get(:@name)).to eq :marker_output
17
+ end
18
+ end
19
+
20
+ context "resolved" do
21
+ before(:each) { mod.resolved = true }
22
+ it "result calls Fetcher" do
23
+ allow(Terraspace::Terraform::RemoteState::Fetcher).to receive(:new).and_return(double(:fetcher_output).as_null_object)
24
+ result = output.result
25
+ expect(result).to be_a(RSpec::Mocks::Double)
26
+ expect(result.instance_variable_get(:@name)).to eq :fetcher_output
27
+ end
28
+ end
29
+ end
@@ -1,7 +1,6 @@
1
- describe Terraspace::Terraform::Hooks::Builder do
1
+ describe Terraspace::Hooks::Builder do
2
2
  let(:builder) do
3
- builder = described_class.new(mod, name)
4
- builder.instance_variable_set(:@file, file) # override @file for spec
3
+ builder = described_class.new(mod, dsl_file, name)
5
4
  builder
6
5
  end
7
6
  let(:mod) do
@@ -11,7 +10,7 @@ describe Terraspace::Terraform::Hooks::Builder do
11
10
  end
12
11
 
13
12
  context "single" do
14
- let(:file) { fixture("terraform/hooks/single.rb") }
13
+ let(:dsl_file) { fixture("terraform/hooks/single.rb") }
15
14
  let(:name) { "apply" }
16
15
  it "build creates the @hooks structure" do
17
16
  hooks = builder.build
@@ -25,7 +24,7 @@ describe Terraspace::Terraform::Hooks::Builder do
25
24
  end
26
25
 
27
26
  context "multiple" do
28
- let(:file) { fixture("terraform/hooks/multiple.rb") }
27
+ let(:dsl_file) { fixture("terraform/hooks/multiple.rb") }
29
28
  let(:name) { "apply" }
30
29
  it "build creates the @hooks structure" do
31
30
  hooks = builder.build
@@ -11,41 +11,122 @@ describe Terraspace::Terraform::RemoteState::Fetcher do
11
11
  double("c1").as_null_object
12
12
  end
13
13
 
14
- context "pull success" do
15
- let(:state_path) { "spec/fixtures/fetcher/c1.json" }
16
- let(:pull_success) { true }
14
+ context "to_s uses to_json by default" do
15
+ context "pull success" do
16
+ let(:state_path) { "spec/fixtures/fetcher/c1.json" }
17
+ let(:pull_success) { true }
17
18
 
18
- context "c1.length" do
19
- let(:identifier) { "c1.length" }
20
- it "fetched found attribute" do
21
- expect(fetcher.output.raw).to eq 1 # matches spec/fixtures/fetcher/c1.json outputs.length.value
19
+ context "c1.length" do
20
+ let(:identifier) { "c1.length" }
21
+ it "fetched found attribute" do
22
+ expect(fetcher.output.to_s).to eq '1' # Integer as json matches spec/fixtures/fetcher/c1.json outputs.length.value
23
+ end
24
+ end
25
+
26
+ context "c1.complex" do
27
+ let(:identifier) { "c1.complex" }
28
+ it "fetched found attribute" do
29
+ expect(fetcher.output.to_s).to eq ["a","b"].to_json # matches spec/fixtures/fetcher/c1.json outputs.complex.value
30
+ end
31
+ end
32
+
33
+ context "c1.does-not-exist" do
34
+ let(:identifier) { "c1.does-not-exist" }
35
+ it "fetched missing output" do
36
+ output_proxy = fetcher.output
37
+ expect(output_proxy.raw).to be nil
38
+ value = output_proxy.to_s
39
+ # (Output length9 was not found for the b1 tfvars file. Either c1 stack has not been deployed yet or it does not have this output: length9)
40
+ expect(value).to include "not found"
41
+ end
22
42
  end
23
43
  end
24
44
 
25
- context "c1.does-not-exist" do
26
- let(:identifier) { "c1.does-not-exist" }
27
- it "fetched missing output" do
28
- output_proxy = fetcher.output
29
- expect(output_proxy.raw).to be nil
30
- # (Output length9 was not found for the b1 tfvars file. Either c1 stack has not been deployed yet or it does not have this output: length9)
31
- error = output_proxy.options[:error]
32
- expect(error).to include "not found"
45
+ context "pull fail" do
46
+ let(:state_path) { nil }
47
+ let(:pull_success) { false }
48
+
49
+ context "stack needs to be deployed" do
50
+ let(:identifier) { "c1.length" }
51
+ it "fetched" do
52
+ output_proxy = fetcher.output
53
+ expect(output_proxy.raw).to be nil
54
+ # (Output length could not be looked up for the b1 tfvars file. c1 stack needs to be deployed)
55
+ value = output_proxy.to_s
56
+ expect(value).to include "stack needs to be deployed"
57
+ end
58
+ end
59
+
60
+ context "bucket does not exist" do
61
+ let(:identifier) { "c1.length" }
62
+ it "fetched" do
63
+ fetcher.bucket_not_found_error # fake it!
64
+ output_proxy = fetcher.output
65
+ expect(output_proxy.raw).to be nil
66
+ # (Output length could not be looked up for the b1 tfvars file. c1 stack needs to be deployed)
67
+ value = output_proxy.to_s
68
+ expect(value).to include "bucket for the backend could not be found"
69
+ end
33
70
  end
34
71
  end
35
72
  end
36
73
 
37
- context "pull fail" do
38
- let(:state_path) { nil }
39
- let(:pull_success) { false }
40
-
41
- context "c1.length" do
42
- let(:identifier) { "c1.length" }
43
- it "fetched" do
44
- output_proxy = fetcher.output
45
- expect(output_proxy.raw).to be nil
46
- # (Output length could not be looked up for the b1 tfvars file. c1 stack needs to be deployed)
47
- error = output_proxy.options[:error]
48
- expect(error).to include "stack needs to be deployed"
74
+ context "to_ruby" do
75
+ context "pull success" do
76
+ let(:state_path) { "spec/fixtures/fetcher/c1.json" }
77
+ let(:pull_success) { true }
78
+
79
+ context "c1.length" do
80
+ let(:identifier) { "c1.length" }
81
+ it "fetched found attribute" do
82
+ expect(fetcher.output.to_ruby).to eq 1 # raw Integer
83
+ end
84
+ end
85
+
86
+ context "c1.complex" do
87
+ let(:identifier) { "c1.complex" }
88
+ it "fetched found attribute" do
89
+ expect(fetcher.output.to_ruby).to eq ["a","b"] # raw Array
90
+ end
91
+ end
92
+
93
+ context "c1.does-not-exist" do
94
+ let(:identifier) { "c1.does-not-exist" }
95
+ it "fetched missing output" do
96
+ output_proxy = fetcher.output
97
+ expect(output_proxy.raw).to be nil
98
+ value = output_proxy.to_ruby
99
+ # (Output length9 was not found for the b1 tfvars file. Either c1 stack has not been deployed yet or it does not have this output: length9)
100
+ expect(value).to include "not found"
101
+ end
102
+ end
103
+ end
104
+
105
+ context "pull fail" do
106
+ let(:state_path) { nil }
107
+ let(:pull_success) { false }
108
+
109
+ context "stack needs to be deployed" do
110
+ let(:identifier) { "c1.length" }
111
+ it "fetched" do
112
+ output_proxy = fetcher.output
113
+ expect(output_proxy.raw).to be nil
114
+ # (Output length could not be looked up for the b1 tfvars file. c1 stack needs to be deployed)
115
+ value = output_proxy.to_s
116
+ expect(value).to include "stack needs to be deployed"
117
+ end
118
+ end
119
+
120
+ context "bucket does not exist" do
121
+ let(:identifier) { "c1.length" }
122
+ it "fetched" do
123
+ fetcher.bucket_not_found_error # fake it!
124
+ output_proxy = fetcher.output
125
+ expect(output_proxy.raw).to be nil
126
+ # (Output length could not be looked up for the b1 tfvars file. c1 stack needs to be deployed)
127
+ value = output_proxy.to_s
128
+ expect(value).to include "bucket for the backend could not be found"
129
+ end
49
130
  end
50
131
  end
51
132
  end
@@ -0,0 +1,36 @@
1
+ describe Terraspace::Terraform::RemoteState::Marker::Output do
2
+ let(:output) do
3
+ output = described_class.new(mod, identifier, options)
4
+ allow(output).to receive(:warning) # supress warning messaging about missing child stack
5
+ output
6
+ end
7
+ let (:mod) { Terraspace::Mod.new("a1") }
8
+ let (:options) { {} }
9
+
10
+ before(:each) do
11
+ Terraspace::Dependency::Registry.class_variable_set("@@data", Set.new)
12
+ end
13
+
14
+ # markers are always only called during unresolved stage
15
+ context "child stack found" do
16
+ let(:identifier) { "b1.length" }
17
+ it "registers dependency and always return a OutputProxy" do
18
+ allow(output).to receive(:valid?).and_return(true) # child stack found
19
+ result = output.build
20
+ expect(result).to be_a(Terraspace::Terraform::RemoteState::OutputProxy)
21
+ set = Terraspace::Dependency::Registry.data
22
+ expect(set).not_to be_empty
23
+ end
24
+ end
25
+
26
+ context "child stack not found" do
27
+ let(:identifier) { "b1.length" }
28
+ it "does not registers dependency and always return a OutputProxy" do
29
+ allow(output).to receive(:valid?).and_return(false) # child stack not found
30
+ result = output.build
31
+ expect(result).to be_a(Terraspace::Terraform::RemoteState::OutputProxy)
32
+ set = Terraspace::Dependency::Registry.data
33
+ expect(set).to be_empty
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,69 @@
1
+ Unresolved = Terraspace::Terraform::RemoteState::Unresolved
2
+
3
+ describe Terraspace::Terraform::RemoteState::OutputProxy do
4
+ let(:proxy) do
5
+ described_class.new(mod, raw, options)
6
+ end
7
+ let (:mod) { Terraspace::Mod.new("foo") }
8
+ let (:raw) { nil }
9
+ let (:options) { {} }
10
+
11
+ context "unresolved" do
12
+ before(:each) { mod.resolved = false }
13
+ it "always return Unresolved" do
14
+ value = proxy.to_s
15
+ expect(value).to be_a(Unresolved)
16
+ expect(value.to_str).to eq "(unresolved)"
17
+ end
18
+ end
19
+
20
+ # Resolved value should always return a String because ERB requires string.
21
+ # Always use to_json.
22
+ context "resolved with mock" do
23
+ before(:each) { mod.resolved = true }
24
+ let (:raw) { nil }
25
+ let (:options) { {mock: "mock value"} }
26
+
27
+ it "return to_json String with mock value" do
28
+ value = proxy.to_s
29
+ expect(value).to be_a(String)
30
+ expect(value.to_str).to eq '"mock value"' # note double quotes from the to_json
31
+ end
32
+ end
33
+
34
+ context "resolved with errors" do
35
+ before(:each) { mod.resolved = true }
36
+ let (:raw) { nil }
37
+ let (:options) { {error: "error message"} }
38
+
39
+ it "return to_json String with error message" do
40
+ value = proxy.to_s
41
+ expect(value).to be_a(String)
42
+ expect(value.to_str).to eq '"error message"' # note double quotes from the to_json
43
+ end
44
+ end
45
+
46
+ context "to_ruby resolved with mock" do
47
+ before(:each) { mod.resolved = true }
48
+ let (:raw) { nil }
49
+ let (:options) { {mock: "mock value"} }
50
+
51
+ it "return to_json String with mock value" do
52
+ value = proxy.to_ruby
53
+ expect(value).to be_a(String)
54
+ expect(value.to_str).to eq "mock value"
55
+ end
56
+ end
57
+
58
+ context "to_ruby resolved with errors" do
59
+ before(:each) { mod.resolved = true }
60
+ let (:raw) { nil }
61
+ let (:options) { {error: "error message"} }
62
+
63
+ it "return to_json String with error message" do
64
+ value = proxy.to_ruby
65
+ expect(value).to be_a(String)
66
+ expect(value.to_str).to eq "error message"
67
+ end
68
+ end
69
+ end
@@ -28,7 +28,7 @@ Gem::Specification.new do |spec|
28
28
  spec.add_dependency "memoist"
29
29
  spec.add_dependency "rainbow"
30
30
  spec.add_dependency "render_me_pretty"
31
- spec.add_dependency "terraspace-bundler", "~> 0.2.0"
31
+ spec.add_dependency "terraspace-bundler", "~> 0.3.0"
32
32
  spec.add_dependency "thor"
33
33
  spec.add_dependency "tty-tree"
34
34
  spec.add_dependency "zeitwerk"
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.3.4
4
+ version: 0.4.2
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-09-20 00:00:00.000000000 Z
11
+ date: 2020-10-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -156,14 +156,14 @@ dependencies:
156
156
  requirements:
157
157
  - - "~>"
158
158
  - !ruby/object:Gem::Version
159
- version: 0.2.0
159
+ version: 0.3.0
160
160
  type: :runtime
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
- version: 0.2.0
166
+ version: 0.3.0
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: thor
169
169
  requirement: !ruby/object:Gem::Requirement
@@ -470,6 +470,10 @@ files:
470
470
  - lib/terraspace/cli/bundle.rb
471
471
  - lib/terraspace/cli/check_setup.rb
472
472
  - lib/terraspace/cli/clean.rb
473
+ - lib/terraspace/cli/clean/all.rb
474
+ - lib/terraspace/cli/clean/base.rb
475
+ - lib/terraspace/cli/clean/cache.rb
476
+ - lib/terraspace/cli/clean/logs.rb
473
477
  - lib/terraspace/cli/cloud.rb
474
478
  - lib/terraspace/cli/cloud/runs.rb
475
479
  - lib/terraspace/cli/commander.rb
@@ -477,6 +481,7 @@ files:
477
481
  - lib/terraspace/cli/help.rb
478
482
  - lib/terraspace/cli/help/all/down.md
479
483
  - lib/terraspace/cli/help/all/graph.md
484
+ - lib/terraspace/cli/help/all/init.md
480
485
  - lib/terraspace/cli/help/all/output.md
481
486
  - lib/terraspace/cli/help/all/plan.md
482
487
  - lib/terraspace/cli/help/all/providers.md
@@ -487,7 +492,9 @@ files:
487
492
  - lib/terraspace/cli/help/build.md
488
493
  - lib/terraspace/cli/help/bundle.md
489
494
  - lib/terraspace/cli/help/check_setup.md
490
- - lib/terraspace/cli/help/clean.md
495
+ - lib/terraspace/cli/help/clean/all.md
496
+ - lib/terraspace/cli/help/clean/cache.md
497
+ - lib/terraspace/cli/help/clean/logs.md
491
498
  - lib/terraspace/cli/help/cloud/destroy.md
492
499
  - lib/terraspace/cli/help/cloud/list.md
493
500
  - lib/terraspace/cli/help/cloud/runs/list.md
@@ -500,7 +507,7 @@ files:
500
507
  - lib/terraspace/cli/help/info.md
501
508
  - lib/terraspace/cli/help/init.md
502
509
  - lib/terraspace/cli/help/list.md
503
- - lib/terraspace/cli/help/log.md
510
+ - lib/terraspace/cli/help/logs.md
504
511
  - lib/terraspace/cli/help/logs/remove.md
505
512
  - lib/terraspace/cli/help/logs/truncate.md
506
513
  - lib/terraspace/cli/help/new/bootstrap_test.md
@@ -526,10 +533,8 @@ files:
526
533
  - lib/terraspace/cli/info.rb
527
534
  - lib/terraspace/cli/init.rb
528
535
  - lib/terraspace/cli/list.rb
529
- - lib/terraspace/cli/log.rb
530
- - lib/terraspace/cli/log/concern.rb
531
536
  - lib/terraspace/cli/logs.rb
532
- - lib/terraspace/cli/logs/tasks.rb
537
+ - lib/terraspace/cli/logs/concern.rb
533
538
  - lib/terraspace/cli/new.rb
534
539
  - lib/terraspace/cli/new/git_hook.rb
535
540
  - lib/terraspace/cli/new/helper.rb
@@ -561,6 +566,7 @@ files:
561
566
  - lib/terraspace/compiler/cleaner.rb
562
567
  - lib/terraspace/compiler/cleaner/backend_change.rb
563
568
  - lib/terraspace/compiler/commands_concern.rb
569
+ - lib/terraspace/compiler/dependencies/helpers.rb
564
570
  - lib/terraspace/compiler/dirs_concern.rb
565
571
  - lib/terraspace/compiler/dsl/base.rb
566
572
  - lib/terraspace/compiler/dsl/meta/local.rb
@@ -581,6 +587,7 @@ files:
581
587
  - lib/terraspace/compiler/dsl/syntax/tfvar/common.rb
582
588
  - lib/terraspace/compiler/dsl/tfvars.rb
583
589
  - lib/terraspace/compiler/erb/context.rb
590
+ - lib/terraspace/compiler/erb/helpers.rb
584
591
  - lib/terraspace/compiler/erb/render.rb
585
592
  - lib/terraspace/compiler/expander.rb
586
593
  - lib/terraspace/compiler/strategy/abstract_base.rb
@@ -600,11 +607,18 @@ files:
600
607
  - lib/terraspace/completer/script.sh
601
608
  - lib/terraspace/core.rb
602
609
  - lib/terraspace/dependency/graph.rb
610
+ - lib/terraspace/dependency/helper/base.rb
611
+ - lib/terraspace/dependency/helper/depends_on.rb
612
+ - lib/terraspace/dependency/helper/output.rb
603
613
  - lib/terraspace/dependency/node.rb
604
614
  - lib/terraspace/dependency/registry.rb
605
615
  - lib/terraspace/ext.rb
606
616
  - lib/terraspace/ext/bundler.rb
607
617
  - lib/terraspace/ext/core/module.rb
618
+ - lib/terraspace/hooks/builder.rb
619
+ - lib/terraspace/hooks/concern.rb
620
+ - lib/terraspace/hooks/dsl.rb
621
+ - lib/terraspace/hooks/runner.rb
608
622
  - lib/terraspace/logger.rb
609
623
  - lib/terraspace/logger/formatter.rb
610
624
  - lib/terraspace/mod.rb
@@ -650,12 +664,11 @@ files:
650
664
  - lib/terraspace/terraform/cloud/sync.rb
651
665
  - lib/terraspace/terraform/cloud/syncer.rb
652
666
  - lib/terraspace/terraform/cloud/workspace.rb
653
- - lib/terraspace/terraform/hooks/builder.rb
654
- - lib/terraspace/terraform/hooks/dsl.rb
655
667
  - lib/terraspace/terraform/remote_state/fetcher.rb
656
668
  - lib/terraspace/terraform/remote_state/marker/output.rb
657
669
  - lib/terraspace/terraform/remote_state/marker/pretty_tracer.rb
658
670
  - lib/terraspace/terraform/remote_state/output_proxy.rb
671
+ - lib/terraspace/terraform/remote_state/unresolved.rb
659
672
  - lib/terraspace/terraform/runner.rb
660
673
  - lib/terraspace/tester.rb
661
674
  - lib/terraspace/tester/finder.rb
@@ -667,6 +680,7 @@ files:
667
680
  - lib/terraspace/version.rb
668
681
  - spec/cli_spec.rb
669
682
  - spec/fixtures/cache_dir/variables.tf
683
+ - spec/fixtures/dependencies/app/stacks/a1/tfvars/dev.tfvars
670
684
  - spec/fixtures/fetcher/c1.json
671
685
  - spec/fixtures/initialized/modules.json
672
686
  - spec/fixtures/orphans/config/backend.rb
@@ -780,13 +794,18 @@ files:
780
794
  - spec/terraspace/compiler/dsl/resource_spec.rb
781
795
  - spec/terraspace/compiler/dsl/terraform_spec.rb
782
796
  - spec/terraspace/compiler/dsl/variable_spec.rb
797
+ - spec/terraspace/compiler/erb/render_spec.rb
783
798
  - spec/terraspace/dependency/graph_spec.rb
799
+ - spec/terraspace/dependency/helper/depends_on_spec.rb
800
+ - spec/terraspace/dependency/helper/output_spec.rb
801
+ - spec/terraspace/hooks/builder_spec.rb
784
802
  - spec/terraspace/provider/expander/generic_spec.rb
785
803
  - spec/terraspace/seeder/content_spec.rb
786
804
  - spec/terraspace/seeder_spec.rb
787
805
  - spec/terraspace/terraform/args/custom_spec.rb
788
- - spec/terraspace/terraform/hooks/builder_spec.rb
789
806
  - spec/terraspace/terraform/remote_state/fetcher_spec.rb
807
+ - spec/terraspace/terraform/remote_state/marker/output_spec.rb
808
+ - spec/terraspace/terraform/remote_state/output_proxy_spec.rb
790
809
  - terraspace.gemspec
791
810
  homepage: https://github.com/boltops-tools/terraspace
792
811
  licenses:
@@ -814,6 +833,7 @@ summary: 'Terraspace: The Terraspace Framework'
814
833
  test_files:
815
834
  - spec/cli_spec.rb
816
835
  - spec/fixtures/cache_dir/variables.tf
836
+ - spec/fixtures/dependencies/app/stacks/a1/tfvars/dev.tfvars
817
837
  - spec/fixtures/fetcher/c1.json
818
838
  - spec/fixtures/initialized/modules.json
819
839
  - spec/fixtures/orphans/config/backend.rb
@@ -927,10 +947,15 @@ test_files:
927
947
  - spec/terraspace/compiler/dsl/resource_spec.rb
928
948
  - spec/terraspace/compiler/dsl/terraform_spec.rb
929
949
  - spec/terraspace/compiler/dsl/variable_spec.rb
950
+ - spec/terraspace/compiler/erb/render_spec.rb
930
951
  - spec/terraspace/dependency/graph_spec.rb
952
+ - spec/terraspace/dependency/helper/depends_on_spec.rb
953
+ - spec/terraspace/dependency/helper/output_spec.rb
954
+ - spec/terraspace/hooks/builder_spec.rb
931
955
  - spec/terraspace/provider/expander/generic_spec.rb
932
956
  - spec/terraspace/seeder/content_spec.rb
933
957
  - spec/terraspace/seeder_spec.rb
934
958
  - spec/terraspace/terraform/args/custom_spec.rb
935
- - spec/terraspace/terraform/hooks/builder_spec.rb
936
959
  - spec/terraspace/terraform/remote_state/fetcher_spec.rb
960
+ - spec/terraspace/terraform/remote_state/marker/output_spec.rb
961
+ - spec/terraspace/terraform/remote_state/output_proxy_spec.rb