SSHExec raises proper exception if SSH is not yet ready

This commit is contained in:
Mitchell Hashimoto 2012-08-06 10:29:25 -07:00
parent 8d50c4774e
commit b1ced46d7c
4 changed files with 23 additions and 2 deletions

View File

@ -21,8 +21,10 @@ module Vagrant
def call(env)
# Grab the SSH info from the machine
info = env[:machine].ssh_info
# XXX: Raise an exception if info is nil, since that means that
# SSH is not ready.
# If the result is nil, then the machine is telling us that it is
# not yet ready for SSH, so we raise this exception.
raise Errors::SSHNotReady if info.nil?
# Check the SSH key permissions
SSH.check_key_permissions(info[:private_key_path])

View File

@ -356,6 +356,10 @@ module Vagrant
error_key(:ssh_key_type_not_supported)
end
class SSHNotReady < VagrantError
error_key(:ssh_not_ready)
end
class SSHPortNotDetected < VagrantError
status_code(50)
error_key(:ssh_port_not_detected)

View File

@ -156,6 +156,12 @@ en:
The private key you're attempting to use with this Vagrant box uses
an unsupported encryption type. The SSH library Vagrant uses does not support
this key type. Please use `ssh-rsa` or `ssh-dss` instead.
ssh_not_ready: |-
The provider for this Vagrant-managed machine is reporting that it
is not yet ready for SSH. Depending on your provider this can carry
different meanings. Make sure your machine is created and running and
try again. If you continue to get this error message, please view the
documentation for the provider you're using.
ssh_port_not_detected: |-
Vagrant couldn't determine the SSH port for your VM! Vagrant attempts to
automatically find a forwarded port that matches your `config.ssh.guest_port`

View File

@ -20,6 +20,15 @@ describe Vagrant::Action::Builtin::SSHExec do
ssh_klass.stub(:exec)
end
it "should raise an exception if SSH is not ready" do
not_ready_machine = double("machine")
not_ready_machine.stub(:ssh_info).and_return(nil)
env[:machine] = not_ready_machine
expect { described_class.new(app, env).call(env) }.
to raise_error(Vagrant::Errors::SSHNotReady)
end
it "should check key permissions then exec" do
ssh_klass.should_receive(:check_key_permissions).
with(machine_ssh_info[:private_key_path]).