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.



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

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

Instance Method Details

#client_run_failure(exception) ⇒ Object



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

def client_run_failure(exception)
  set_backtrace(exception.backtrace)
  @all_failures << [ "#{Chef::Dist::PRODUCT} run", exception ]
end

#empty?Boolean

Returns:

  • (Boolean)


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

def empty?
  @all_failures.empty?
end

#for_raiseObject



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

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

#messageObject



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

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



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

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

#raise!Object



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

def raise!
  unless empty?
    raise for_raise
  end
end