mux_tf 0.13.0 → 0.14.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 +4 -4
- data/exe/tf_current +2 -0
- data/exe/tf_mux +2 -0
- data/exe/tf_plan_summary +2 -0
- data/lib/deps.rb +10 -1
- data/lib/mux_tf/cli/current.rb +192 -76
- data/lib/mux_tf/cli/plan_summary.rb +2 -1
- data/lib/mux_tf/cli.rb +3 -3
- data/lib/mux_tf/coloring.rb +23 -0
- data/lib/mux_tf/plan_formatter.rb +503 -80
- data/lib/mux_tf/plan_summary_handler.rb +99 -94
- data/lib/mux_tf/plan_utils.rb +360 -0
- data/lib/mux_tf/terraform_helpers.rb +51 -9
- data/lib/mux_tf/version.rb +1 -1
- data/lib/mux_tf.rb +18 -10
- data/mux_tf.gemspec +3 -1
- metadata +33 -3
@@ -40,13 +40,14 @@ module MuxTf
|
|
40
40
|
stream_or_run_terraform(cmd, &block)
|
41
41
|
end
|
42
42
|
|
43
|
-
def tf_plan(out:, color: true, detailed_exitcode: nil, compact_warnings: false, input: nil, targets: [], &block)
|
43
|
+
def tf_plan(out:, color: true, detailed_exitcode: nil, compact_warnings: false, input: nil, targets: [], json: false, &block) # rubocop:disable Metrics/CyclomaticComplexity
|
44
44
|
args = []
|
45
45
|
args += ["-out", out]
|
46
46
|
args << "-input=#{input.inspect}" unless input.nil?
|
47
47
|
args << "-compact-warnings" if compact_warnings
|
48
48
|
args << "-no-color" unless color
|
49
49
|
args << "-detailed-exitcode" if detailed_exitcode
|
50
|
+
args << "-json" if json
|
50
51
|
if targets && !targets.empty?
|
51
52
|
targets.each do |target|
|
52
53
|
args << "-target=#{target}"
|
@@ -54,10 +55,10 @@ module MuxTf
|
|
54
55
|
end
|
55
56
|
|
56
57
|
cmd = tf_prepare_command(["plan", *args], need_auth: true)
|
57
|
-
stream_or_run_terraform(cmd, &block)
|
58
|
+
stream_or_run_terraform(cmd, split_streams: json, &block)
|
58
59
|
end
|
59
60
|
|
60
|
-
def tf_show(file, json: false)
|
61
|
+
def tf_show(file, json: false, capture: false)
|
61
62
|
if json
|
62
63
|
args = ["show", "-json", file]
|
63
64
|
cmd = tf_prepare_command(args, need_auth: true)
|
@@ -65,7 +66,11 @@ module MuxTf
|
|
65
66
|
else
|
66
67
|
args = ["show", file]
|
67
68
|
cmd = tf_prepare_command(args, need_auth: true)
|
68
|
-
|
69
|
+
if capture
|
70
|
+
capture_terraform(cmd)
|
71
|
+
else
|
72
|
+
run_terraform(cmd)
|
73
|
+
end
|
69
74
|
end
|
70
75
|
end
|
71
76
|
|
@@ -84,9 +89,9 @@ module MuxTf
|
|
84
89
|
end
|
85
90
|
end
|
86
91
|
|
87
|
-
def stream_or_run_terraform(args, &block)
|
92
|
+
def stream_or_run_terraform(args, split_streams: false, &block)
|
88
93
|
if block
|
89
|
-
stream_terraform(args, &block)
|
94
|
+
stream_terraform(args, split_streams: split_streams, &block)
|
90
95
|
else
|
91
96
|
run_terraform(args)
|
92
97
|
end
|
@@ -101,8 +106,43 @@ module MuxTf
|
|
101
106
|
})
|
102
107
|
end
|
103
108
|
|
104
|
-
def
|
105
|
-
|
109
|
+
def run_with_each_line_ex(command)
|
110
|
+
output_queue = Thread::Queue.new
|
111
|
+
output_queue << [:command, JSON.dump(command)]
|
112
|
+
command = join_cmd(command)
|
113
|
+
Open3.popen3(command) do |_stdin, stdout, stderr, wait_thr|
|
114
|
+
stdout_thread = Thread.new do
|
115
|
+
until stdout.eof?
|
116
|
+
raw_line = stdout.gets
|
117
|
+
output_queue << [:stdout, raw_line]
|
118
|
+
end
|
119
|
+
rescue IOError
|
120
|
+
# ignore
|
121
|
+
end
|
122
|
+
stderr_thread = Thread.new do
|
123
|
+
until stderr.eof?
|
124
|
+
raw_line = stderr.gets
|
125
|
+
output_queue << [:stderr, raw_line]
|
126
|
+
end
|
127
|
+
rescue IOError
|
128
|
+
# ignore
|
129
|
+
end
|
130
|
+
Thread.new do
|
131
|
+
stdout_thread.join
|
132
|
+
stderr_thread.join
|
133
|
+
output_queue.close
|
134
|
+
end
|
135
|
+
yield(output_queue.pop) until output_queue.closed?
|
136
|
+
wait_thr.value # Process::Status object returned.
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
def stream_terraform(args, split_streams: false, &block)
|
141
|
+
status = if split_streams
|
142
|
+
run_with_each_line_ex(args, &block)
|
143
|
+
else
|
144
|
+
run_with_each_line(args, &block)
|
145
|
+
end
|
106
146
|
# status is a Process::Status
|
107
147
|
ResultStruct.new({
|
108
148
|
status: status.exitstatus,
|
@@ -121,7 +161,9 @@ module MuxTf
|
|
121
161
|
parsed_output: parsed_output
|
122
162
|
})
|
123
163
|
rescue JSON::ParserError
|
124
|
-
|
164
|
+
message = "Execution failed with exit code: #{result.status}"
|
165
|
+
message += "\nOutput:\n#{result.output}" if result.output != ""
|
166
|
+
fail_with message
|
125
167
|
end
|
126
168
|
end
|
127
169
|
end
|
data/lib/mux_tf/version.rb
CHANGED
data/lib/mux_tf.rb
CHANGED
@@ -20,17 +20,25 @@ require "pastel"
|
|
20
20
|
require "tty-prompt"
|
21
21
|
require "tty-table"
|
22
22
|
require "dotenv"
|
23
|
+
require "hashdiff"
|
24
|
+
require "awesome_print"
|
25
|
+
require "diff/lcs"
|
26
|
+
require "diff/lcs/string"
|
27
|
+
require "diff/lcs/hunk"
|
23
28
|
|
24
|
-
require_relative "
|
25
|
-
require_relative "
|
26
|
-
require_relative "
|
27
|
-
require_relative "
|
28
|
-
require_relative "
|
29
|
-
require_relative "
|
30
|
-
require_relative "
|
31
|
-
require_relative "
|
32
|
-
require_relative "
|
33
|
-
require_relative "
|
29
|
+
require_relative "mux_tf/version"
|
30
|
+
require_relative "mux_tf/coloring"
|
31
|
+
require_relative "mux_tf/plan_filename_generator"
|
32
|
+
require_relative "mux_tf/resource_tokenizer"
|
33
|
+
require_relative "mux_tf/cli"
|
34
|
+
require_relative "mux_tf/tmux"
|
35
|
+
require_relative "mux_tf/terraform_helpers"
|
36
|
+
require_relative "mux_tf/plan_formatter"
|
37
|
+
require_relative "mux_tf/version_check"
|
38
|
+
require_relative "mux_tf/yaml_cache"
|
39
|
+
require_relative "mux_tf/plan_summary_handler"
|
40
|
+
require_relative "mux_tf/plan_utils"
|
34
41
|
|
35
42
|
module MuxTf
|
43
|
+
ROOT = File.expand_path(File.join(__dir__, ".."))
|
36
44
|
end
|
data/mux_tf.gemspec
CHANGED
@@ -30,8 +30,10 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.require_paths = ["lib"]
|
31
31
|
|
32
32
|
spec.add_dependency "activesupport", "< 7.0.0"
|
33
|
+
spec.add_dependency "awesome_print"
|
34
|
+
spec.add_dependency "diff-lcs"
|
33
35
|
spec.add_dependency "dotenv"
|
34
|
-
spec.add_dependency "
|
36
|
+
spec.add_dependency "hashdiff"
|
35
37
|
spec.add_dependency "pastel"
|
36
38
|
spec.add_dependency "piotrb_cli_utils", "~> 0.1.0"
|
37
39
|
spec.add_dependency "stateful_parser", "~> 0.1.1"
|
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.
|
4
|
+
version: 0.14.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-
|
11
|
+
date: 2023-10-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -24,6 +24,34 @@ dependencies:
|
|
24
24
|
- - "<"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 7.0.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: awesome_print
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: diff-lcs
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
27
55
|
- !ruby/object:Gem::Dependency
|
28
56
|
name: dotenv
|
29
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,7 +67,7 @@ dependencies:
|
|
39
67
|
- !ruby/object:Gem::Version
|
40
68
|
version: '0'
|
41
69
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
70
|
+
name: hashdiff
|
43
71
|
requirement: !ruby/object:Gem::Requirement
|
44
72
|
requirements:
|
45
73
|
- - ">="
|
@@ -141,9 +169,11 @@ files:
|
|
141
169
|
- lib/mux_tf/cli/current.rb
|
142
170
|
- lib/mux_tf/cli/mux.rb
|
143
171
|
- lib/mux_tf/cli/plan_summary.rb
|
172
|
+
- lib/mux_tf/coloring.rb
|
144
173
|
- lib/mux_tf/plan_filename_generator.rb
|
145
174
|
- lib/mux_tf/plan_formatter.rb
|
146
175
|
- lib/mux_tf/plan_summary_handler.rb
|
176
|
+
- lib/mux_tf/plan_utils.rb
|
147
177
|
- lib/mux_tf/resource_tokenizer.rb
|
148
178
|
- lib/mux_tf/terraform_helpers.rb
|
149
179
|
- lib/mux_tf/tmux.rb
|