class Chef::Knife::Core::StatusPresenter
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 56 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 147 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 95 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 run_list = "#{node['run_list']}" if config[:run_list] 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 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 64 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