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_406_error, #describe_500_error, #describe_503_error, #describe_eof_error, #describe_http_error, #describe_network_errors, #format_rest_error, #safe_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
52
53
# 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)
  when EOFError
    describe_eof_error(error_description)
  else
    error_description.section("Unexpected Error:", "#{exception.class.name}: #{exception.message}")
  end
end

#configObject


71
72
73
# File 'lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb', line 71

def config
  Chef::Config
end

#describe_missing_role(error_description) ⇒ Object


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

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


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
113
114
115
116
# File 'lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb', line 75

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::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 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


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

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


67
68
69
# File 'lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb', line 67

def run_list_expansion
  exception.expansion
end