Merge remote branch 'remotes/upstream/master'

Conflicts:
	Gemfile.lock
This commit is contained in:
Michael Bearne 2010-12-21 10:09:33 +00:00
commit 809250861d
9 changed files with 87 additions and 102 deletions

3
.gitignore vendored
View File

@ -10,3 +10,6 @@ _site/*
.yardoc/ .yardoc/
doc/ doc/
tags tags
Gemfile.lock
.idea/*
*.iml

View File

@ -8,6 +8,8 @@
- Arbitrary options to puppet binary can be set with `config.puppet.options`. [GH-242] - Arbitrary options to puppet binary can be set with `config.puppet.options`. [GH-242]
- BSD hosts use proper GNU sed syntax for clearing NFS shares. [GH-243] - BSD hosts use proper GNU sed syntax for clearing NFS shares. [GH-243]
- Enumerate VMs in a multi-VM environment in order they were defined. [GH-244] - Enumerate VMs in a multi-VM environment in order they were defined. [GH-244]
- Check for VM boot changed to use `timeout` library, which works better with Windows.
- Show special error if VirtualBox not detected on 64-bit Windows.
## 0.6.8 (November 30, 2010) ## 0.6.8 (November 30, 2010)

View File

@ -1,76 +0,0 @@
GIT
remote: git://github.com/mitchellh/virtualbox.git
revision: c79de55b05dd5703fa157e9900efecaaf1da5861
specs:
virtualbox (0.7.8.dev)
ffi (~> 0.6.3)
PATH
remote: .
specs:
vagrant (0.6.9.dev)
archive-tar-minitar (= 0.5.2)
erubis (~> 2.6.6)
i18n (~> 0.4.1)
json (~> 1.4.6)
mario (~> 0.0.6)
net-scp (~> 1.0.3)
net-ssh (~> 2.0.23)
thor (~> 0.14.2)
virtualbox (~> 0.7.6)
GEM
remote: http://rubygems.org/
specs:
abstract (1.0.0)
archive-tar-minitar (0.5.2)
bluecloth (2.0.9)
columnize (0.3.2)
contest (0.1.2)
erubis (2.6.6)
abstract (>= 1.0.0)
ffi (0.6.3)
rake (>= 0.8.7)
i18n (0.4.2)
json (1.4.6)
linecache (0.43)
linecache19 (0.5.11)
ruby_core_source (>= 0.1.4)
mario (0.0.6)
mocha (0.9.10)
rake
net-scp (1.0.4)
net-ssh (>= 1.99.1)
net-ssh (2.0.23)
rake (0.8.7)
ruby-debug (0.10.4)
columnize (>= 0.1)
ruby-debug-base (~> 0.10.4.0)
ruby-debug-base (0.10.4)
linecache (>= 0.3)
ruby-debug-base19 (0.11.24)
columnize (>= 0.3.1)
linecache19 (>= 0.5.11)
ruby_core_source (>= 0.1.4)
ruby-debug19 (0.11.6)
columnize (>= 0.3.1)
linecache19 (>= 0.5.11)
ruby-debug-base19 (>= 0.11.19)
ruby_core_source (0.1.4)
archive-tar-minitar (>= 0.5.2)
thor (0.14.6)
yard (0.6.3)
PLATFORMS
ruby
DEPENDENCIES
bluecloth
contest (>= 0.1.2)
mocha
rake
ruby-debug
ruby-debug19
vagrant!
virtualbox!
yard (~> 0.6.1)

View File

@ -34,6 +34,14 @@ module Vagrant
raise Errors::VirtualBoxNotDetected.new if version.nil? raise Errors::VirtualBoxNotDetected.new if version.nil?
raise Errors::VirtualBoxInvalidVersion.new(:version => version.to_s) if version.to_f < 3.2 raise Errors::VirtualBoxInvalidVersion.new(:version => version.to_s) if version.to_f < 3.2
raise Errors::VirtualBoxInvalidOSE.new(:version => version.to_s) if version.to_s.downcase.include?("ose") raise Errors::VirtualBoxInvalidOSE.new(:version => version.to_s) if version.to_s.downcase.include?("ose")
rescue Errors::VirtualBoxNotDetected
# On 64-bit Windows, show a special error. This error is a subclass
# of VirtualBoxNotDetected, so libraries which use Vagrant can just
# rescue VirtualBoxNotDetected.
raise Errors::VirtualBoxNotDetected_Win64 if Util::Platform.windows? && Util::Platform.bit64?
# Otherwise, reraise the old error
raise
end end
end end

View File

@ -283,6 +283,15 @@ module Vagrant
error_key(:virtualbox_not_detected) error_key(:virtualbox_not_detected)
end end
# Note that this is a subclass of VirtualBoxNotDetected, so developers
# who script Vagrant or use it as a library in any way can rescue from
# "VirtualBoxNotDetected" and catch both errors, which represent the
# same thing. This subclass simply has a specialized error message.
class VirtualBoxNotDetected_Win64 < VirtualBoxNotDetected
status_code(48)
error_key(:virtualbox_not_detected_win64)
end
class VMBaseMacNotSpecified < VagrantError class VMBaseMacNotSpecified < VagrantError
status_code(47) status_code(47)
error_key(:no_base_mac, "vagrant.actions.vm.match_mac") error_key(:no_base_mac, "vagrant.actions.vm.match_mac")

View File

@ -1,3 +1,4 @@
require 'timeout'
require 'net/ssh' require 'net/ssh'
require 'net/scp' require 'net/scp'
require 'mario' require 'mario'
@ -60,12 +61,12 @@ module Vagrant
# Merge in any additional options # Merge in any additional options
opts = opts.dup opts = opts.dup
opts[:forward_agent] = true if env.config.ssh.forward_agent opts[:forward_agent] = true if env.config.ssh.forward_agent
opts[:port] ||= port
retryable(:tries => 5, :on => Errno::ECONNREFUSED) do retryable(:tries => 5, :on => Errno::ECONNREFUSED) do
Net::SSH.start(env.config.ssh.host, Net::SSH.start(env.config.ssh.host,
env.config.ssh.username, env.config.ssh.username,
opts.merge( :port => port, opts.merge( :keys => [env.config.ssh.private_key_path],
:keys => [env.config.ssh.private_key_path],
:user_known_hosts_file => [], :user_known_hosts_file => [],
:paranoid => false, :paranoid => false,
:config => false)) do |ssh| :config => false)) do |ssh|
@ -92,21 +93,22 @@ module Vagrant
# #
# @return [Boolean] # @return [Boolean]
def up? def up?
check_thread = Thread.new do # We have to determine the port outside of the block since it uses
begin # API calls which can only be used from the main thread in JRuby on
Thread.current[:result] = false # Windows
execute(:timeout => env.config.ssh.timeout) do |ssh| ssh_port = port
Thread.current[:result] = true
end Timeout.timeout(env.config.ssh.timeout) do
rescue Errno::ECONNREFUSED, Net::SSH::Disconnect, Errors::SSHConnectionRefused execute(:timeout => env.config.ssh.timeout,
# False, its defaulted above :port => ssh_port) { |ssh| }
end
end end
check_thread.join(env.config.ssh.timeout) true
return check_thread[:result]
rescue Net::SSH::AuthenticationFailed rescue Net::SSH::AuthenticationFailed
raise Errors::SSHAuthenticationFailed.new raise Errors::SSHAuthenticationFailed.new
rescue Timeout::Error, Errno::ECONNREFUSED, Net::SSH::Disconnect,
Errors::SSHConnectionRefused, Net::SSH::AuthenticationFailed
return false
end end
# Checks the file permissions for the private key, resetting them # Checks the file permissions for the private key, resetting them

View File

@ -1,3 +1,4 @@
require 'rbconfig'
require 'mario' require 'mario'
module Vagrant module Vagrant
@ -27,13 +28,29 @@ module Vagrant
false false
end end
# Returns boolean noting whether this is a 64-bit CPU. This
# is not 100% accurate and there could easily be false negatives.
#
# @return [Boolean]
def bit64?
["x86_64", "amd64"].include?(RbConfig::CONFIG["host_cpu"])
end
# Returns boolean noting whether this is a 32-bit CPU. This
# can easily throw false positives since it relies on {#bit64?}.
#
# @return [Boolean]
def bit32?
!bit64?
end
def tar_file_options def tar_file_options
# create, write only, fail if the file exists, binary if windows # create, write only, fail if the file exists, binary if windows
File::WRONLY|File::EXCL|File::CREAT|(Mario::Platform.windows? ? File::BINARY : 0) File::WRONLY|File::EXCL|File::CREAT|(Mario::Platform.windows? ? File::BINARY : 0)
end end
def platform def platform
RUBY_PLATFORM.to_s.downcase RbConfig::CONFIG["host_os"].downcase
end end
end end
end end

View File

@ -14,7 +14,7 @@ en:
the VM and is required for chef provisioning. Please verify that chef the VM and is required for chef provisioning. Please verify that chef
is installed and that the binary is available on the PATH. is installed and that the binary is available on the PATH.
puppet_not_detected: |- puppet_not_detected: |-
The `puppet` binary was not found on the VM and is required for Puppet provisioning. The `puppet` binary was not found on the VM and is required for Puppet provisioning.
Please verify that Puppet is installed and that the binary is available on the PATH. Please verify that Puppet is installed and that the binary is available on the PATH.
cli_missing_env: This command requires that a Vagrant environment be properly passed in as the last parameter. cli_missing_env: This command requires that a Vagrant environment be properly passed in as the last parameter.
config_validation: |- config_validation: |-
@ -70,7 +70,7 @@ en:
For a more detailed guide please consult: For a more detailed guide please consult:
http://vagrantup.com/docs/getting-started/windows. http://vagrantup.com/docs/getting-started/windows
system: system:
invalid_class: |- invalid_class: |-
@ -102,6 +102,18 @@ en:
Vagrant could not detect VirtualBox! Make sure VirtualBox is properly installed. Vagrant could not detect VirtualBox! Make sure VirtualBox is properly installed.
If VirtualBox is installed, it may be an incorrect version. Vagrant currently If VirtualBox is installed, it may be an incorrect version. Vagrant currently
requires VirtualBox 3.2.x. Please install the proper version to continue. requires VirtualBox 3.2.x. Please install the proper version to continue.
virtualbox_not_detected_win64: |-
Vagrant could not detect VirtualBox! Make sure VirtualBox is properly installed
with version 3.2.0 or higher.
Additionally, it appears you're on 64-bit Windows. If this is the case, and
VirtualBox is properly installed with the correct version, then please make
sure you're running Vagrant via JRuby on a 64-bit Java runtime. For more
information on how to set this up and how to verify it is properly setup,
please view the guide online at:
http://vagrantup.com/docs/getting-started/setup/windows_x64.html
vm_creation_required: "VM must be created before running this command. Run `vagrant up` first." vm_creation_required: "VM must be created before running this command. Run `vagrant up` first."
vm_not_found: "A VM by the name of %{name} was not found." vm_not_found: "A VM by the name of %{name} was not found."
vm_not_running: "VM must be running to open SSH connection." vm_not_running: "VM must be running to open SSH connection."

View File

@ -195,16 +195,15 @@ class SshTest < Test::Unit::TestCase
end end
should "return false if SSH connection times out" do should "return false if SSH connection times out" do
Net::SSH.expects(:start) @env.config.ssh.timeout = 0.5
assert !@ssh.up?
end
should "allow the thread the configured timeout time" do Net::SSH.stubs(:start).with() do
@thread = mock("thread") # Sleep here to artificially fake timeout
@thread.stubs(:[]) sleep 1
Thread.expects(:new).returns(@thread) true
@thread.expects(:join).with(@env.config.ssh.timeout).once end
@ssh.up?
assert !@ssh.up?
end end
should "return false if the connection is refused" do should "return false if the connection is refused" do
@ -222,7 +221,11 @@ class SshTest < Test::Unit::TestCase
end end
should "specifity the timeout as an option to execute" do should "specifity the timeout as an option to execute" do
@ssh.expects(:execute).with(:timeout => @env.config.ssh.timeout).yields(true) @ssh.expects(:execute).yields(true).with() do |opts|
assert_equal @env.config.ssh.timeout, opts[:timeout]
true
end
assert @ssh.up? assert @ssh.up?
end end
@ -230,6 +233,11 @@ class SshTest < Test::Unit::TestCase
@ssh.expects(:execute).raises(Net::SSH::AuthenticationFailed) @ssh.expects(:execute).raises(Net::SSH::AuthenticationFailed)
assert_raises(Vagrant::Errors::SSHAuthenticationFailed) { @ssh.up? } assert_raises(Vagrant::Errors::SSHAuthenticationFailed) { @ssh.up? }
end end
should "only get the port once (in the main thread)" do
@ssh.expects(:port).once.returns(2222)
@ssh.up?
end
end end
context "getting the ssh port" do context "getting the ssh port" do