Improve the SSH ready? check [GH-841]
This commit is contained in:
parent
c9d1110b0e
commit
2ed6695f78
|
@ -1,6 +1,6 @@
|
||||||
## 1.1.0 (unreleased)
|
## 1.1.0 (unreleased)
|
||||||
|
|
||||||
|
- Improve the SSH "ready?" check. [GH-841]
|
||||||
|
|
||||||
## 1.0.2 (March 25, 2012)
|
## 1.0.2 (March 25, 2012)
|
||||||
|
|
||||||
|
|
|
@ -25,16 +25,15 @@ module Vagrant
|
||||||
def ready?
|
def ready?
|
||||||
@logger.debug("Checking whether SSH is ready...")
|
@logger.debug("Checking whether SSH is ready...")
|
||||||
|
|
||||||
Timeout.timeout(@vm.config.ssh.timeout) do
|
# Attempt to connect. This will raise an exception if it fails.
|
||||||
connect
|
connect
|
||||||
end
|
|
||||||
|
|
||||||
# If we reached this point then we successfully connected
|
# If we reached this point then we successfully connected
|
||||||
@logger.info("SSH is ready!")
|
@logger.info("SSH is ready!")
|
||||||
true
|
true
|
||||||
rescue Timeout::Error, Errors::SSHConnectionRefused, Net::SSH::Disconnect => e
|
rescue Errors::VagrantError => e
|
||||||
# The above errors represent various reasons that SSH may not be
|
# We catch a `VagrantError` which would signal that something went
|
||||||
# ready yet. Return false.
|
# wrong expectedly in the `connect`, which means we didn't connect.
|
||||||
@logger.info("SSH not up: #{e.inspect}")
|
@logger.info("SSH not up: #{e.inspect}")
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
@ -131,11 +130,16 @@ module Vagrant
|
||||||
# Connect to SSH, giving it a few tries
|
# Connect to SSH, giving it a few tries
|
||||||
connection = nil
|
connection = nil
|
||||||
begin
|
begin
|
||||||
@logger.info("Connecting to SSH: #{ssh_info[:host]}:#{ssh_info[:port]}")
|
exceptions = [Errno::ECONNREFUSED, Net::SSH::Disconnect, Timeout::Error]
|
||||||
exceptions = [Errno::ECONNREFUSED, Net::SSH::Disconnect]
|
|
||||||
connection = retryable(:tries => @vm.config.ssh.max_tries, :on => exceptions) do
|
connection = retryable(:tries => @vm.config.ssh.max_tries, :on => exceptions) do
|
||||||
Net::SSH.start(ssh_info[:host], ssh_info[:username], opts)
|
Timeout.timeout(@vm.config.ssh.timeout) do
|
||||||
|
@logger.info("Attempting to connect to SSH: #{ssh_info[:host]}:#{ssh_info[:port]}")
|
||||||
|
Net::SSH.start(ssh_info[:host], ssh_info[:username], opts)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
rescue Timeout::Error
|
||||||
|
# This happens if we continued to timeout when attempting to connect.
|
||||||
|
raise Errors::SSHConnectionTimeout
|
||||||
rescue Net::SSH::AuthenticationFailed
|
rescue Net::SSH::AuthenticationFailed
|
||||||
# This happens if authentication failed. We wrap the error in our
|
# This happens if authentication failed. We wrap the error in our
|
||||||
# own exception.
|
# own exception.
|
||||||
|
|
|
@ -313,6 +313,11 @@ module Vagrant
|
||||||
error_key(:ssh_connection_refused)
|
error_key(:ssh_connection_refused)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class SSHConnectionTimeout < VagrantError
|
||||||
|
status_code(78)
|
||||||
|
error_key(:ssh_connection_timeout)
|
||||||
|
end
|
||||||
|
|
||||||
class SSHKeyBadPermissions < VagrantError
|
class SSHKeyBadPermissions < VagrantError
|
||||||
status_code(12)
|
status_code(12)
|
||||||
error_key(:ssh_key_bad_permissions)
|
error_key(:ssh_key_bad_permissions)
|
||||||
|
|
|
@ -117,6 +117,11 @@ en:
|
||||||
If that doesn't work, destroy your VM and recreate it with a `vagrant destroy`
|
If that doesn't work, destroy your VM and recreate it with a `vagrant destroy`
|
||||||
followed by a `vagrant up`. If that doesn't work, contact a Vagrant
|
followed by a `vagrant up`. If that doesn't work, contact a Vagrant
|
||||||
maintainer (support channels listed on the website) for more assistance.
|
maintainer (support channels listed on the website) for more assistance.
|
||||||
|
ssh_connection_timeout: |-
|
||||||
|
Vagrant timed out while attempting to connect via SSH. This usually
|
||||||
|
means that the VM booted, but there are issues with the SSH configuration
|
||||||
|
or network connectivity issues. Please try to `vagrant reload` or
|
||||||
|
`vagrant up` again.
|
||||||
ssh_key_bad_permissions: |-
|
ssh_key_bad_permissions: |-
|
||||||
The private key to connect to this box via SSH has invalid permissions
|
The private key to connect to this box via SSH has invalid permissions
|
||||||
set on it. The permissions of the private key should be set to 0600, otherwise SSH will
|
set on it. The permissions of the private key should be set to 0600, otherwise SSH will
|
||||||
|
|
Loading…
Reference in New Issue