class Chef::Knife::Core::StatusPresenter
A customized presenter for Chef::Node
objects. Supports variable-length output formats for displaying node data
Public Instance Methods
format(data)
click to toggle source
Calls superclass method
Chef::Knife::Core::GenericPresenter#format
# File lib/chef/knife/core/status_presenter.rb, line 55 def format(data) if parse_format_option == :json summarize_json(data) else super end end
key(key_text)
click to toggle source
# File lib/chef/knife/core/status_presenter.rb, line 153 def key(key_text) ui.color(key_text, :cyan) end
summarize(list)
click to toggle source
Converts a Chef::Node
object to a string suitable for output to a terminal. If config or config are set the volume of output is adjusted accordingly. Uses colors if enabled in the ui object.
# File lib/chef/knife/core/status_presenter.rb, line 94 def summarize(list) summarized = "" list.each do |data| node = data # special case ec2 with their split horizon whatsis. ip = (node[:ec2] && node[:ec2][:public_ipv4]) || node[:ipaddress] fqdn = (node[:ec2] && node[:ec2][:public_hostname]) || node[:fqdn] name = node["name"] || node.name if config[:run_list] if config[:long_output] run_list = node.run_list.map { |rl| "#{rl.type}[#{rl.name}]" } else run_list = node["run_list"] end end line_parts = Array.new if node["ohai_time"] hours, minutes, seconds = time_difference_in_hms(node["ohai_time"]) hours_text = "#{hours} hour#{hours == 1 ? ' ' : 's'}" minutes_text = "#{minutes} minute#{minutes == 1 ? ' ' : 's'}" seconds_text = "#{seconds} second#{seconds == 1 ? ' ' : 's'}" if hours > 24 color = :red text = hours_text elsif hours >= 1 color = :yellow text = hours_text elsif minutes >= 1 color = :green text = minutes_text else color = :green text = seconds_text end line_parts << @ui.color(text, color) + " ago" << name else line_parts << "Node #{name} has not yet converged" end line_parts << fqdn if fqdn line_parts << ip if ip line_parts << run_list.to_s if run_list if node["platform"] platform = node["platform"].dup if node["platform_version"] platform << " #{node['platform_version']}" end line_parts << platform end summarized = summarized + line_parts.join(", ") + ".\n" end summarized end
summarize_json(list)
click to toggle source
# File lib/chef/knife/core/status_presenter.rb, line 63 def summarize_json(list) result_list = [] list.each do |node| result = {} result["name"] = node["name"] || node.name result["chef_environment"] = node["chef_environment"] ip = (node["ec2"] && node["ec2"]["public_ipv4"]) || node["ipaddress"] fqdn = (node["ec2"] && node["ec2"]["public_hostname"]) || node["fqdn"] result["ip"] = ip if ip result["fqdn"] = fqdn if fqdn result["run_list"] = node.run_list if config["run_list"] result["ohai_time"] = node["ohai_time"] result["platform"] = node["platform"] if node["platform"] result["platform_version"] = node["platform_version"] if node["platform_version"] if config[:long_output] result["default"] = node.default_attrs result["override"] = node.override_attrs result["automatic"] = node.automatic_attrs end result_list << result end Chef::JSONCompat.to_json_pretty(result_list) end
time_difference_in_hms(unix_time)
click to toggle source
@private @todo this is duplicated from StatusHelper in the Webui. dedup.
# File lib/chef/knife/core/status_presenter.rb, line 159 def time_difference_in_hms(unix_time) now = Time.now.to_i difference = now - unix_time.to_i hours = (difference / 3600).to_i difference = difference % 3600 minutes = (difference / 60).to_i seconds = (difference % 60) [hours, minutes, seconds] end