terraspace 0.3.6 → 0.4.0

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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +17 -0
  3. data/lib/templates/base/project/README.md +1 -1
  4. data/lib/terraspace/all/runner.rb +1 -0
  5. data/lib/terraspace/all/summary.rb +8 -1
  6. data/lib/terraspace/app.rb +9 -5
  7. data/lib/terraspace/builder.rb +10 -6
  8. data/lib/terraspace/cli.rb +10 -16
  9. data/lib/terraspace/cli/all.rb +6 -0
  10. data/lib/terraspace/cli/bundle.rb +2 -1
  11. data/lib/terraspace/cli/clean.rb +18 -6
  12. data/lib/terraspace/cli/clean/all.rb +18 -0
  13. data/lib/terraspace/cli/clean/base.rb +15 -0
  14. data/lib/terraspace/cli/clean/cache.rb +25 -0
  15. data/lib/terraspace/cli/{logs/tasks.rb → clean/logs.rb} +8 -9
  16. data/lib/terraspace/cli/help/clean/all.md +10 -0
  17. data/lib/terraspace/cli/help/clean/cache.md +12 -0
  18. data/lib/terraspace/cli/help/clean/logs.md +17 -0
  19. data/lib/terraspace/cli/help/{log.md → logs.md} +14 -14
  20. data/lib/terraspace/cli/init.rb +3 -7
  21. data/lib/terraspace/cli/logs.rb +105 -10
  22. data/lib/terraspace/cli/{log → logs}/concern.rb +1 -1
  23. data/lib/terraspace/cli/new/helper.rb +9 -2
  24. data/lib/terraspace/dependency/helper/output.rb +1 -1
  25. data/lib/terraspace/hooks/builder.rb +52 -0
  26. data/lib/terraspace/hooks/concern.rb +9 -0
  27. data/lib/terraspace/{terraform/hooks → hooks}/dsl.rb +3 -2
  28. data/lib/terraspace/hooks/runner.rb +23 -0
  29. data/lib/terraspace/mod.rb +11 -2
  30. data/lib/terraspace/plugin/summary/interface.rb +3 -1
  31. data/lib/terraspace/shell.rb +15 -10
  32. data/lib/terraspace/terraform/args/custom.rb +1 -1
  33. data/lib/terraspace/terraform/remote_state/output_proxy.rb +3 -3
  34. data/lib/terraspace/terraform/remote_state/{null_object.rb → unresolved.rb} +1 -1
  35. data/lib/terraspace/terraform/runner.rb +2 -7
  36. data/lib/terraspace/version.rb +1 -1
  37. data/spec/terraspace/{terraform/hooks → hooks}/builder_spec.rb +4 -5
  38. data/spec/terraspace/terraform/remote_state/output_proxy_spec.rb +3 -3
  39. data/terraspace.gemspec +1 -1
  40. metadata +20 -14
  41. data/lib/terraspace/cli/help/clean.md +0 -5
  42. data/lib/terraspace/cli/log.rb +0 -112
  43. data/lib/terraspace/terraform/hooks/builder.rb +0 -40
@@ -1,3 +1,3 @@
1
1
  module Terraspace
2
- VERSION = "0.3.6"
2
+ VERSION = "0.4.0"
3
3
  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
@@ -1,4 +1,4 @@
1
- NullObject = Terraspace::Terraform::RemoteState::NullObject
1
+ Unresolved = Terraspace::Terraform::RemoteState::Unresolved
2
2
 
3
3
  describe Terraspace::Terraform::RemoteState::OutputProxy do
4
4
  let(:proxy) do
@@ -10,9 +10,9 @@ describe Terraspace::Terraform::RemoteState::OutputProxy do
10
10
 
11
11
  context "unresolved" do
12
12
  before(:each) { mod.resolved = false }
13
- it "always return NullObject" do
13
+ it "always return Unresolved" do
14
14
  value = proxy.to_s
15
- expect(value).to be_a(NullObject)
15
+ expect(value).to be_a(Unresolved)
16
16
  expect(value.to_str).to eq "(unresolved)"
17
17
  end
18
18
  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.6
4
+ version: 0.4.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-01 00:00:00.000000000 Z
11
+ date: 2020-10-18 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
@@ -487,7 +491,9 @@ files:
487
491
  - lib/terraspace/cli/help/build.md
488
492
  - lib/terraspace/cli/help/bundle.md
489
493
  - lib/terraspace/cli/help/check_setup.md
490
- - lib/terraspace/cli/help/clean.md
494
+ - lib/terraspace/cli/help/clean/all.md
495
+ - lib/terraspace/cli/help/clean/cache.md
496
+ - lib/terraspace/cli/help/clean/logs.md
491
497
  - lib/terraspace/cli/help/cloud/destroy.md
492
498
  - lib/terraspace/cli/help/cloud/list.md
493
499
  - lib/terraspace/cli/help/cloud/runs/list.md
@@ -500,7 +506,7 @@ files:
500
506
  - lib/terraspace/cli/help/info.md
501
507
  - lib/terraspace/cli/help/init.md
502
508
  - lib/terraspace/cli/help/list.md
503
- - lib/terraspace/cli/help/log.md
509
+ - lib/terraspace/cli/help/logs.md
504
510
  - lib/terraspace/cli/help/logs/remove.md
505
511
  - lib/terraspace/cli/help/logs/truncate.md
506
512
  - lib/terraspace/cli/help/new/bootstrap_test.md
@@ -526,10 +532,8 @@ files:
526
532
  - lib/terraspace/cli/info.rb
527
533
  - lib/terraspace/cli/init.rb
528
534
  - lib/terraspace/cli/list.rb
529
- - lib/terraspace/cli/log.rb
530
- - lib/terraspace/cli/log/concern.rb
531
535
  - lib/terraspace/cli/logs.rb
532
- - lib/terraspace/cli/logs/tasks.rb
536
+ - lib/terraspace/cli/logs/concern.rb
533
537
  - lib/terraspace/cli/new.rb
534
538
  - lib/terraspace/cli/new/git_hook.rb
535
539
  - lib/terraspace/cli/new/helper.rb
@@ -610,6 +614,10 @@ files:
610
614
  - lib/terraspace/ext.rb
611
615
  - lib/terraspace/ext/bundler.rb
612
616
  - lib/terraspace/ext/core/module.rb
617
+ - lib/terraspace/hooks/builder.rb
618
+ - lib/terraspace/hooks/concern.rb
619
+ - lib/terraspace/hooks/dsl.rb
620
+ - lib/terraspace/hooks/runner.rb
613
621
  - lib/terraspace/logger.rb
614
622
  - lib/terraspace/logger/formatter.rb
615
623
  - lib/terraspace/mod.rb
@@ -655,13 +663,11 @@ files:
655
663
  - lib/terraspace/terraform/cloud/sync.rb
656
664
  - lib/terraspace/terraform/cloud/syncer.rb
657
665
  - lib/terraspace/terraform/cloud/workspace.rb
658
- - lib/terraspace/terraform/hooks/builder.rb
659
- - lib/terraspace/terraform/hooks/dsl.rb
660
666
  - lib/terraspace/terraform/remote_state/fetcher.rb
661
667
  - lib/terraspace/terraform/remote_state/marker/output.rb
662
668
  - lib/terraspace/terraform/remote_state/marker/pretty_tracer.rb
663
- - lib/terraspace/terraform/remote_state/null_object.rb
664
669
  - lib/terraspace/terraform/remote_state/output_proxy.rb
670
+ - lib/terraspace/terraform/remote_state/unresolved.rb
665
671
  - lib/terraspace/terraform/runner.rb
666
672
  - lib/terraspace/tester.rb
667
673
  - lib/terraspace/tester/finder.rb
@@ -791,11 +797,11 @@ files:
791
797
  - spec/terraspace/dependency/graph_spec.rb
792
798
  - spec/terraspace/dependency/helper/depends_on_spec.rb
793
799
  - spec/terraspace/dependency/helper/output_spec.rb
800
+ - spec/terraspace/hooks/builder_spec.rb
794
801
  - spec/terraspace/provider/expander/generic_spec.rb
795
802
  - spec/terraspace/seeder/content_spec.rb
796
803
  - spec/terraspace/seeder_spec.rb
797
804
  - spec/terraspace/terraform/args/custom_spec.rb
798
- - spec/terraspace/terraform/hooks/builder_spec.rb
799
805
  - spec/terraspace/terraform/remote_state/fetcher_spec.rb
800
806
  - spec/terraspace/terraform/remote_state/marker/output_spec.rb
801
807
  - spec/terraspace/terraform/remote_state/output_proxy_spec.rb
@@ -944,11 +950,11 @@ test_files:
944
950
  - spec/terraspace/dependency/graph_spec.rb
945
951
  - spec/terraspace/dependency/helper/depends_on_spec.rb
946
952
  - spec/terraspace/dependency/helper/output_spec.rb
953
+ - spec/terraspace/hooks/builder_spec.rb
947
954
  - spec/terraspace/provider/expander/generic_spec.rb
948
955
  - spec/terraspace/seeder/content_spec.rb
949
956
  - spec/terraspace/seeder_spec.rb
950
957
  - spec/terraspace/terraform/args/custom_spec.rb
951
- - spec/terraspace/terraform/hooks/builder_spec.rb
952
958
  - spec/terraspace/terraform/remote_state/fetcher_spec.rb
953
959
  - spec/terraspace/terraform/remote_state/marker/output_spec.rb
954
960
  - spec/terraspace/terraform/remote_state/output_proxy_spec.rb
@@ -1,5 +0,0 @@
1
- ## Example
2
-
3
- $ terraspace clean
4
- Removed .terraspace-cache
5
- $
@@ -1,112 +0,0 @@
1
- require "eventmachine"
2
- require "eventmachine-tail"
3
-
4
- class Terraspace::CLI
5
- class Log < Base
6
- include Log::Concern
7
-
8
- def initialize(options={})
9
- super
10
- @action, @stack = options[:action], options[:stack]
11
- @action ||= '**'
12
- @stack ||= '*'
13
- end
14
-
15
- def run
16
- check_logs!
17
- if @options[:follow]
18
- follow_logs
19
- else
20
- all_log_paths.each { |path| show_log(path) }
21
- end
22
- end
23
-
24
- def follow_logs
25
- glob_path = "#{Terraspace.log_root}/#{@action}/#{@stack}.log"
26
- Dir.glob(glob_path).each do |path|
27
- puts "Following #{pretty(path)}".color(:purple)
28
- end
29
- EventMachine.run do
30
- interval = Integer(ENV['TS_LOG_GLOB_INTERNAL'] || 1)
31
- EventMachine::FileGlobWatchTail.new(glob_path, nil, interval) do |filetail, line|
32
- puts line # always show timestamp in follow mode
33
- end
34
- end
35
- end
36
-
37
- def show_log(path)
38
- report_log(path)
39
- lines = readlines(path)
40
- lines = apply_limit(lines)
41
- lines.each do |line|
42
- puts format(line)
43
- end
44
- end
45
-
46
- def report_log(path)
47
- pretty_path = pretty(path)
48
- if File.exist?(path)
49
- puts "Showing: #{pretty_path}".color(:purple)
50
- end
51
- end
52
-
53
- def format(line)
54
- if timestamps
55
- line
56
- else
57
- line.sub(/.*\]: /,'')
58
- end
59
- end
60
-
61
- def all_log_paths
62
- Dir.glob("#{Terraspace.log_root}/#{@action}/#{@stack}.log")
63
- end
64
-
65
- def check_logs!
66
- return unless all_log_paths.empty?
67
- puts "WARN: No logs found".color(:yellow)
68
- end
69
-
70
- # Only need to check if both action and stack are provided. Otherwise the Dir.globs are used to discover the files
71
- def check_log!
72
- return unless single_log?
73
- path = "#{Terraspace.log_root}/#{@action}/#{@stack}.log"
74
- return if File.exist?(path)
75
- puts "ERROR: Log file was not found: #{pretty(path)}".color(:red)
76
- exit 1
77
- end
78
-
79
- def single_log?
80
- @action != '**' && @stack != '*'
81
- end
82
-
83
- def apply_limit(lines)
84
- return lines if all
85
- left = limit * -1
86
- lines[left..-1] || []
87
- end
88
-
89
- def all
90
- if single_log?
91
- @options[:all].nil? ? true : @options[:all]
92
- else # multiple
93
- @options[:all].nil? ? false : @options[:all]
94
- end
95
- end
96
-
97
- def limit
98
- @options[:limit].nil? ? 10 : @options[:limit]
99
- end
100
-
101
- def timestamps
102
- if single_log?
103
- @options[:timestamps].nil? ? false : @options[:timestamps]
104
- else
105
- @options[:timestamps].nil? ? true : @options[:timestamps]
106
- end
107
- end
108
- def pretty(path)
109
- Terraspace::Util.pretty_path(path)
110
- end
111
- end
112
- end
@@ -1,40 +0,0 @@
1
- module Terraspace::Terraform::Hooks
2
- class Builder
3
- extend Memoist
4
- include Dsl
5
- include DslEvaluator
6
- include Terraspace::Util
7
-
8
- attr_accessor :name
9
- def initialize(mod, name)
10
- @mod, @name = mod, name
11
- @file = "#{Terraspace.root}/config/cli/hooks.rb"
12
- @hooks = {before: {}, after: {}}
13
- end
14
-
15
- def build
16
- return @hooks unless File.exist?(@file)
17
- evaluate_file(@file)
18
- @hooks.deep_stringify_keys!
19
- end
20
- memoize :build
21
-
22
- def run_hooks
23
- build
24
- run_hook("before")
25
- yield if block_given?
26
- run_hook("after")
27
- end
28
-
29
- def run_hook(type)
30
- execute = @hooks.dig(type, @name.to_s, "execute")
31
- return unless execute
32
-
33
- exit_on_fail = @hooks.dig(type, @name.to_s, "exit_on_fail")
34
- exit_on_fail = exit_on_fail.nil? ? true : exit_on_fail
35
-
36
- logger.info "Running #{type} hook"
37
- Terraspace::Shell.new(@mod, execute, exit_on_fail: exit_on_fail).run
38
- end
39
- end
40
- end