define :fallback, :resource => nil, :fallback_options => [] do old_action = params[:resource].action params[:resource].action :nothing ruby_block "Fallback for #{params[:resource].to_s}" do block do begin params[:resource].run_action old_action rescue => e Chef::Log.warn "#{params[:resource]} failed: #{e.class}: #{e}" if params[:fallback_options].empty? raise else params[:fallback_options].shift.each {|k, v| params[:resource].send(k, v)} retry end end end end end