Module: Vagrant::Util::Retryable
- Included in:
- Communication::SSH, Driver::VirtualBoxBase, Hosts::BSD, Hosts::FreeBSD, Hosts::Linux
- Defined in:
- lib/vagrant/util/retryable.rb
Instance Method Summary collapse
-
#retryable(opts = nil) ⇒ Object
Retries a given block a specified number of times in the event the specified exception is raised.
Instance Method Details
#retryable(opts = nil) ⇒ Object
Retries a given block a specified number of times in the event the specified exception is raised. If the retries run out, the final exception is raised.
This code is adapted slightly from the following blog post: http://blog.codefront.net/2008/01/14/retrying-code-blocks-in-ruby-on-exceptions-whatever/
10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/vagrant/util/retryable.rb', line 10 def retryable(opts=nil) opts = { :tries => 1, :on => Exception }.merge(opts || {}) begin return yield rescue *opts[:on] if (opts[:tries] -= 1) > 0 sleep opts[:sleep].to_f if opts[:sleep] retry end raise end end |