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.



246
247
248
249
# File 'lib/chef/exceptions.rb', line 246

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

Instance Method Details

#client_run_failure(exception) ⇒ Object



258
259
260
261
# File 'lib/chef/exceptions.rb', line 258

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

#empty?Boolean

Returns:

  • (Boolean)


273
274
275
# File 'lib/chef/exceptions.rb', line 273

def empty?
  @all_failures.empty?
end

#for_raiseObject



277
278
279
280
281
282
283
# File 'lib/chef/exceptions.rb', line 277

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

#messageObject



251
252
253
254
255
256
# File 'lib/chef/exceptions.rb', line 251

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



263
264
265
# File 'lib/chef/exceptions.rb', line 263

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

#raise!Object



267
268
269
270
271
# File 'lib/chef/exceptions.rb', line 267

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