mux_tf 0.10.0 → 0.12.0

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: 7674eca8a264df1e58d37be750bc5681a40c55ba1b47de8027ab77eda156c506
4
- data.tar.gz: d0bd742e109563bd51420c19d66ab11a45947778f200dc24fb0e1a2869f4b556
3
+ metadata.gz: 924f8b4cc0e90b4c636e3ffcc806c0e48036380ac81ee83b1dc21a437950e76e
4
+ data.tar.gz: 3bea784dc0db5091efa2dcba48c653b812d618b88c8dc04b997b59cc8e810e0c
5
5
  SHA512:
6
- metadata.gz: 5eeab6c9a70ab1e7124722c93e7bd6cbc0af3148902d6a3d9ab58436a352b41e6c16064c4d2881648060a063ad1fae212198acf4da64f9052403612e9fc9a136
7
- data.tar.gz: 7231f4def9919e26f091f5d2c5ac343923345addb9d4b55c7cb6687f324c526b301f255937f86653ec83b087b7244684ac9f122d04db020fb79d44469c9e1c3b
6
+ metadata.gz: 3dbd88ebf68ae0bb27116ce5b553a04668a746cfdd89ed1e646fc6f75961cf8c61d66f2a4ba46d0baaa17c6fdaa3b99704485632a5787a492037e75707e06b1a
7
+ data.tar.gz: bd9bf482078f080477f1871b02c256ad06b7bcb4e323adb8ee35fe056b9f8fd34bec4993c6b1611fac161b09b80db11c3d36395fdb42bef0d174e3ec666f8745
data/exe/tf_current CHANGED
@@ -8,6 +8,9 @@ begin
8
8
  require "mux_tf"
9
9
 
10
10
  MuxTf::Cli.run(:current, ARGV)
11
+ rescue Interrupt
12
+ warn "\nInterrupted"
13
+ exit 1
11
14
  rescue Exception => e # rubocop:disable Lint/RescueException
12
15
  warn e.full_message
13
16
  warn "<press enter>"
data/exe/tf_mux CHANGED
@@ -8,6 +8,9 @@ begin
8
8
  require "mux_tf"
9
9
 
10
10
  MuxTf::Cli.run(:mux, ARGV)
11
+ rescue Interrupt
12
+ warn "\nInterrupted"
13
+ exit 1
11
14
  rescue Exception => e # rubocop:disable Lint/RescueException
12
15
  warn e.full_message
13
16
  warn "<press enter>"
data/exe/tf_plan_summary CHANGED
@@ -8,6 +8,9 @@ begin
8
8
  require "mux_tf"
9
9
 
10
10
  MuxTf::Cli.run(:plan_summary, ARGV)
11
+ rescue Interrupt
12
+ warn "\nInterrupted"
13
+ exit 1
11
14
  rescue Exception => e # rubocop:disable Lint/RescueException
12
15
  warn e.full_message
13
16
  warn "<press enter>"
@@ -47,14 +47,6 @@ module MuxTf
47
47
  when :unknown
48
48
  launch_cmd_loop(plan_status)
49
49
  end
50
- rescue Exception => e # rubocop:disable Lint/RescueException
51
- puts Paint["Unhandled Exception!", :red]
52
- puts "=" * 20
53
- puts e.full_message
54
- puts
55
- puts "< press enter to continue >"
56
- gets
57
- exit 1
58
50
  end
59
51
 
60
52
  def plan_filename
@@ -9,8 +9,6 @@ module MuxTf
9
9
  def pretty_plan(filename, targets: []) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
10
10
  pastel = Pastel.new
11
11
 
12
- once = OnceHelper.new
13
-
14
12
  meta = {}
15
13
 
16
14
  parser = StatefulParser.new(normalizer: pastel.method(:strip))
@@ -23,6 +21,10 @@ module MuxTf
23
21
  [:none, :blank, :info, :reading])
24
22
  parser.state(:refresh_done, /^----------+$/, [:refreshing])
25
23
  parser.state(:refresh_done, /^$/, [:refreshing])
24
+
25
+ parser.state(:output_info, /^Changes to Outputs:$/, [:refresh_done])
26
+ parser.state(:refresh_done, /^$/, [:output_info])
27
+
26
28
  parser.state(:plan_info, /Terraform will perform the following actions:/, [:refresh_done, :none])
27
29
  parser.state(:plan_summary, /^Plan:/, [:plan_info])
28
30
 
@@ -34,8 +36,12 @@ module MuxTf
34
36
 
35
37
  parser.state(:plan_error, /^╷|Error: /, [:refreshing, :refresh_done])
36
38
 
39
+ last_state = nil
40
+
37
41
  status = tf_plan(out: filename, detailed_exitcode: true, compact_warnings: true, targets: targets) { |raw_line|
38
42
  parser.parse(raw_line.rstrip) do |state, line|
43
+ first_in_state = last_state != state
44
+
39
45
  case state
40
46
  when :none
41
47
  if line.blank?
@@ -66,35 +72,35 @@ module MuxTf
66
72
  meta["error"] = "lock"
67
73
  log Paint[line, :red], depth: 2
68
74
  when :plan_error
69
- once.for(state).once do puts end
75
+ puts if first_in_state
70
76
  meta["error"] = "refresh"
71
77
  log Paint[line, :red], depth: 2
72
78
  when :error_lock_info
73
79
  meta[$LAST_MATCH_INFO[1]] = $LAST_MATCH_INFO[2] if line =~ /([A-Z]+\S+)+:\s+(.+)$/
74
80
  log Paint[line, :red], depth: 2
75
81
  when :refreshing
76
- once.for(state).once {
82
+ if first_in_state
77
83
  log "Refreshing state ", depth: 2, newline: false
78
- }.otherwise {
84
+ else
79
85
  print "."
80
- }
86
+ end
81
87
  when :plan_legend
82
- once.for(state).once do puts end
88
+ puts if first_in_state
83
89
  log line, depth: 2
84
90
  when :refresh_done
85
- once.for(state).once {
86
- puts
87
- }.otherwise {
88
- # nothing
89
- }
91
+ puts if first_in_state
90
92
  when :plan_info # rubocop:disable Lint/DuplicateBranch
91
- once.for(state).once do puts end
93
+ puts if first_in_state
94
+ log line, depth: 2
95
+ when :output_info # rubocop:disable Lint/DuplicateBranch
96
+ puts if first_in_state
92
97
  log line, depth: 2
93
98
  when :plan_summary
94
99
  log line, depth: 2
95
100
  else
96
101
  p [state, pastel.strip(line)]
97
102
  end
103
+ last_state = state
98
104
  end
99
105
  }
100
106
  [status.status, meta]
@@ -60,7 +60,7 @@ module MuxTf
60
60
  }
61
61
  else
62
62
  puts "[??] #{output_name}"
63
- puts "UNKNOWN ACTIONS: #{v['actions'].inspect}"
63
+ puts "UNKNOWN OUTPUT ACTIONS: #{v['actions'].inspect}"
64
64
  puts "TODO: update plan_summary to support this!"
65
65
  end
66
66
  end
@@ -99,6 +99,13 @@ module MuxTf
99
99
  address: v["address"],
100
100
  deps: find_deps(data, v["address"])
101
101
  }
102
+ when %w[create delete]
103
+ parts << {
104
+ type: "resource",
105
+ action: "replace (create before delete)",
106
+ address: v["address"],
107
+ deps: find_deps(data, v["address"])
108
+ }
102
109
  when ["read"]
103
110
  parts << {
104
111
  type: "resource",
@@ -108,7 +115,7 @@ module MuxTf
108
115
  }
109
116
  else
110
117
  puts "[??] #{v['address']}"
111
- puts "UNKNOWN ACTIONS: #{v['change']['actions'].inspect}"
118
+ puts "UNKNOWN RESOURCE ACTIONS: #{v['change']['actions'].inspect}"
112
119
  puts "TODO: update plan_summary to support this!"
113
120
  end
114
121
  end
@@ -354,6 +361,8 @@ module MuxTf
354
361
  :red
355
362
  when "replace" # rubocop:disable Lint/DuplicateBranch
356
363
  :red
364
+ when "replace (create before delete)" # rubocop:disable Lint/DuplicateBranch
365
+ :red
357
366
  when "read"
358
367
  :cyan
359
368
  else
@@ -370,6 +379,8 @@ module MuxTf
370
379
  when "delete"
371
380
  "-"
372
381
  when "replace"
382
+ "∓"
383
+ when "replace (create before delete)"
373
384
  "±"
374
385
  when "read"
375
386
  ">"
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MuxTf
4
- VERSION = "0.10.0"
4
+ VERSION = "0.12.0"
5
5
  end
data/lib/mux_tf.rb CHANGED
@@ -23,7 +23,6 @@ require "dotenv"
23
23
 
24
24
  require_relative "./mux_tf/version"
25
25
  require_relative "./mux_tf/plan_filename_generator"
26
- require_relative "./mux_tf/once_helper"
27
26
  require_relative "./mux_tf/resource_tokenizer"
28
27
  require_relative "./mux_tf/cli"
29
28
  require_relative "./mux_tf/tmux"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mux_tf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Banasik
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-06-23 00:00:00.000000000 Z
11
+ date: 2023-07-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -141,7 +141,6 @@ files:
141
141
  - lib/mux_tf/cli/current.rb
142
142
  - lib/mux_tf/cli/mux.rb
143
143
  - lib/mux_tf/cli/plan_summary.rb
144
- - lib/mux_tf/once_helper.rb
145
144
  - lib/mux_tf/plan_filename_generator.rb
146
145
  - lib/mux_tf/plan_formatter.rb
147
146
  - lib/mux_tf/plan_summary_handler.rb
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module MuxTf
4
- class OnceHelper
5
- # once = OnceHelper.new
6
- # once.for(:phase).once { ... }.otherwise { ... }
7
-
8
- class StateEvaluator
9
- def initialize(once_helper, new_state)
10
- if once_helper.state == new_state
11
- @path = :otherwise
12
- else
13
- once_helper.state = new_state
14
- @path = :once
15
- end
16
- end
17
-
18
- def once
19
- yield if @path == :then
20
- self
21
- end
22
-
23
- def otherwise
24
- yield if @path == :otherwise
25
- self
26
- end
27
- end
28
-
29
- def initialize
30
- @state = nil
31
- end
32
-
33
- attr_accessor :state
34
-
35
- def for(new_state)
36
- StateEvaluator.new(self, new_state)
37
- end
38
- end
39
- end