Class: Chef::Formatters::ErrorInspectors::NodeLoadErrorInspector
- Inherits:
-
Object
- Object
- Chef::Formatters::ErrorInspectors::NodeLoadErrorInspector
- Includes:
- APIErrorFormatting
- Defined in:
- lib/chef/formatters/error_inspectors/node_load_error_inspector.rb
Overview
APIErrorInspector
Wraps exceptions caused by API calls to the server.
Constant Summary
Constants included from APIErrorFormatting
APIErrorFormatting::NETWORK_ERROR_CLASSES
Instance Attribute Summary collapse
-
#config ⇒ Object
readonly
Returns the value of attribute config.
-
#exception ⇒ Object
readonly
Returns the value of attribute exception.
-
#node_name ⇒ Object
readonly
Returns the value of attribute node_name.
Instance Method Summary collapse
- #add_explanation(error_description) ⇒ Object
- #api_key ⇒ Object
- #clock_skew? ⇒ Boolean
-
#describe_404_error(error_description) ⇒ Object
Custom 404 error messaging.
- #humanize_http_exception(error_description) ⇒ Object
-
#initialize(node_name, exception, config) ⇒ NodeLoadErrorInspector
constructor
A new instance of NodeLoadErrorInspector.
- #server_url ⇒ Object
- #username ⇒ Object
Methods included from APIErrorFormatting
#describe_400_error, #describe_401_error, #describe_406_error, #describe_500_error, #describe_503_error, #describe_eof_error, #describe_http_error, #describe_network_errors, #format_rest_error, #safe_format_rest_error
Constructor Details
#initialize(node_name, exception, config) ⇒ NodeLoadErrorInspector
Returns a new instance of NodeLoadErrorInspector.
36 37 38 39 40 |
# 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 |
Instance Attribute Details
#config ⇒ Object (readonly)
Returns the value of attribute config.
34 35 36 |
# File 'lib/chef/formatters/error_inspectors/node_load_error_inspector.rb', line 34 def config @config end |
#exception ⇒ Object (readonly)
Returns the value of attribute exception.
32 33 34 |
# File 'lib/chef/formatters/error_inspectors/node_load_error_inspector.rb', line 32 def exception @exception end |
#node_name ⇒ Object (readonly)
Returns the value of attribute node_name.
33 34 35 |
# File 'lib/chef/formatters/error_inspectors/node_load_error_inspector.rb', line 33 def node_name @node_name end |
Instance Method Details
#add_explanation(error_description) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# 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.}") end end |
#api_key ⇒ Object
113 114 115 |
# File 'lib/chef/formatters/error_inspectors/node_load_error_inspector.rb', line 113 def api_key config[:client_key] end |
#clock_skew? ⇒ Boolean
121 122 123 |
# 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) ⇒ Object
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.
100 101 102 103 104 105 106 107 |
# 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) ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# 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 ⇒ Object
117 118 119 |
# File 'lib/chef/formatters/error_inspectors/node_load_error_inspector.rb', line 117 def server_url config[:chef_server_url] end |
#username ⇒ Object
109 110 111 |
# File 'lib/chef/formatters/error_inspectors/node_load_error_inspector.rb', line 109 def username config[:node_name] end |