Class: Chef::Formatters::ErrorInspectors::RunListExpansionErrorInspector

Inherits:
Object
  • Object
show all
Includes:
APIErrorFormatting
Defined in:
lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb

Constant Summary

Constants included from APIErrorFormatting

APIErrorFormatting::NETWORK_ERROR_CLASSES

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from APIErrorFormatting

#api_key, #clock_skew?, #describe_400_error, #describe_401_error, #describe_500_error, #describe_503_error, #describe_http_error, #describe_network_errors, #format_rest_error, #server_url, #username

Constructor Details

#initialize(node, exception) ⇒ RunListExpansionErrorInspector

Returns a new instance of RunListExpansionErrorInspector.



32
33
34
# File 'lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb', line 32

def initialize(node, exception)
  @node, @exception = node, exception
end

Instance Attribute Details

#exceptionObject (readonly)

Returns the value of attribute exception.



29
30
31
# File 'lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb', line 29

def exception
  @exception
end

#nodeObject (readonly)

Returns the value of attribute node.



30
31
32
# File 'lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb', line 30

def node
  @node
end

Instance Method Details

#add_explanation(error_description) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb', line 36

def add_explanation(error_description)
  case exception
  when Errno::ECONNREFUSED, Timeout::Error, Errno::ETIMEDOUT, SocketError
    error_description.section("Networking Error:",<<-E)
#{exception.message}

Your chef_server_url may be misconfigured, or the network could be down.
E
  when Net::HTTPServerException, Net::HTTPFatalError
    humanize_http_exception(error_description)
  when Chef::Exceptions::MissingRole
    describe_missing_role(error_description)
  else
    error_description.section("Unexpected Error:","#{exception.class.name}: #{exception.message}")
  end
end

#configObject



69
70
71
# File 'lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb', line 69

def config
  Chef::Config
end

#describe_missing_role(error_description) ⇒ Object



53
54
55
56
57
# File 'lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb', line 53

def describe_missing_role(error_description)
  error_description.section("Missing Role(s) in Run List:", missing_roles_explained)
  original_run_list = node.run_list.map {|item| "* #{item}"}.join("\n")
  error_description.section("Original Run List", original_run_list)
end

#humanize_http_exception(error_description) ⇒ Object



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb', line 73

def humanize_http_exception(error_description)
  response = exception.response
  case response
  when Net::HTTPUnauthorized
    error_description.section("Authentication Error:",<<-E)
Failed to authenticate to the chef server (http 401).
E

    error_description.section("Server Response:", format_rest_error)
    error_description.section("Relevant Config Settings:",<<-E)
chef_server_url   "#{server_url}"
node_name         "#{username}"
client_key        "#{api_key}"

If these settings are correct, your client_key may be invalid.
E
  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 one or more of your roles (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::HTTPInternalServerError
    error_description.section("Unknown Server Error:",<<-E)
The server had a fatal error attempting to load a role.
E
    error_description.section("Server Response:", format_rest_error)
  when Net::HTTPBadGateway, Net::HTTPServiceUnavailable
    error_description.section("Server Unavailable","The Chef Server is temporarily unavailable")
    error_description.section("Server Response:", format_rest_error)
  else
    error_description.section("Unexpected API Request Failure:", format_rest_error)
  end
end

#missing_roles_explainedObject



59
60
61
62
63
# File 'lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb', line 59

def missing_roles_explained
  run_list_expansion.missing_roles_with_including_role.map do |role, includer|
    "* #{role} included by '#{includer}'"
  end.join("\n")
end

#run_list_expansionObject



65
66
67
# File 'lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb', line 65

def run_list_expansion
  exception.expansion
end