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
permalink #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
permalink #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 |
permalink #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 |
permalink #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
permalink #add_explanation(error_description) ⇒ Object
[View source]
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 |
permalink #api_key ⇒ Object
[View source]
113 114 115 |
# File 'lib/chef/formatters/error_inspectors/node_load_error_inspector.rb', line 113 def api_key config[:client_key] end |
permalink #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 |
permalink #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 |
permalink #humanize_http_exception(error_description) ⇒ Object
[View source]
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 |
permalink #server_url ⇒ Object
[View source]
117 118 119 |
# File 'lib/chef/formatters/error_inspectors/node_load_error_inspector.rb', line 117 def server_url config[:chef_server_url] end |
permalink #username ⇒ Object
[View source]
109 110 111 |
# File 'lib/chef/formatters/error_inspectors/node_load_error_inspector.rb', line 109 def username config[:node_name] end |