Exception: Chef::Exceptions::MultipleFailures

Inherits:
StandardError
  • Object
show all
Defined in:
lib/chef/exceptions.rb

Overview

Exception class for collecting multiple failures. Used when running delayed notifications so that chef can process each delayed notification even if chef client or other notifications fail.

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ MultipleFailures

Returns a new instance of MultipleFailures.



202
203
204
205
# File 'lib/chef/exceptions.rb', line 202

def initialize(*args)
  super
  @all_failures = []
end

Instance Method Details

#client_run_failure(exception) ⇒ Object



214
215
216
217
# File 'lib/chef/exceptions.rb', line 214

def client_run_failure(exception)
  set_backtrace(exception.backtrace)
  @all_failures << [ "chef run", exception ]
end

#empty?Boolean

Returns:

  • (Boolean)


229
230
231
# File 'lib/chef/exceptions.rb', line 229

def empty?
  @all_failures.empty?
end

#for_raiseObject



233
234
235
236
237
238
239
# File 'lib/chef/exceptions.rb', line 233

def for_raise
  if @all_failures.size == 1
    @all_failures[0][1]
  else
    self
  end
end

#messageObject



207
208
209
210
211
212
# File 'lib/chef/exceptions.rb', line 207

def message
  base = "Multiple failures occurred:\n"
  @all_failures.inject(base) do |message, (location, error)|
    message << "* #{error.class} occurred in #{location}: #{error.message}\n"
  end
end

#notification_failure(exception) ⇒ Object



219
220
221
# File 'lib/chef/exceptions.rb', line 219

def notification_failure(exception)
  @all_failures << [ "delayed notification", exception ]
end

#raise!Object



223
224
225
226
227
# File 'lib/chef/exceptions.rb', line 223

def raise!
  unless empty?
    raise self.for_raise
  end
end