vagrant 0.7.1 → 0.7.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +12 -0
- data/Gemfile +4 -2
- data/lib/vagrant/action/vm/network.rb +2 -1
- data/lib/vagrant/config/ssh.rb +5 -0
- data/lib/vagrant/config/vm.rb +1 -0
- data/lib/vagrant/data_store.rb +6 -6
- data/lib/vagrant/hosts/bsd.rb +1 -0
- data/lib/vagrant/ssh.rb +1 -1
- data/lib/vagrant/ssh/session.rb +13 -8
- data/lib/vagrant/systems/debian.rb +1 -0
- data/lib/vagrant/systems/linux.rb +1 -1
- data/lib/vagrant/version.rb +1 -1
- data/templates/locales/en.yml +4 -0
- data/templates/nfs/exports.erb +1 -1
- data/templates/nfs/exports_linux.erb +1 -1
- data/test/vagrant/action/vm/network_test.rb +30 -9
- data/test/vagrant/ssh/session_test.rb +2 -1
- data/vagrant.gemspec +1 -1
- metadata +6 -60
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
## 0.7.2 (February 8, 2011)
|
2
|
+
|
3
|
+
- Update JSON dependency to 1.5.1, which works with Ruby 1.9 on
|
4
|
+
Windows.
|
5
|
+
- Fix sudo issues on sudo < 1.7.0 (again).
|
6
|
+
- Fix race condition in SSH, which specifically manifested itself in
|
7
|
+
the chef server provisioner. [GH-295]
|
8
|
+
- Change sudo shell to use `bash` (configurable). [GH-301]
|
9
|
+
- Can now set mac address of host only network. [GH-294]
|
10
|
+
- NFS shared folders with spaces now work properly. [GH-293]
|
11
|
+
- Failed SSH commands now show output in error message. [GH-285]
|
12
|
+
|
1
13
|
## 0.7.1 (January 28, 2011)
|
2
14
|
|
3
15
|
- Change error output with references to VirtualBox 3.2 to 4.0.
|
data/Gemfile
CHANGED
@@ -8,7 +8,7 @@ module Vagrant
|
|
8
8
|
@app = app
|
9
9
|
@env = env
|
10
10
|
|
11
|
-
if enable_network? && Util::Platform.windows?
|
11
|
+
if enable_network? && Util::Platform.windows? && Util::Platform.bit64?
|
12
12
|
raise Errors::NetworkNotImplemented
|
13
13
|
end
|
14
14
|
|
@@ -65,6 +65,7 @@ module Vagrant
|
|
65
65
|
adapter.enabled = true
|
66
66
|
adapter.attachment_type = :host_only
|
67
67
|
adapter.host_interface = network_name(network_options)
|
68
|
+
adapter.mac_address = network_options[:mac].gsub(':', '') if network_options[:mac]
|
68
69
|
adapter.save
|
69
70
|
end
|
70
71
|
end
|
data/lib/vagrant/config/ssh.rb
CHANGED
@@ -11,6 +11,11 @@ module Vagrant
|
|
11
11
|
attr_writer :private_key_path
|
12
12
|
attr_accessor :forward_agent
|
13
13
|
attr_accessor :forward_x11
|
14
|
+
attr_accessor :sudo_shell
|
15
|
+
|
16
|
+
def initialize
|
17
|
+
@sudo_shell = "bash"
|
18
|
+
end
|
14
19
|
|
15
20
|
def private_key_path
|
16
21
|
File.expand_path(@private_key_path, env.root_path)
|
data/lib/vagrant/config/vm.rb
CHANGED
data/lib/vagrant/data_store.rb
CHANGED
@@ -19,13 +19,13 @@ module Vagrant
|
|
19
19
|
@file_path = file_path
|
20
20
|
return if !file_path
|
21
21
|
|
22
|
-
File.
|
23
|
-
|
22
|
+
raise Errors::DotfileIsDirectory if File.directory?(file_path)
|
23
|
+
|
24
|
+
if File.exist?(file_path)
|
25
|
+
File.open(file_path, "r") do |f|
|
26
|
+
merge!(JSON.parse(f.read))
|
27
|
+
end
|
24
28
|
end
|
25
|
-
rescue Errno::ENOENT
|
26
|
-
clear
|
27
|
-
rescue Errno::EISDIR
|
28
|
-
raise Errors::DotfileIsDirectory
|
29
29
|
end
|
30
30
|
|
31
31
|
# Commits any changes to the data to disk. Even if the data
|
data/lib/vagrant/hosts/bsd.rb
CHANGED
@@ -25,6 +25,7 @@ module Vagrant
|
|
25
25
|
output.split("\n").each do |line|
|
26
26
|
# This should only ask for administrative permission once, even
|
27
27
|
# though its executed in multiple subshells.
|
28
|
+
line = line.gsub('"', '\"')
|
28
29
|
system(%Q[sudo su root -c "echo '#{line}' >> /etc/exports"])
|
29
30
|
end
|
30
31
|
|
data/lib/vagrant/ssh.rb
CHANGED
data/lib/vagrant/ssh/session.rb
CHANGED
@@ -7,9 +7,11 @@ module Vagrant
|
|
7
7
|
include Util::Retryable
|
8
8
|
|
9
9
|
attr_reader :session
|
10
|
+
attr_reader :env
|
10
11
|
|
11
|
-
def initialize(session)
|
12
|
+
def initialize(session, env)
|
12
13
|
@session = session
|
14
|
+
@env = env
|
13
15
|
end
|
14
16
|
|
15
17
|
# Executes a given command and simply returns true/false if the
|
@@ -31,8 +33,8 @@ module Vagrant
|
|
31
33
|
# this command is tailor-made to be compliant with older versions
|
32
34
|
# of `sudo`.
|
33
35
|
def sudo!(commands, options=nil, &block)
|
34
|
-
session.open_channel do |ch|
|
35
|
-
ch.exec("sudo -
|
36
|
+
channel = session.open_channel do |ch|
|
37
|
+
ch.exec("sudo #{env.config.ssh.sudo_shell} -l") do |ch2, success|
|
36
38
|
# Output each command as if they were entered on the command line
|
37
39
|
[commands].flatten.each do |command|
|
38
40
|
ch2.send_data "#{command}\n"
|
@@ -45,9 +47,10 @@ module Vagrant
|
|
45
47
|
# stdout/stderr and error checking goodies
|
46
48
|
setup_channel_callbacks(ch2, commands, options, block)
|
47
49
|
end
|
48
|
-
|
49
|
-
ch.wait
|
50
50
|
end
|
51
|
+
|
52
|
+
channel.wait
|
53
|
+
channel[:result]
|
51
54
|
end
|
52
55
|
|
53
56
|
# Executes a given command on the SSH session and blocks until
|
@@ -74,7 +77,7 @@ module Vagrant
|
|
74
77
|
options = { :error_check => true }.merge(options || {})
|
75
78
|
|
76
79
|
block ||= Proc.new do |ch, type, data|
|
77
|
-
check_exit_status(data, command, options) if type == :exit_status && options[:error_check]
|
80
|
+
check_exit_status(data, command, options, ch[:result]) if type == :exit_status && options[:error_check]
|
78
81
|
|
79
82
|
ch[:result] ||= ""
|
80
83
|
ch[:result] << data if [:stdout, :stderr].include?(type)
|
@@ -98,12 +101,14 @@ module Vagrant
|
|
98
101
|
|
99
102
|
# Checks for an erroroneous exit status and raises an exception
|
100
103
|
# if so.
|
101
|
-
def check_exit_status(exit_status, commands, options=nil)
|
104
|
+
def check_exit_status(exit_status, commands, options=nil, output=nil)
|
102
105
|
if exit_status != 0
|
106
|
+
output ||= '[no output]'
|
103
107
|
options = {
|
104
108
|
:_error_class => Errors::VagrantError,
|
105
109
|
:_key => :ssh_bad_exit_status,
|
106
|
-
:command => [commands].flatten.join("\n")
|
110
|
+
:command => [commands].flatten.join("\n"),
|
111
|
+
:output => output
|
107
112
|
}.merge(options || {})
|
108
113
|
|
109
114
|
raise options[:_error_class], options
|
@@ -26,6 +26,7 @@ module Vagrant
|
|
26
26
|
vm.ssh.execute do |ssh|
|
27
27
|
if !ssh.test?("sudo hostname | grep '#{name}'")
|
28
28
|
ssh.exec!("sudo sed -i 's/.*$/#{name}/' /etc/hostname")
|
29
|
+
ssh.exec!("sudo sed -i 's@^\\(127[.]0[.]1[.]1[[:space:]]\\+\\)@\\1#{name} #{name.split('.')[0]} @' /etc/hosts")
|
29
30
|
ssh.exec!("sudo service hostname start")
|
30
31
|
end
|
31
32
|
end
|
@@ -45,7 +45,7 @@ module Vagrant
|
|
45
45
|
folders.each do |name, opts|
|
46
46
|
vm.ssh.execute do |ssh|
|
47
47
|
ssh.exec!("sudo mkdir -p #{opts[:guestpath]}")
|
48
|
-
ssh.exec!("sudo mount #{ip}
|
48
|
+
ssh.exec!("sudo mount #{ip}:'#{opts[:hostpath]}' #{opts[:guestpath]}", :_error_class => LinuxError, :_key => :mount_nfs_fail)
|
49
49
|
end
|
50
50
|
end
|
51
51
|
end
|
data/lib/vagrant/version.rb
CHANGED
data/templates/locales/en.yml
CHANGED
@@ -70,6 +70,10 @@ en:
|
|
70
70
|
Vagrant assumes that this means the command failed!
|
71
71
|
|
72
72
|
%{command}
|
73
|
+
|
74
|
+
The output of the command prior to failing is outputted below:
|
75
|
+
|
76
|
+
%{output}
|
73
77
|
ssh_connection_refused: |-
|
74
78
|
SSH connection was refused! This usually happens if the VM failed to
|
75
79
|
boot properly. Some steps to try to fix this: First, try reloading your
|
data/templates/nfs/exports.erb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# VAGRANT-BEGIN: <%= uuid %>
|
2
2
|
<% folders.each do |name, opts| %>
|
3
|
-
<%= opts[:hostpath] %> <%= ip %><% if opts[:map_uid] -%> -mapall=<%= [opts[:map_uid],opts[:map_gid]].compact.join(":") %><% end -%>
|
3
|
+
"<%= opts[:hostpath] %>" <%= ip %><% if opts[:map_uid] -%> -mapall=<%= [opts[:map_uid],opts[:map_gid]].compact.join(":") %><% end -%>
|
4
4
|
<% end %>
|
5
5
|
# VAGRANT-END: <%= uuid %>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# VAGRANT-BEGIN: <%= uuid %>
|
2
2
|
<% folders.each do |name, opts| %>
|
3
|
-
<%= opts[:hostpath] %> <%= ip %>(rw,no_subtree_check,all_squash<% if opts[:map_uid] %>,anonuid=<%= opts[:map_uid] %><% end %><% if opts[:map_gid] %>,anongid=<%= opts[:map_gid] %><% end %>)
|
3
|
+
"<%= opts[:hostpath] %>" <%= ip %>(rw,no_subtree_check,all_squash<% if opts[:map_uid] %>,anonuid=<%= opts[:map_uid] %><% end %><% if opts[:map_gid] %>,anongid=<%= opts[:map_gid] %><% end %>)
|
4
4
|
<% end %>
|
5
5
|
# VAGRANT-END: <%= uuid %>
|
@@ -16,8 +16,9 @@ class NetworkVMActionTest < Test::Unit::TestCase
|
|
16
16
|
end
|
17
17
|
|
18
18
|
context "initializing" do
|
19
|
-
should "raise an error if on windows and networking is enabled" do
|
19
|
+
should "raise an error if on windows x64 and networking is enabled" do
|
20
20
|
Vagrant::Util::Platform.stubs(:windows?).returns(true)
|
21
|
+
Vagrant::Util::Platform.stubs(:bit64?).returns(true)
|
21
22
|
@env.env.config.vm.network("foo")
|
22
23
|
|
23
24
|
assert_raises(Vagrant::Errors::NetworkNotImplemented) {
|
@@ -115,24 +116,44 @@ class NetworkVMActionTest < Test::Unit::TestCase
|
|
115
116
|
|
116
117
|
@network_adapters = []
|
117
118
|
@internal_vm.stubs(:network_adapters).returns(@network_adapters)
|
119
|
+
end
|
118
120
|
|
119
|
-
|
121
|
+
def expect_adapter_setup(options=nil)
|
122
|
+
options = {
|
120
123
|
:ip => "foo",
|
121
124
|
:adapter => 7
|
122
|
-
}
|
125
|
+
}.merge(options || {})
|
123
126
|
|
124
|
-
@env
|
125
|
-
end
|
127
|
+
@env["config"].vm.network(options[:ip], options)
|
126
128
|
|
127
|
-
|
128
|
-
adapter = mock("adapter")
|
129
|
-
@network_adapters[@options[:adapter]] = adapter
|
129
|
+
@env["vm"].vm.network_adapters.clear
|
130
|
+
@env["vm"].vm.network_adapters[options[:adapter]] = adapter = mock("adapter")
|
130
131
|
|
131
|
-
adapter.expects(:enabled=).with(true)
|
132
|
+
adapter.expects(:enabled=).with(true)
|
132
133
|
adapter.expects(:attachment_type=).with(:host_only).once
|
133
134
|
adapter.expects(:host_interface=).with(@network_name).once
|
135
|
+
|
136
|
+
if options[:mac]
|
137
|
+
adapter.expects(:mac_address=).with(options[:mac].gsub(':', '')).once
|
138
|
+
else
|
139
|
+
adapter.expects(:mac_address=).never
|
140
|
+
end
|
141
|
+
|
134
142
|
adapter.expects(:save).once
|
143
|
+
end
|
144
|
+
|
145
|
+
should "setup the specified network adapter" do
|
146
|
+
expect_adapter_setup
|
147
|
+
@instance.assign_network
|
148
|
+
end
|
149
|
+
|
150
|
+
should "setup the specified network adapter's mac address if specified" do
|
151
|
+
expect_adapter_setup(:mac => "foo")
|
152
|
+
@instance.assign_network
|
153
|
+
end
|
135
154
|
|
155
|
+
should "properly remove : from mac address" do
|
156
|
+
expect_adapter_setup(:mac => "foo:bar")
|
136
157
|
@instance.assign_network
|
137
158
|
end
|
138
159
|
end
|
@@ -3,9 +3,10 @@ require "test_helper"
|
|
3
3
|
class SshSessionTest < Test::Unit::TestCase
|
4
4
|
setup do
|
5
5
|
@session = mock("session")
|
6
|
+
@env = vagrant_env
|
6
7
|
|
7
8
|
@klass = Vagrant::SSH::Session
|
8
|
-
@instance = @klass.new(@session)
|
9
|
+
@instance = @klass.new(@session, @env)
|
9
10
|
end
|
10
11
|
|
11
12
|
context "exec!" do
|
data/vagrant.gemspec
CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |s|
|
|
16
16
|
|
17
17
|
s.add_dependency "archive-tar-minitar", "= 0.5.2"
|
18
18
|
s.add_dependency "erubis", "~> 2.6.6"
|
19
|
-
s.add_dependency "json", "~> 1.
|
19
|
+
s.add_dependency "json", "~> 1.5.1"
|
20
20
|
s.add_dependency "mario", "~> 0.0.6"
|
21
21
|
s.add_dependency "net-ssh", "~> 2.1.0"
|
22
22
|
s.add_dependency "net-scp", "~> 1.0.4"
|
metadata
CHANGED
@@ -1,12 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 7
|
8
|
-
- 1
|
9
|
-
version: 0.7.1
|
4
|
+
prerelease:
|
5
|
+
version: 0.7.2
|
10
6
|
platform: ruby
|
11
7
|
authors:
|
12
8
|
- Mitchell Hashimoto
|
@@ -15,7 +11,7 @@ autorequire:
|
|
15
11
|
bindir: bin
|
16
12
|
cert_chain: []
|
17
13
|
|
18
|
-
date: 2011-
|
14
|
+
date: 2011-02-08 00:00:00 -08:00
|
19
15
|
default_executable:
|
20
16
|
dependencies:
|
21
17
|
- !ruby/object:Gem::Dependency
|
@@ -25,10 +21,6 @@ dependencies:
|
|
25
21
|
requirements:
|
26
22
|
- - "="
|
27
23
|
- !ruby/object:Gem::Version
|
28
|
-
segments:
|
29
|
-
- 0
|
30
|
-
- 5
|
31
|
-
- 2
|
32
24
|
version: 0.5.2
|
33
25
|
type: :runtime
|
34
26
|
prerelease: false
|
@@ -40,10 +32,6 @@ dependencies:
|
|
40
32
|
requirements:
|
41
33
|
- - ~>
|
42
34
|
- !ruby/object:Gem::Version
|
43
|
-
segments:
|
44
|
-
- 2
|
45
|
-
- 6
|
46
|
-
- 6
|
47
35
|
version: 2.6.6
|
48
36
|
type: :runtime
|
49
37
|
prerelease: false
|
@@ -55,11 +43,7 @@ dependencies:
|
|
55
43
|
requirements:
|
56
44
|
- - ~>
|
57
45
|
- !ruby/object:Gem::Version
|
58
|
-
|
59
|
-
- 1
|
60
|
-
- 4
|
61
|
-
- 6
|
62
|
-
version: 1.4.6
|
46
|
+
version: 1.5.1
|
63
47
|
type: :runtime
|
64
48
|
prerelease: false
|
65
49
|
version_requirements: *id003
|
@@ -70,10 +54,6 @@ dependencies:
|
|
70
54
|
requirements:
|
71
55
|
- - ~>
|
72
56
|
- !ruby/object:Gem::Version
|
73
|
-
segments:
|
74
|
-
- 0
|
75
|
-
- 0
|
76
|
-
- 6
|
77
57
|
version: 0.0.6
|
78
58
|
type: :runtime
|
79
59
|
prerelease: false
|
@@ -85,10 +65,6 @@ dependencies:
|
|
85
65
|
requirements:
|
86
66
|
- - ~>
|
87
67
|
- !ruby/object:Gem::Version
|
88
|
-
segments:
|
89
|
-
- 2
|
90
|
-
- 1
|
91
|
-
- 0
|
92
68
|
version: 2.1.0
|
93
69
|
type: :runtime
|
94
70
|
prerelease: false
|
@@ -100,10 +76,6 @@ dependencies:
|
|
100
76
|
requirements:
|
101
77
|
- - ~>
|
102
78
|
- !ruby/object:Gem::Version
|
103
|
-
segments:
|
104
|
-
- 1
|
105
|
-
- 0
|
106
|
-
- 4
|
107
79
|
version: 1.0.4
|
108
80
|
type: :runtime
|
109
81
|
prerelease: false
|
@@ -115,10 +87,6 @@ dependencies:
|
|
115
87
|
requirements:
|
116
88
|
- - ~>
|
117
89
|
- !ruby/object:Gem::Version
|
118
|
-
segments:
|
119
|
-
- 0
|
120
|
-
- 5
|
121
|
-
- 0
|
122
90
|
version: 0.5.0
|
123
91
|
type: :runtime
|
124
92
|
prerelease: false
|
@@ -130,10 +98,6 @@ dependencies:
|
|
130
98
|
requirements:
|
131
99
|
- - ~>
|
132
100
|
- !ruby/object:Gem::Version
|
133
|
-
segments:
|
134
|
-
- 0
|
135
|
-
- 14
|
136
|
-
- 6
|
137
101
|
version: 0.14.6
|
138
102
|
type: :runtime
|
139
103
|
prerelease: false
|
@@ -145,10 +109,6 @@ dependencies:
|
|
145
109
|
requirements:
|
146
110
|
- - ~>
|
147
111
|
- !ruby/object:Gem::Version
|
148
|
-
segments:
|
149
|
-
- 0
|
150
|
-
- 8
|
151
|
-
- 3
|
152
112
|
version: 0.8.3
|
153
113
|
type: :runtime
|
154
114
|
prerelease: false
|
@@ -160,8 +120,6 @@ dependencies:
|
|
160
120
|
requirements:
|
161
121
|
- - ">="
|
162
122
|
- !ruby/object:Gem::Version
|
163
|
-
segments:
|
164
|
-
- 0
|
165
123
|
version: "0"
|
166
124
|
type: :development
|
167
125
|
prerelease: false
|
@@ -173,10 +131,6 @@ dependencies:
|
|
173
131
|
requirements:
|
174
132
|
- - ">="
|
175
133
|
- !ruby/object:Gem::Version
|
176
|
-
segments:
|
177
|
-
- 0
|
178
|
-
- 1
|
179
|
-
- 2
|
180
134
|
version: 0.1.2
|
181
135
|
type: :development
|
182
136
|
prerelease: false
|
@@ -188,8 +142,6 @@ dependencies:
|
|
188
142
|
requirements:
|
189
143
|
- - ">="
|
190
144
|
- !ruby/object:Gem::Version
|
191
|
-
segments:
|
192
|
-
- 0
|
193
145
|
version: "0"
|
194
146
|
type: :development
|
195
147
|
prerelease: false
|
@@ -201,8 +153,6 @@ dependencies:
|
|
201
153
|
requirements:
|
202
154
|
- - ">="
|
203
155
|
- !ruby/object:Gem::Version
|
204
|
-
segments:
|
205
|
-
- 0
|
206
156
|
version: "0"
|
207
157
|
type: :development
|
208
158
|
prerelease: false
|
@@ -471,7 +421,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
471
421
|
requirements:
|
472
422
|
- - ">="
|
473
423
|
- !ruby/object:Gem::Version
|
474
|
-
hash:
|
424
|
+
hash: -3903323204405395882
|
475
425
|
segments:
|
476
426
|
- 0
|
477
427
|
version: "0"
|
@@ -480,15 +430,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
480
430
|
requirements:
|
481
431
|
- - ">="
|
482
432
|
- !ruby/object:Gem::Version
|
483
|
-
segments:
|
484
|
-
- 1
|
485
|
-
- 3
|
486
|
-
- 6
|
487
433
|
version: 1.3.6
|
488
434
|
requirements: []
|
489
435
|
|
490
436
|
rubyforge_project: vagrant
|
491
|
-
rubygems_version: 1.
|
437
|
+
rubygems_version: 1.5.0
|
492
438
|
signing_key:
|
493
439
|
specification_version: 3
|
494
440
|
summary: Build and distribute virtualized development environments.
|