vagrant 0.6.4 → 0.6.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.md +12 -0
- data/Gemfile.lock +2 -2
- data/config/default.rb +1 -1
- data/lib/vagrant/action/vm/match_mac_address.rb +2 -0
- data/lib/vagrant/config.rb +7 -5
- data/lib/vagrant/config/vm.rb +1 -0
- data/lib/vagrant/data_store.rb +2 -0
- data/lib/vagrant/environment.rb +3 -3
- data/lib/vagrant/errors.rb +10 -0
- data/lib/vagrant/plugin.rb +11 -4
- data/lib/vagrant/test_helpers.rb +1 -0
- data/lib/vagrant/version.rb +1 -1
- data/templates/locales/en.yml +13 -1
- data/test/vagrant/action/vm/match_mac_address_test.rb +8 -0
- data/test/vagrant/command/helpers_test.rb +2 -2
- data/test/vagrant/config_test.rb +27 -11
- data/test/vagrant/data_store_test.rb +10 -1
- data/test/vagrant/environment_test.rb +13 -3
- metadata +4 -4
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
## 0.6.5 (October 8, 2010)
|
2
|
+
|
3
|
+
- Validations on base MAC address to avoid situation described in GH-166, GH-181
|
4
|
+
from ever happening again.
|
5
|
+
- Properly load sub-VM configuration on first-pass of config loading. Solves
|
6
|
+
a LOT of problems with multi-VM. [GH-166] [GH-181]
|
7
|
+
- Configuration now only validates on final Vagrantfile proc, so multi-VM
|
8
|
+
validates correctly.
|
9
|
+
- A nice error message is given if ".vagrant" is a directory and therefore
|
10
|
+
can't be accessed. [GH-172]
|
11
|
+
- Fix plugin loading in a Rails 2.3.x project. [GH-176]
|
12
|
+
|
1
13
|
## 0.6.4 (October 4, 2010)
|
2
14
|
|
3
15
|
- Default VM name is now properly the parent folder of the working directory
|
data/Gemfile.lock
CHANGED
@@ -8,7 +8,7 @@ GIT
|
|
8
8
|
PATH
|
9
9
|
remote: .
|
10
10
|
specs:
|
11
|
-
vagrant (0.6.
|
11
|
+
vagrant (0.6.5)
|
12
12
|
archive-tar-minitar (= 0.5.2)
|
13
13
|
erubis (~> 2.6.6)
|
14
14
|
i18n (~> 0.4.1)
|
@@ -58,7 +58,7 @@ GEM
|
|
58
58
|
ruby-debug-base19 (>= 0.11.19)
|
59
59
|
ruby_core_source (0.1.4)
|
60
60
|
archive-tar-minitar (>= 0.5.2)
|
61
|
-
thor (0.14.
|
61
|
+
thor (0.14.3)
|
62
62
|
yard (0.6.1)
|
63
63
|
|
64
64
|
PLATFORMS
|
data/config/default.rb
CHANGED
@@ -16,7 +16,7 @@ Vagrant::Config.run do |config|
|
|
16
16
|
config.vm.auto_port_range = (2200..2250)
|
17
17
|
config.vm.box_ovf = "box.ovf"
|
18
18
|
config.vm.box_url = nil
|
19
|
-
config.vm.base_mac =
|
19
|
+
config.vm.base_mac = nil
|
20
20
|
config.vm.forward_port("ssh", 22, 2222, :auto => true)
|
21
21
|
config.vm.disk_image_format = 'VMDK'
|
22
22
|
config.vm.provisioner = nil
|
@@ -7,6 +7,8 @@ module Vagrant
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def call(env)
|
10
|
+
raise Errors::VMBaseMacNotSpecified if !env.env.config.vm.base_mac
|
11
|
+
|
10
12
|
env.ui.info I18n.t("vagrant.actions.vm.match_mac.matching")
|
11
13
|
env["vm"].vm.network_adapters.first.mac_address = env.env.config.vm.base_mac
|
12
14
|
env["vm"].vm.save
|
data/lib/vagrant/config.rb
CHANGED
@@ -68,11 +68,13 @@ module Vagrant
|
|
68
68
|
# and returns the final configured object. This also validates the
|
69
69
|
# configuration by calling {Top#validate!} on every configuration
|
70
70
|
# class.
|
71
|
-
def execute!(
|
71
|
+
def execute!(validate=true)
|
72
72
|
config_object ||= config
|
73
|
-
|
74
73
|
run_procs!(config_object)
|
75
|
-
|
74
|
+
|
75
|
+
# Validate if we're looking at a config object which represents a
|
76
|
+
# real VM.
|
77
|
+
config_object.validate! if validate && config_object.env.vm
|
76
78
|
config_object
|
77
79
|
end
|
78
80
|
end
|
@@ -88,7 +90,7 @@ module Vagrant
|
|
88
90
|
|
89
91
|
# Loads the queue of files/procs, executes them in the proper
|
90
92
|
# sequence, and returns the resulting configuration object.
|
91
|
-
def load!
|
93
|
+
def load!(validate=true)
|
92
94
|
self.class.reset!(@env)
|
93
95
|
|
94
96
|
queue.flatten.each do |item|
|
@@ -104,7 +106,7 @@ module Vagrant
|
|
104
106
|
end
|
105
107
|
end
|
106
108
|
|
107
|
-
return self.class.execute!
|
109
|
+
return self.class.execute!(validate)
|
108
110
|
end
|
109
111
|
end
|
110
112
|
|
data/lib/vagrant/config/vm.rb
CHANGED
data/lib/vagrant/data_store.rb
CHANGED
data/lib/vagrant/environment.rb
CHANGED
@@ -158,7 +158,7 @@ module Vagrant
|
|
158
158
|
if parent
|
159
159
|
parent.multivm?
|
160
160
|
else
|
161
|
-
vms.length > 1
|
161
|
+
vms.length > 1 || vms.keys.first != DEFAULT_VM
|
162
162
|
end
|
163
163
|
end
|
164
164
|
|
@@ -306,14 +306,14 @@ module Vagrant
|
|
306
306
|
|
307
307
|
# If this environment is representing a sub-VM, then we push that
|
308
308
|
# proc on as the last configuration.
|
309
|
-
if
|
309
|
+
if vm
|
310
310
|
subvm = parent.config.vm.defined_vms[vm.name]
|
311
311
|
loader.queue << subvm.proc_stack if subvm
|
312
312
|
end
|
313
313
|
|
314
314
|
# Execute the configuration stack and store the result as the final
|
315
315
|
# value in the config ivar.
|
316
|
-
@config = loader.load!
|
316
|
+
@config = loader.load!(!first_run)
|
317
317
|
|
318
318
|
# (re)load the logger
|
319
319
|
@logger = nil
|
data/lib/vagrant/errors.rb
CHANGED
@@ -133,6 +133,11 @@ module Vagrant
|
|
133
133
|
error_key(:config_validation)
|
134
134
|
end
|
135
135
|
|
136
|
+
class DotfileIsDirectory < VagrantError
|
137
|
+
status_code(46)
|
138
|
+
error_key(:dotfile_is_directory)
|
139
|
+
end
|
140
|
+
|
136
141
|
class DownloaderFileDoesntExist < VagrantError
|
137
142
|
status_code(37)
|
138
143
|
error_key(:file_missing, "vagrant.downloaders.file")
|
@@ -278,6 +283,11 @@ module Vagrant
|
|
278
283
|
error_key(:virtualbox_not_detected)
|
279
284
|
end
|
280
285
|
|
286
|
+
class VMBaseMacNotSpecified < VagrantError
|
287
|
+
status_code(47)
|
288
|
+
error_key(:no_base_mac, "vagrant.actions.vm.match_mac")
|
289
|
+
end
|
290
|
+
|
281
291
|
class VMFailedToBoot < VagrantError
|
282
292
|
status_code(21)
|
283
293
|
error_key(:failed_to_boot, "vagrant.actions.vm.boot")
|
data/lib/vagrant/plugin.rb
CHANGED
@@ -21,13 +21,20 @@ module Vagrant
|
|
21
21
|
# load path. This file is loaded to kick off the load sequence
|
22
22
|
# for that plugin.
|
23
23
|
def self.load!
|
24
|
+
# Stupid hack since Rails 2.3.x overrides Gem.source_index with their
|
25
|
+
# own incomplete replacement which causes issues.
|
26
|
+
index = Gem.source_index
|
27
|
+
index = [index.installed_source_index, index.vendor_source_index] if defined?(Rails::VendorGemSourceIndex) && index.is_a?(Rails::VendorGemSourceIndex)
|
28
|
+
|
24
29
|
# Look for a vagrant_init.rb in all the gems, but only the
|
25
30
|
# latest version of the gems.
|
26
|
-
|
27
|
-
|
28
|
-
|
31
|
+
[index].flatten.each do |source|
|
32
|
+
source.latest_specs.each do |spec|
|
33
|
+
file = Gem.searcher.matching_files(spec, "vagrant_init.rb").first
|
34
|
+
next if !file
|
29
35
|
|
30
|
-
|
36
|
+
@@plugins << new(spec, file)
|
37
|
+
end
|
31
38
|
end
|
32
39
|
end
|
33
40
|
|
data/lib/vagrant/test_helpers.rb
CHANGED
data/lib/vagrant/version.rb
CHANGED
data/templates/locales/en.yml
CHANGED
@@ -15,6 +15,12 @@ en:
|
|
15
15
|
are printed below:
|
16
16
|
|
17
17
|
%{messages}
|
18
|
+
dotfile_is_directory: |-
|
19
|
+
The local file Vagrant uses to store data ".vagrant" already exists
|
20
|
+
and is a directory! If you are in your home directory, then please run
|
21
|
+
this command in another directory. If you aren't in a home directory,
|
22
|
+
then please rename ".vagrant" to something else, or configure Vagrant
|
23
|
+
to use another filename by modifying `config.vagrant.dotfile_name`.
|
18
24
|
interrupted: Vagrant exited after cleanup due to external interrupt.
|
19
25
|
multi_vm_required: A multi-vm environment is required for name specification to this command.
|
20
26
|
multi_vm_target_required: `vagrant %{command}` requires a specific VM name to target in a multi-VM environment.
|
@@ -107,8 +113,9 @@ en:
|
|
107
113
|
ssh:
|
108
114
|
private_key_missing: "`private_key_path` file must exist: %{path}"
|
109
115
|
vm:
|
110
|
-
|
116
|
+
base_mac_invalid: "Base MAC address for eth0/NAT must be set. Contact box maintainer for more information."
|
111
117
|
boot_mode_invalid: "Boot mode must be one of: vrdp or gui"
|
118
|
+
shared_folder_hostpath_missing: "Shared folder host path for '%{name}' doesn't exist: %{path}"
|
112
119
|
|
113
120
|
#-------------------------------------------------------------------------------
|
114
121
|
# Translations for commands. e.g. `vagrant x`
|
@@ -258,6 +265,11 @@ en:
|
|
258
265
|
manually for more verbose error output.
|
259
266
|
match_mac:
|
260
267
|
matching: Matching MAC address for NAT networking...
|
268
|
+
no_base_mac: |-
|
269
|
+
No base MAC address was specified. This is required for the NAT networking
|
270
|
+
to work properly (and hence port forwarding, SSH, etc.). Specifying this
|
271
|
+
MAC address is typically up to the box and box maintiner. Please contact
|
272
|
+
the relevant person to solve this issue.
|
261
273
|
network:
|
262
274
|
collides: |-
|
263
275
|
The specified host network collides with a non-hostonly network!
|
@@ -25,4 +25,12 @@ class MatchMACAddressVMActionTest < Test::Unit::TestCase
|
|
25
25
|
|
26
26
|
@instance.call(@env)
|
27
27
|
end
|
28
|
+
|
29
|
+
should "raise an exception if no base MAC address is specified" do
|
30
|
+
@env.env.config.vm.base_mac = nil
|
31
|
+
|
32
|
+
assert_raises(Vagrant::Errors::VMBaseMacNotSpecified) {
|
33
|
+
@instance.call(@env)
|
34
|
+
}
|
35
|
+
end
|
28
36
|
end
|
@@ -39,11 +39,11 @@ class CommandHelpersTest < Test::Unit::TestCase
|
|
39
39
|
|
40
40
|
context "without multivm" do
|
41
41
|
setup do
|
42
|
-
@env.stubs(:vms).returns({ :one => 1 })
|
42
|
+
@env.stubs(:vms).returns({ :one => 1, :two => 2 })
|
43
43
|
end
|
44
44
|
|
45
45
|
should "raise an exception if a name is specified" do
|
46
|
-
instance = command(["foo"],
|
46
|
+
instance = command(["foo"], vagrant_env)
|
47
47
|
assert_raises(Vagrant::Errors::MultiVMEnvironmentRequired) {
|
48
48
|
instance.target_vms
|
49
49
|
}
|
data/test/vagrant/config_test.rb
CHANGED
@@ -10,7 +10,6 @@ class ConfigTest < Test::Unit::TestCase
|
|
10
10
|
@env = vagrant_env
|
11
11
|
@instance = @klass.new(@env)
|
12
12
|
|
13
|
-
# Don't want validation to occur for these tests
|
14
13
|
@klass::Top.any_instance.stubs(:validate!)
|
15
14
|
end
|
16
15
|
|
@@ -21,10 +20,17 @@ class ConfigTest < Test::Unit::TestCase
|
|
21
20
|
should "reset the config class on load, then execute" do
|
22
21
|
seq = sequence("sequence")
|
23
22
|
@klass.expects(:reset!).with(@env).in_sequence(seq)
|
24
|
-
@klass.expects(:execute!).in_sequence(seq)
|
23
|
+
@klass.expects(:execute!).with(true).in_sequence(seq)
|
25
24
|
@instance.load!
|
26
25
|
end
|
27
26
|
|
27
|
+
should "not validate if told not to" do
|
28
|
+
seq = sequence("sequence")
|
29
|
+
@klass.expects(:reset!).with(@env).in_sequence(seq)
|
30
|
+
@klass.expects(:execute!).with(false).in_sequence(seq)
|
31
|
+
@instance.load!(false)
|
32
|
+
end
|
33
|
+
|
28
34
|
should "run the queue in the order given" do
|
29
35
|
@instance.queue << Proc.new { |config| config.vm.box = "foo" }
|
30
36
|
@instance.queue << Proc.new { |config| config.vm.box = "bar" }
|
@@ -74,6 +80,7 @@ class ConfigTest < Test::Unit::TestCase
|
|
74
80
|
|
75
81
|
context "resetting" do
|
76
82
|
setup do
|
83
|
+
@klass.reset!(vagrant_env)
|
77
84
|
@klass::Top.any_instance.stubs(:validate!)
|
78
85
|
@klass.run { |config| }
|
79
86
|
@klass.execute!
|
@@ -105,7 +112,7 @@ class ConfigTest < Test::Unit::TestCase
|
|
105
112
|
|
106
113
|
context "initializing" do
|
107
114
|
setup do
|
108
|
-
@klass.reset!
|
115
|
+
@klass.reset!(vagrant_env)
|
109
116
|
@klass::Top.any_instance.stubs(:validate!)
|
110
117
|
end
|
111
118
|
|
@@ -115,25 +122,34 @@ class ConfigTest < Test::Unit::TestCase
|
|
115
122
|
assert_equal [proc], @klass.proc_stack
|
116
123
|
end
|
117
124
|
|
118
|
-
should "run the
|
125
|
+
should "run the validation on an environment which represents a VM" do
|
126
|
+
@klass.reset!(vagrant_env.vms[:default].env)
|
119
127
|
seq = sequence('seq')
|
120
128
|
@klass.expects(:run_procs!).with(@klass.config).once.in_sequence(seq)
|
121
129
|
@klass.config.expects(:validate!).once.in_sequence(seq)
|
122
130
|
@klass.execute!
|
123
131
|
end
|
124
132
|
|
133
|
+
should "not run the validation on an environment that doesn't directly represent a VM" do
|
134
|
+
seq = sequence('seq')
|
135
|
+
@klass.expects(:run_procs!).with(@klass.config).once.in_sequence(seq)
|
136
|
+
@klass.expects(:validate!).never
|
137
|
+
@klass.execute!
|
138
|
+
end
|
139
|
+
|
140
|
+
should "not run the validation if explicitly told not to" do
|
141
|
+
@klass.reset!(vagrant_env.vms[:default].env)
|
142
|
+
seq = sequence('seq')
|
143
|
+
@klass.expects(:run_procs!).with(@klass.config).once.in_sequence(seq)
|
144
|
+
@klass.config.expects(:validate!).never
|
145
|
+
@klass.execute!(false)
|
146
|
+
end
|
147
|
+
|
125
148
|
should "return the configuration on execute!" do
|
126
149
|
@klass.run {}
|
127
150
|
result = @klass.execute!
|
128
151
|
assert result.is_a?(@klass::Top)
|
129
152
|
end
|
130
|
-
|
131
|
-
should "use given configuration object if given" do
|
132
|
-
fake_env = mock("env")
|
133
|
-
config = @klass::Top.new(fake_env)
|
134
|
-
result = @klass.execute!(config)
|
135
|
-
assert_equal config.env, result.env
|
136
|
-
end
|
137
153
|
end
|
138
154
|
|
139
155
|
context "top config class" do
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require "fileutils"
|
1
2
|
require "test_helper"
|
2
3
|
|
3
4
|
class DataStoreTest < Test::Unit::TestCase
|
@@ -11,7 +12,15 @@ class DataStoreTest < Test::Unit::TestCase
|
|
11
12
|
end
|
12
13
|
|
13
14
|
teardown do
|
14
|
-
File.delete(@db_file) if File.
|
15
|
+
File.delete(@db_file) if File.exist?(@db_file)
|
16
|
+
end
|
17
|
+
|
18
|
+
should "raise an exception if the db file is a directory" do
|
19
|
+
file = tmp_path.join("data_store_folder_test")
|
20
|
+
FileUtils.mkdir_p(file)
|
21
|
+
assert_raises (Vagrant::Errors::DotfileIsDirectory) {
|
22
|
+
@klass.new(file)
|
23
|
+
}
|
15
24
|
end
|
16
25
|
|
17
26
|
should "be a hash with indifferent access" do
|
@@ -129,12 +129,16 @@ class EnvironmentTest < Test::Unit::TestCase
|
|
129
129
|
assert env.multivm?
|
130
130
|
end
|
131
131
|
|
132
|
-
should "return
|
132
|
+
should "return true if VM length is 1 and a sub-VM is defined" do
|
133
133
|
env = vagrant_env(vagrantfile(<<-vf))
|
134
134
|
config.vm.define :web
|
135
135
|
vf
|
136
136
|
|
137
|
-
assert
|
137
|
+
assert env.multivm?
|
138
|
+
end
|
139
|
+
|
140
|
+
should "return false if only default VM exists" do
|
141
|
+
assert !vagrant_env.multivm?
|
138
142
|
end
|
139
143
|
end
|
140
144
|
|
@@ -361,7 +365,10 @@ class EnvironmentTest < Test::Unit::TestCase
|
|
361
365
|
end
|
362
366
|
|
363
367
|
def create_box_vagrantfile
|
364
|
-
vagrantfile(vagrant_box("box"),
|
368
|
+
vagrantfile(vagrant_box("box"), <<-FILE)
|
369
|
+
config.package.name = "box.box"
|
370
|
+
config.vm.base_mac = "set"
|
371
|
+
FILE
|
365
372
|
end
|
366
373
|
|
367
374
|
def create_home_vagrantfile
|
@@ -396,15 +403,18 @@ class EnvironmentTest < Test::Unit::TestCase
|
|
396
403
|
|
397
404
|
should "load from a sub-vm configuration if environment represents a VM" do
|
398
405
|
create_home_vagrantfile
|
406
|
+
create_box_vagrantfile
|
399
407
|
vagrantfile(@env.root_path, <<-vf)
|
400
408
|
config.package.name = "root.box"
|
401
409
|
config.vm.define :web do |web|
|
410
|
+
web.vm.box = "box"
|
402
411
|
web.package.name = "web.box"
|
403
412
|
end
|
404
413
|
vf
|
405
414
|
|
406
415
|
assert_equal "root.box", @env.config.package.name
|
407
416
|
assert_equal "web.box", @env.vms[:web].env.config.package.name
|
417
|
+
assert_equal "set", @env.vms[:web].env.config.vm.base_mac
|
408
418
|
end
|
409
419
|
|
410
420
|
should "reload the logger after executing" do
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 6
|
8
|
-
-
|
9
|
-
version: 0.6.
|
8
|
+
- 5
|
9
|
+
version: 0.6.5
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Mitchell Hashimoto
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-10-
|
18
|
+
date: 2010-10-08 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -455,7 +455,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
455
455
|
requirements:
|
456
456
|
- - ">="
|
457
457
|
- !ruby/object:Gem::Version
|
458
|
-
hash:
|
458
|
+
hash: 2202900524961152479
|
459
459
|
segments:
|
460
460
|
- 0
|
461
461
|
version: "0"
|