class Chef::Formatters::ErrorInspectors::RegistrationErrorInspector
RegistrationErrorInspector
¶ ↑
Wraps exceptions that occur during the client registration process and suggests possible causes.
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/registration_error_inspector.rb, line 19 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/registration_error_inspector.rb, line 25 def add_explanation(error_description) case exception when Net::HTTPClientException, Net::HTTPFatalError humanize_http_exception(error_description) when Errno::ECONNREFUSED, Timeout::Error, Errno::ETIMEDOUT, SocketError error_description.section("Network Error:", <<~E) There was a network error connecting to the #{ChefUtils::Dist::Server::PRODUCT}: #{exception.message} E error_description.section("Relevant Config Settings:", <<~E) chef_server_url "#{server_url}" If your chef_server_url is correct, your network could be down. E 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) validation_key "#{api_key}" E when Chef::Exceptions::InvalidRedirect error_description.section("Invalid Redirect:", <<~E) Change your #{ChefUtils::Dist::Server::PRODUCT} location in client.rb to the #{ChefUtils::Dist::Server::PRODUCT}'s FQDN to avoid unwanted redirections. E when EOFError describe_eof_error(error_description) else "#{exception.class.name}: #{exception.message}" end end
api_key()
click to toggle source
# File lib/chef/formatters/error_inspectors/registration_error_inspector.rb, line 122 def api_key config[:validation_key] # config[:client_key] end
clock_skew?()
click to toggle source
# File lib/chef/formatters/error_inspectors/registration_error_inspector.rb, line 131 def clock_skew? exception.response.body =~ /synchronize the clock/i end
format_rest_error()
click to toggle source
Parses JSON from the error response sent by Chef
Server and returns the error message
# File lib/chef/formatters/error_inspectors/registration_error_inspector.rb, line 139 def format_rest_error Array(Chef::JSONCompat.from_json(exception.response.body)["error"]).join("; ") rescue Exception exception.response.body end
humanize_http_exception(error_description)
click to toggle source
# File lib/chef/formatters/error_inspectors/registration_error_inspector.rb, line 58 def humanize_http_exception(error_description) response = exception.response case response when Net::HTTPUnauthorized if clock_skew? error_description.section("Authentication Error:", <<~E) Failed to authenticate to the #{ChefUtils::Dist::Server::PRODUCT} (http 401). The request failed because your clock has drifted by more than 15 minutes. Syncing your clock to an NTP Time source should resolve the issue. E else error_description.section("Authentication Error:", <<~E) Failed to authenticate to the #{ChefUtils::Dist::Server::PRODUCT} (http 401). E error_description.section("Server Response:", format_rest_error) error_description.section("Relevant Config Settings:", <<~E) chef_server_url "#{server_url}" validation_client_name "#{username}" validation_key "#{api_key}" If these settings are correct, your validation_key may be invalid. E end when Net::HTTPForbidden error_description.section("Authorization Error:", <<~E) Your validation client is not authorized to create the client for this node on the #{ChefUtils::Dist::Server::PRODUCT} (HTTP 403). E error_description.section("Possible Causes:", <<~E) * There may already be a client named "#{config[:node_name]}" * Your validation client (#{username}) may have misconfigured authorization permissions. E when Net::HTTPBadRequest error_description.section("Invalid Request Data:", <<~E) The data in your request was invalid (HTTP 400). E error_description.section("Server Response:", format_rest_error) when Net::HTTPNotFound error_description.section("Resource Not Found:", <<~E) The #{ChefUtils::Dist::Server::PRODUCT} returned a HTTP 404. This usually indicates that your chef_server_url configuration is incorrect. E error_description.section("Relevant Config Settings:", <<~E) chef_server_url "#{server_url}" E when Net::HTTPNotAcceptable describe_406_error(error_description, response) when Net::HTTPInternalServerError error_description.section("Unknown Server Error:", <<~E) The server had a fatal error attempting to load the node data. E error_description.section("Server Response:", format_rest_error) when Net::HTTPBadGateway, Net::HTTPServiceUnavailable error_description.section("Server Unavailable", "The #{ChefUtils::Dist::Server::PRODUCT} is temporarily unavailable") error_description.section("Server Response:", format_rest_error) else error_description.section("Unexpected API Request Failure:", format_rest_error) end end
server_url()
click to toggle source
# File lib/chef/formatters/error_inspectors/registration_error_inspector.rb, line 127 def server_url config[:chef_server_url] end
username()
click to toggle source
# File lib/chef/formatters/error_inspectors/registration_error_inspector.rb, line 117 def username # config[:node_name] config[:validation_client_name] end