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


288
289
290
291
# File 'lib/chef/exceptions.rb', line 288

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

Instance Method Details

#client_run_failure(exception) ⇒ Object


300
301
302
303
# File 'lib/chef/exceptions.rb', line 300

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

#empty?Boolean

Returns:

  • (Boolean)

315
316
317
# File 'lib/chef/exceptions.rb', line 315

def empty?
  @all_failures.empty?
end

#for_raiseObject


319
320
321
322
323
324
325
# File 'lib/chef/exceptions.rb', line 319

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

#messageObject


293
294
295
296
297
298
# File 'lib/chef/exceptions.rb', line 293

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


305
306
307
# File 'lib/chef/exceptions.rb', line 305

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

#raise!Object


309
310
311
312
313
# File 'lib/chef/exceptions.rb', line 309

def raise!
  unless empty?
    raise for_raise
  end
end