diff --git a/lib/fog/aws/models/compute/server.rb b/lib/fog/aws/models/compute/server.rb index 329f909af..39d3d8f9e 100644 --- a/lib/fog/aws/models/compute/server.rb +++ b/lib/fog/aws/models/compute/server.rb @@ -167,7 +167,7 @@ module Fog Timeout::timeout(4) do Fog::SSH.new(ip_address, username, credentials).run(commands) end - rescue Timeout::Error + rescue Net::SSH::AuthenticationFailed, Timeout::Error retry end end diff --git a/lib/fog/aws/models/compute/servers.rb b/lib/fog/aws/models/compute/servers.rb index 2fad63ecc..173fbe524 100644 --- a/lib/fog/aws/models/compute/servers.rb +++ b/lib/fog/aws/models/compute/servers.rb @@ -98,19 +98,7 @@ module Fog end server.save - # eventual consistency sometimes means a delay before it appears - retries = 3 - begin - server.wait_for { ready? } - rescue Fog::Errors::Error => error - sleep(1) - retries -= 1 - if retries > 0 - retry - else - raise error - end - end + server.wait_for { ready? } server.setup(:key_data => [server.private_key]) server end diff --git a/lib/fog/core/model.rb b/lib/fog/core/model.rb index 47b792362..bc3213de8 100644 --- a/lib/fog/core/model.rb +++ b/lib/fog/core/model.rb @@ -39,7 +39,15 @@ module Fog def wait_for(timeout=600, interval=1, &block) reload Fog.wait_for(timeout, interval) do - reload or raise Fog::Errors::Error.new("Reload failed, #{self.class} #{self.identity} went away.") + retries = 3 + if reload + retries = 3 + elsif retries > 0 + retries -= 1 + sleep(1) + elsif retries == 0 + raise Fog::Errors::Error.new("Reload failed, #{self.class} #{self.identity} went away.") + end instance_eval(&block) end end