class Chef::Formatters::ErrorInspectors::NodeLoadErrorInspector
APIErrorInspector¶ ↑
Wraps exceptions caused by API calls to the server.
Attributes
config[R]
exception[R]
node_name[R]
Public Class Methods
new(node_name, exception, config)
click to toggle source
# File lib/chef/formatters/error_inspectors/node_load_error_inspector.rb, line 36 def initialize(node_name, exception, config) @node_name = node_name @exception = exception @config = config end
Public Instance Methods
add_explanation(error_description)
click to toggle source
# File lib/chef/formatters/error_inspectors/node_load_error_inspector.rb, line 42 def add_explanation(error_description) case exception when Net::HTTPClientException, Net::HTTPFatalError humanize_http_exception(error_description) when Chef::Exceptions::PrivateKeyMissing error_description.section("Private Key Not Found:", <<~E) Your private key could not be loaded. If the key file exists, ensure that it is readable by #{ChefUtils::Dist::Infra::PRODUCT}. E error_description.section("Relevant Config Settings:", <<~E) client_key "#{api_key}" E when EOFError describe_eof_error(error_description) when *NETWORK_ERROR_CLASSES describe_network_errors(error_description) else error_description.section("Unexpected Error:", "#{exception.class.name}: #{exception.message}") end end
api_key()
click to toggle source
# File lib/chef/formatters/error_inspectors/node_load_error_inspector.rb, line 113 def api_key config[:client_key] end
clock_skew?()
click to toggle source
# File lib/chef/formatters/error_inspectors/node_load_error_inspector.rb, line 121 def clock_skew? exception.response.body =~ /synchronize the clock/i end
describe_404_error(error_description)
click to toggle source
Custom 404 error messaging. Users sometimes see 404s when they have misconfigured server URLs, and the wrong one redirects to the new one, e.g., PUT wrong.url/nodes/node-name becomes a GET after a redirect.
# File lib/chef/formatters/error_inspectors/node_load_error_inspector.rb, line 100 def describe_404_error(error_description) error_description.section("Resource Not Found:", <<~E) The #{ChefUtils::Dist::Server::PRODUCT} returned a HTTP 404. This usually indicates that your chef_server_url is incorrect. E error_description.section("Relevant Config Settings:", <<~E) chef_server_url "#{server_url}" E end
humanize_http_exception(error_description)
click to toggle source
# File lib/chef/formatters/error_inspectors/node_load_error_inspector.rb, line 63 def humanize_http_exception(error_description) response = exception.response case response when Net::HTTPUnauthorized # TODO: this is where you'd see conflicts b/c of username/clientname stuff describe_401_error(error_description) when Net::HTTPForbidden # TODO: we're rescuing errors from Node.find_or_create # * could be no write on nodes container # * could be no read on the node error_description.section("Authorization Error", <<~E) Your client is not authorized to load the node data (HTTP 403). E error_description.section("Server Response:", format_rest_error) error_description.section("Possible Causes:", <<~E) * Your client (#{username}) may have misconfigured authorization permissions. E when Net::HTTPBadRequest describe_400_error(error_description) when Net::HTTPNotFound describe_404_error(error_description) when Net::HTTPInternalServerError describe_500_error(error_description) when Net::HTTPBadGateway, Net::HTTPServiceUnavailable describe_503_error(error_description) when Net::HTTPNotAcceptable describe_406_error(error_description, response) else describe_http_error(error_description) end end
server_url()
click to toggle source
# File lib/chef/formatters/error_inspectors/node_load_error_inspector.rb, line 117 def server_url config[:chef_server_url] end
username()
click to toggle source
# File lib/chef/formatters/error_inspectors/node_load_error_inspector.rb, line 109 def username config[:node_name] end