lib/choria/colt/cli.rb in choria-colt-0.7.0 vs lib/choria/colt/cli.rb in choria-colt-0.8.0
- old
+ new
@@ -42,11 +42,11 @@
task_name = args.shift
targets, targets_with_classes = extract_targets_and_filters_from_options
environment = options['environment']
results = colt.run_bolt_task task_name, input: input, targets: targets, targets_with_classes: targets_with_classes, environment: environment do |result|
- $stdout.puts formatter.process_result(result)
+ $stdout.puts formatter.format(result)
end
File.write 'last_run.json', JSON.pretty_generate(results)
rescue Choria::Orchestrator::Error
# This error is already logged and displayed.
@@ -84,16 +84,28 @@
long_desc <<~DESC
Show results from a previously ran task.
A task ID is required to request Choria services and retrieve results.
DESC
+ option :style,
+ aliases: ['-S'],
+ desc: "Output style; can be 'continuous' or 'summary'",
+ default: 'summary'
define_targets_and_filters_options
def status(task_id)
+ supported_styles = %i[summary continous]
+ raise Thor::Error, "Invalid style: '#{options['style']}' (available: #{supported_styles})" unless supported_styles.include? options['style'].to_sym
+
targets, targets_with_classes = extract_targets_and_filters_from_options
- results = colt.wait_bolt_task(task_id, targets: targets, targets_with_classes: targets_with_classes) do |result|
- $stdout.puts formatter.process_result(result)
+ case options['style']
+ when 'continous'
+ results = colt.wait_bolt_task(task_id, targets: targets, targets_with_classes: targets_with_classes) do |result|
+ $stdout.puts formatter.format(result)
+ end
+ when 'summary'
+ show_summarized_status(task_id, targets: targets, targets_with_classes: targets_with_classes)
end
File.write 'last_run.json', JSON.pretty_generate(results)
rescue Choria::Orchestrator::Error
# This error is already logged and displayed.
@@ -109,10 +121,11 @@
config.handlers = [
[:console, { output: $stderr, level: options['log_level'].to_sym }],
[:stream, { output: File.open('colt-debug.log', 'a'), level: :debug }],
]
config.metadata = %i[date time]
+ Choria::Colt::Debugger.enabled = true
end
end
def formatter
@formatter ||= Formatter.new(colored: $stdout.tty?)
@@ -181,9 +194,36 @@
#{metadata['description']}
OUTPUT
output += " Default: #{metadata['default']}" unless metadata['default'].nil?
output
end.join "\n"
+ end
+
+ def summarize(results)
+ results_grouped_by_result_content = results.group_by { |result| result[:result] }
+ results_grouped_by_result_content.each do |_content, grouped_results|
+ # Display each host
+ grouped_results.each do |result|
+ $stdout.puts formatter.format(result).host
+ end
+ # Display the result content
+ content = formatter.format(grouped_results.first).content
+ content = pastel.bright_white '(no output)' if content.nil? || content.empty?
+ $stdout.puts content
+ end
+ end
+
+ def show_summarized_status(task_id, targets:, targets_with_classes:)
+ require 'tty-progressbar'
+
+ bar = TTY::ProgressBar.new('[:bar] :current/:total ET::elapsed ETA::eta :rate/s')
+ results = colt.wait_bolt_task(task_id, targets: targets, targets_with_classes: targets_with_classes) do |_result, count, total_count|
+ bar.update total: total_count
+ bar.current = count
+ end
+
+ puts "\nSummary:"
+ summarize(results)
end
def pastel
@pastel ||= _pastel
end