Primary VM is SSH by default on call to `vagrant ssh`

This commit is contained in:
Mitchell Hashimoto 2010-05-27 23:06:57 -07:00
parent 687b925d2e
commit 5f57766365
3 changed files with 27 additions and 4 deletions

View File

@ -16,11 +16,13 @@ module Vagrant
def ssh_connect(name) def ssh_connect(name)
if name.nil? && env.multivm? if name.nil? && env.multivm?
if env.primary_vm.nil?
error_and_exit(:ssh_multivm) error_and_exit(:ssh_multivm)
return # for tests return # for tests
end end
end
vm = name.nil? ? env.vms.values.first : env.vms[name.to_sym] vm = name.nil? ? env.primary_vm : env.vms[name.to_sym]
if vm.nil? if vm.nil?
error_and_exit(:unknown_vm, :vm => name) error_and_exit(:unknown_vm, :vm => name)
return # for tests return # for tests

View File

@ -153,6 +153,14 @@
specific VM must be specified. This can be done by calling specific VM must be specified. This can be done by calling
`vagrant ssh NAME` where NAME is a valid VM represented by `vagrant ssh NAME` where NAME is a valid VM represented by
your Vagrantfile. your Vagrantfile.
Alternatively, if you mark one of your VMs as 'primary,'
then Vagrant will default to that VM. This can be done by
specifying `:primary => true` when defining the VM. Example:
config.vm.define(:foo, :primary => true) do |config|
...
end
:ssh_config_multivm: |- :ssh_config_multivm: |-
Because this Vagrant environment represents multiple VMs, a Because this Vagrant environment represents multiple VMs, a
specific VM must be specified. This can be done by calling specific VM must be specified. This can be done by calling

View File

@ -30,12 +30,25 @@ class CommandsSSHTest < Test::Unit::TestCase
@env.stubs(:multivm?).returns(false) @env.stubs(:multivm?).returns(false)
end end
should "error and exit if no VM is specified and multivm" do should "error and exit if no VM is specified and multivm and no primary VM" do
@env.stubs(:multivm?).returns(true) @env.stubs(:multivm?).returns(true)
@env.stubs(:primary_vm).returns(nil)
@instance.expects(:error_and_exit).with(:ssh_multivm).once @instance.expects(:error_and_exit).with(:ssh_multivm).once
@instance.ssh_connect(nil) @instance.ssh_connect(nil)
end end
should "use the primary VM if it exists and no name is specified" do
vm = mock("vm")
ssh = mock("ssh")
vm.stubs(:created?).returns(true)
vm.stubs(:ssh).returns(ssh)
@env.stubs(:multivm?).returns(true)
@env.stubs(:primary_vm).returns(vm)
ssh.expects(:connect).once
@instance.ssh_connect(nil)
end
should "error and exit if VM is nil" do should "error and exit if VM is nil" do
@instance.expects(:error_and_exit).with(:unknown_vm, :vm => :foo).once @instance.expects(:error_and_exit).with(:unknown_vm, :vm => :foo).once
@instance.ssh_connect(:foo) @instance.ssh_connect(:foo)