mux_tf 0.10.0 → 0.12.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.
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