vagrant 0.7.8 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. data/CHANGELOG.md +39 -0
  2. data/Gemfile +1 -7
  3. data/Rakefile +0 -11
  4. data/bin/vagrant +4 -0
  5. data/config/default.rb +1 -2
  6. data/lib/vagrant.rb +7 -5
  7. data/lib/vagrant/action.rb +5 -1
  8. data/lib/vagrant/action/builtin.rb +4 -1
  9. data/lib/vagrant/action/general/package.rb +6 -2
  10. data/lib/vagrant/action/vm.rb +2 -0
  11. data/lib/vagrant/action/vm/clear_forwarded_ports.rb +9 -22
  12. data/lib/vagrant/action/vm/clear_shared_folders.rb +9 -14
  13. data/lib/vagrant/action/vm/customize.rb +9 -4
  14. data/lib/vagrant/action/vm/forward_ports.rb +10 -11
  15. data/lib/vagrant/action/vm/match_mac_address.rb +8 -3
  16. data/lib/vagrant/action/vm/modify.rb +37 -0
  17. data/lib/vagrant/action/vm/network.rb +9 -2
  18. data/lib/vagrant/action/vm/provision.rb +10 -17
  19. data/lib/vagrant/action/vm/provisioner_cleanup.rb +26 -0
  20. data/lib/vagrant/action/vm/share_folders.rb +16 -8
  21. data/lib/vagrant/action/warden.rb +8 -2
  22. data/lib/vagrant/command/ssh.rb +4 -4
  23. data/lib/vagrant/command/ssh_config.rb +4 -2
  24. data/lib/vagrant/config/ssh.rb +3 -0
  25. data/lib/vagrant/config/vm.rb +16 -12
  26. data/lib/vagrant/downloaders/http.rb +2 -0
  27. data/lib/vagrant/environment.rb +136 -12
  28. data/lib/vagrant/errors.rb +15 -0
  29. data/lib/vagrant/provisioners.rb +1 -1
  30. data/lib/vagrant/provisioners/base.rb +4 -0
  31. data/lib/vagrant/provisioners/chef.rb +13 -11
  32. data/lib/vagrant/provisioners/{chef_server.rb → chef_client.rb} +5 -5
  33. data/lib/vagrant/provisioners/chef_solo.rb +48 -89
  34. data/lib/vagrant/provisioners/shell.rb +47 -12
  35. data/lib/vagrant/ssh.rb +61 -27
  36. data/lib/vagrant/systems.rb +1 -0
  37. data/lib/vagrant/systems/base.rb +1 -1
  38. data/lib/vagrant/systems/linux.rb +7 -9
  39. data/lib/vagrant/systems/redhat.rb +12 -4
  40. data/lib/vagrant/systems/solaris.rb +9 -4
  41. data/lib/vagrant/systems/suse.rb +9 -0
  42. data/lib/vagrant/ui.rb +12 -5
  43. data/lib/vagrant/util.rb +2 -2
  44. data/lib/vagrant/util/counter.rb +22 -0
  45. data/lib/vagrant/util/platform.rb +1 -2
  46. data/lib/vagrant/util/safe_exec.rb +28 -0
  47. data/lib/vagrant/version.rb +1 -1
  48. data/lib/vagrant/vm.rb +2 -0
  49. data/templates/chef_solo_solo.erb +4 -4
  50. data/templates/commands/init/Vagrantfile.erb +4 -0
  51. data/templates/locales/en.yml +31 -8
  52. data/templates/ssh_config.erb +6 -0
  53. data/test/test_helper.rb +5 -3
  54. data/test/vagrant/action/builder_test.rb +4 -0
  55. data/test/vagrant/action/vm/clear_forwarded_ports_test.rb +18 -38
  56. data/test/vagrant/action/vm/clear_shared_folders_test.rb +7 -16
  57. data/test/vagrant/action/vm/customize_test.rb +12 -5
  58. data/test/vagrant/action/vm/forward_ports_test.rb +12 -7
  59. data/test/vagrant/action/vm/match_mac_address_test.rb +5 -1
  60. data/test/vagrant/action/vm/modify_test.rb +38 -0
  61. data/test/vagrant/action/vm/provision_test.rb +13 -38
  62. data/test/vagrant/action/vm/provisioner_cleanup_test.rb +56 -0
  63. data/test/vagrant/action/vm/share_folders_test.rb +10 -5
  64. data/test/vagrant/action/warden_test.rb +13 -7
  65. data/test/vagrant/config/vm_test.rb +0 -22
  66. data/test/vagrant/downloaders/http_test.rb +2 -0
  67. data/test/vagrant/environment_test.rb +110 -20
  68. data/test/vagrant/provisioners/{chef_server_test.rb → chef_client_test.rb} +2 -2
  69. data/test/vagrant/provisioners/chef_solo_test.rb +16 -173
  70. data/test/vagrant/ssh_test.rb +8 -43
  71. data/test/vagrant/systems/linux_test.rb +9 -19
  72. data/test/vagrant/util/counter_test.rb +29 -0
  73. data/test/vagrant/util/platform_test.rb +2 -2
  74. data/vagrant.gemspec +1 -2
  75. metadata +114 -84
  76. data/lib/vagrant/util/plain_logger.rb +0 -25
  77. data/lib/vagrant/util/resource_logger.rb +0 -63
  78. data/test/vagrant/util/plain_logger_test.rb +0 -17
  79. data/test/vagrant/util/resource_logger_test.rb +0 -78
@@ -2,37 +2,30 @@ module Vagrant
2
2
  class Action
3
3
  module VM
4
4
  class Provision
5
- attr_reader :provisioners
6
-
7
5
  def initialize(app, env)
8
6
  @app = app
9
7
  @env = env
10
8
  @env["provision.enabled"] = true if !@env.has_key?("provision.enabled")
11
- @provisioners = []
12
-
13
- load_provisioners if provisioning_enabled?
14
9
  end
15
10
 
16
11
  def call(env)
12
+ # Instantiate and prepare the provisioners. Preparation must happen here
13
+ # so that shared folders and such can properly take effect.
14
+ provisioners = enabled_provisioners
15
+ provisioners.map { |p| p.prepare }
16
+
17
17
  @app.call(env)
18
18
 
19
- @provisioners.each do |instance|
19
+ # Take prepared provisioners and run the provisioning
20
+ provisioners.each do |instance|
20
21
  @env.ui.info I18n.t("vagrant.actions.vm.provision.beginning", :provisioner => instance.class)
21
22
  instance.provision!
22
23
  end
23
24
  end
24
25
 
25
- def provisioning_enabled?
26
- !@env["config"].vm.provisioners.empty? && @env["provision.enabled"]
27
- end
28
-
29
- def load_provisioners
30
- @env["config"].vm.provisioners.each do |provisioner|
31
- @env.ui.info I18n.t("vagrant.actions.vm.provision.enabled", :provisioner => provisioner.shortcut)
32
-
33
- instance = provisioner.provisioner.new(@env, provisioner.config)
34
- instance.prepare
35
- @provisioners << instance
26
+ def enabled_provisioners
27
+ @env["config"].vm.provisioners.map do |provisioner|
28
+ provisioner.provisioner.new(@env, provisioner.config)
36
29
  end
37
30
  end
38
31
  end
@@ -0,0 +1,26 @@
1
+ module Vagrant
2
+ class Action
3
+ module VM
4
+ class ProvisionerCleanup
5
+ def initialize(app, env)
6
+ @app = app
7
+ @env = env
8
+ end
9
+
10
+ def call(env)
11
+ enabled_provisioners.each do |instance|
12
+ instance.cleanup
13
+ end
14
+
15
+ @app.call(env)
16
+ end
17
+
18
+ def enabled_provisioners
19
+ @env["config"].vm.provisioners.map do |provisioner|
20
+ provisioner.provisioner.new(@env, provisioner.config)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -33,16 +33,18 @@ module Vagrant
33
33
  end
34
34
 
35
35
  def create_metadata
36
- @env.ui.info I18n.t("vagrant.actions.vm.share_folders.creating")
36
+ proc = lambda do |vm|
37
+ @env.ui.info I18n.t("vagrant.actions.vm.share_folders.creating")
37
38
 
38
- shared_folders.each do |name, data|
39
- folder = VirtualBox::SharedFolder.new
40
- folder.name = name
41
- folder.host_path = File.expand_path(data[:hostpath], @env.env.root_path)
42
- @env["vm"].vm.shared_folders << folder
39
+ shared_folders.each do |name, data|
40
+ folder = VirtualBox::SharedFolder.new
41
+ folder.name = name
42
+ folder.host_path = File.expand_path(data[:hostpath], @env.env.root_path)
43
+ vm.shared_folders << folder
44
+ end
43
45
  end
44
46
 
45
- @env["vm"].vm.save
47
+ @env["vm.modify"].call(proc)
46
48
  end
47
49
 
48
50
  def mount_shared_folders
@@ -55,7 +57,13 @@ module Vagrant
55
57
  @env.ui.info(I18n.t("vagrant.actions.vm.share_folders.mounting_entry",
56
58
  :name => name,
57
59
  :guest_path => data[:guestpath]))
58
- @env["vm"].system.mount_shared_folder(ssh, name, data[:guestpath])
60
+
61
+ # Calculate the owner and group
62
+ owner = data[:owner] || @env["config"].ssh.username
63
+ group = data[:group] || @env["config"].ssh.username
64
+
65
+ # Mount the actual folder
66
+ @env["vm"].system.mount_shared_folder(ssh, name, data[:guestpath], owner, group)
59
67
  else
60
68
  # If no guest path is specified, then automounting is disabled
61
69
  @env.ui.info(I18n.t("vagrant.actions.vm.share_folders.nomount_entry",
@@ -25,13 +25,16 @@ module Vagrant
25
25
  # Call the next middleware in the sequence, appending to the stack
26
26
  # of "recoverable" middlewares in case something goes wrong!
27
27
  raise Errors::VagrantInterrupt if env.interrupted?
28
- @stack.unshift(@actions.shift).first.call(env)
28
+ action = @actions.shift
29
+ env["logger"].info("warden") { "Calling action: #{action}" }
30
+ @stack.unshift(action).first.call(env)
29
31
  raise Errors::VagrantInterrupt if env.interrupted?
30
32
  rescue SystemExit
31
33
  # This means that an "exit" or "abort" was called. In these cases,
32
34
  # we just exit immediately.
33
35
  raise
34
36
  rescue Exception => e
37
+ env["logger"].info("warden") { "Error occurred: #{e}" }
35
38
  env["vagrant.error"] = e
36
39
 
37
40
  # Something went horribly wrong. Start the rescue chain then
@@ -46,7 +49,10 @@ module Vagrant
46
49
  # which has already run, in reverse order.
47
50
  def begin_rescue(env)
48
51
  @stack.each do |act|
49
- act.recover(env) if act.respond_to?(:recover)
52
+ if act.respond_to?(:recover)
53
+ env["logger"].info("warden") { "Calling recover: #{act}" }
54
+ act.recover(env)
55
+ end
50
56
  end
51
57
 
52
58
  # Clear stack so that warden down the middleware chain doesn't
@@ -1,11 +1,11 @@
1
1
  module Vagrant
2
2
  module Command
3
3
  class SSHCommand < NamedBase
4
- class_option :execute, :type => :string, :default => false, :aliases => "-e"
4
+ class_option :command, :type => :string, :default => false, :aliases => "-c"
5
5
  register "ssh", "SSH into the currently running Vagrant environment."
6
6
 
7
7
  def execute
8
- if options[:execute]
8
+ if options[:command]
9
9
  ssh_execute
10
10
  else
11
11
  ssh_connect
@@ -16,8 +16,8 @@ module Vagrant
16
16
 
17
17
  def ssh_execute
18
18
  ssh_vm.ssh.execute do |ssh|
19
- ssh_vm.env.ui.info I18n.t("vagrant.commands.ssh.execute", :command => options[:execute])
20
- ssh.exec!(options[:execute]) do |channel, type, data|
19
+ ssh_vm.env.ui.info I18n.t("vagrant.commands.ssh.command", :command => options[:command])
20
+ ssh.exec!(options[:command]) do |channel, type, data|
21
21
  ssh_vm.env.ui.info "#{data}"
22
22
  end
23
23
  end
@@ -14,11 +14,13 @@ module Vagrant
14
14
  vm.ssh.check_key_permissions(vm.env.config.ssh.private_key_path)
15
15
 
16
16
  $stdout.puts(Util::TemplateRenderer.render("ssh_config", {
17
- :host_key => options[:host] || "vagrant",
17
+ :host_key => options[:host] || vm.name || "vagrant",
18
18
  :ssh_host => vm.env.config.ssh.host,
19
19
  :ssh_user => vm.env.config.ssh.username,
20
20
  :ssh_port => vm.ssh.port,
21
- :private_key_path => vm.env.config.ssh.private_key_path
21
+ :private_key_path => vm.env.config.ssh.private_key_path,
22
+ :forward_agent => vm.env.config.ssh.forward_agent,
23
+ :forward_x11 => vm.env.config.ssh.forward_x11
22
24
  }))
23
25
  end
24
26
  end
@@ -6,6 +6,7 @@ module Vagrant
6
6
  attr_accessor :username
7
7
  attr_accessor :host
8
8
  attr_accessor :forwarded_port_key
9
+ attr_accessor :forwarded_port_destination
9
10
  attr_accessor :max_tries
10
11
  attr_accessor :timeout
11
12
  attr_writer :private_key_path
@@ -17,6 +18,8 @@ module Vagrant
17
18
  def initialize
18
19
  @sudo_shell = "bash"
19
20
  @port = nil
21
+ @forward_agent = false
22
+ @forward_x11 = false
20
23
  end
21
24
 
22
25
  def private_key_path
@@ -20,8 +20,6 @@ module Vagrant
20
20
  attr_reader :network_options
21
21
  attr_reader :provisioners
22
22
  attr_accessor :disk_image_format
23
- attr_writer :shared_folder_uid
24
- attr_writer :shared_folder_gid
25
23
  attr_accessor :system
26
24
 
27
25
  def initialize
@@ -46,7 +44,10 @@ module Vagrant
46
44
  def share_folder(name, guestpath, hostpath, opts=nil)
47
45
  @shared_folders[name] = {
48
46
  :guestpath => guestpath,
49
- :hostpath => hostpath
47
+ :hostpath => hostpath,
48
+ :owner => nil,
49
+ :group => nil,
50
+ :nfs => false
50
51
  }.merge(opts || {})
51
52
  end
52
53
 
@@ -73,14 +74,6 @@ module Vagrant
73
74
  raise Errors::VagrantError, :_key => :provisioner_equals_not_supported
74
75
  end
75
76
 
76
- def shared_folder_uid
77
- @shared_folder_uid || env.config.ssh.username
78
- end
79
-
80
- def shared_folder_gid
81
- @shared_folder_gid || env.config.ssh.username
82
- end
83
-
84
77
  def customize(&block)
85
78
  push_proc(&block)
86
79
  end
@@ -125,11 +118,22 @@ module Vagrant
125
118
  :name => name,
126
119
  :path => options[:hostpath]))
127
120
  end
121
+
122
+ if options[:nfs] && (options[:owner] || options[:group])
123
+ # Owner/group don't work with NFS
124
+ errors.add(I18n.t("vagrant.config.vm.shared_folder_nfs_owner_group",
125
+ :name => name))
126
+ end
128
127
  end
129
128
 
130
129
  # Each provisioner can validate itself
131
130
  provisioners.each do |prov|
132
- prov.validate(errors)
131
+ # TODO: Remove at some point
132
+ if prov.shortcut == :chef_server
133
+ errors.add(I18n.t("vagrant.config.vm.provisioner_chef_server_changed"))
134
+ else
135
+ prov.validate(errors)
136
+ end
133
137
  end
134
138
  end
135
139
  end
@@ -33,6 +33,8 @@ module Vagrant
33
33
  # TODO: Error on some redirect limit
34
34
  download!(response["Location"], destination_file)
35
35
  return
36
+ elsif !response.is_a?(Net::HTTPOK)
37
+ raise Errors::DownloaderHTTPStatusError, :status => response.code
36
38
  end
37
39
 
38
40
  total = response.content_length
@@ -1,15 +1,15 @@
1
1
  require 'pathname'
2
2
  require 'fileutils'
3
+ require 'logger'
3
4
 
4
5
  module Vagrant
5
6
  # Represents a single Vagrant environment. A "Vagrant environment" is
6
7
  # defined as basically a folder with a "Vagrantfile." This class allows
7
8
  # access to the VMs, CLI, etc. all in the scope of this environment.
8
9
  class Environment
9
- ROOTFILE_NAME = "Vagrantfile"
10
10
  HOME_SUBDIRS = ["tmp", "boxes", "logs"]
11
11
  DEFAULT_VM = :default
12
- DEFAULT_HOME = "~/.vagrant"
12
+ DEFAULT_HOME = "~/.vagrant.d"
13
13
 
14
14
  # Parent environment (in the case of multi-VMs)
15
15
  attr_reader :parent
@@ -17,6 +17,9 @@ module Vagrant
17
17
  # The `cwd` that this environment represents
18
18
  attr_reader :cwd
19
19
 
20
+ # The valid name for a Vagrantfile for this environment.
21
+ attr_reader :vagrantfile_name
22
+
20
23
  # The single VM that this environment represents, in the case of
21
24
  # multi-VM.
22
25
  attr_accessor :vm
@@ -36,7 +39,7 @@ module Vagrant
36
39
  def check_virtualbox!
37
40
  version = VirtualBox.version
38
41
  raise Errors::VirtualBoxNotDetected if version.nil?
39
- raise Errors::VirtualBoxInvalidVersion, :version => version.to_s if version.to_f < 4.0 || version.to_f >= 4.1
42
+ raise Errors::VirtualBoxInvalidVersion, :version => version.to_s if version.to_f < 4.1 || version.to_f >= 4.2
40
43
  rescue Errors::VirtualBoxNotDetected
41
44
  # On 64-bit Windows, show a special error. This error is a subclass
42
45
  # of VirtualBoxNotDetected, so libraries which use Vagrant can just
@@ -58,16 +61,30 @@ module Vagrant
58
61
  :parent => nil,
59
62
  :vm => nil,
60
63
  :cwd => nil,
64
+ :vagrantfile_name => nil,
65
+ :lock_path => nil
61
66
  }.merge(opts || {})
62
67
 
68
+ # Set the default working directory to look for the vagrantfile
63
69
  opts[:cwd] ||= Dir.pwd
64
70
  opts[:cwd] = Pathname.new(opts[:cwd])
65
71
 
72
+ # Set the default vagrantfile name, which can be either Vagrantfile
73
+ # or vagrantfile (capital for backwards compatibility)
74
+ opts[:vagrantfile_name] ||= ["Vagrantfile", "vagrantfile"]
75
+ opts[:vagrantfile_name] = [opts[:vagrantfile_name]] if !opts[:vagrantfile_name].is_a?(Array)
76
+
66
77
  opts.each do |key, value|
67
78
  instance_variable_set("@#{key}".to_sym, opts[key])
68
79
  end
69
80
 
70
81
  @loaded = false
82
+ @lock_acquired = false
83
+
84
+ logger.info("environment") { "Environment initialized (#{self})" }
85
+ logger.info("environment") { " - cwd: #{cwd}" }
86
+ logger.info("environment") { " - parent: #{parent}" }
87
+ logger.info("environment") { " - vm: #{vm}" }
71
88
  end
72
89
 
73
90
  #---------------------------------------------------------------
@@ -86,7 +103,33 @@ module Vagrant
86
103
  #
87
104
  # @return [Pathname]
88
105
  def home_path
106
+ return parent.home_path if parent
107
+ return @_home_path if defined?(@_home_path)
108
+
89
109
  @_home_path ||= Pathname.new(File.expand_path(ENV["VAGRANT_HOME"] || DEFAULT_HOME))
110
+ logger.info("environment") { "Home path: #{@_home_path}" }
111
+
112
+ # This is the old default that Vagrant used to be put things into
113
+ # up until Vagrant 0.8.0. We keep around an automatic migration
114
+ # script here in case any old users upgrade.
115
+ old_home = File.expand_path("~/.vagrant")
116
+ if File.exists?(old_home) && File.directory?(old_home)
117
+ logger.info("environment") { "Found both an old and new Vagrantfile. Migration initiated." }
118
+
119
+ # We can't migrate if the home directory already exists
120
+ if File.exists?(@_home_path)
121
+ ui.warn I18n.t("vagrant.general.home_dir_migration_failed",
122
+ :old => old_home,
123
+ :new => @_home_path.to_s)
124
+ else
125
+ # If the new home path doesn't exist, simply transition to it
126
+ ui.info I18n.t("vagrant.general.moving_home_dir", :directory => @_home_path)
127
+ FileUtils.mv(old_home, @_home_path)
128
+ end
129
+ end
130
+
131
+ # Return the home path
132
+ @_home_path
90
133
  end
91
134
 
92
135
  # The path to the Vagrant tmp directory
@@ -249,7 +292,27 @@ module Vagrant
249
292
  # @return [Logger]
250
293
  def logger
251
294
  return parent.logger if parent
252
- @logger ||= Util::ResourceLogger.new(resource, self)
295
+ return @logger if @logger
296
+
297
+ # Figure out where the output should go to.
298
+ output = nil
299
+ if ENV["VAGRANT_LOG"] == "STDOUT"
300
+ output = STDOUT
301
+ elsif ENV["VAGRANT_LOG"] == "NULL"
302
+ output = nil
303
+ elsif ENV["VAGRANT_LOG"]
304
+ output = ENV["VAGRANT_LOG"]
305
+ else
306
+ output = nil #log_path.join("#{Time.now.to_i}.log")
307
+ end
308
+
309
+ # Create the logger and custom formatter
310
+ @logger = Logger.new(output)
311
+ @logger.formatter = Proc.new do |severity, datetime, progname, msg|
312
+ "#{datetime} - #{progname} - [#{resource}] #{msg}\n"
313
+ end
314
+
315
+ @logger
253
316
  end
254
317
 
255
318
  # The root path is the path where the top-most (loaded last)
@@ -261,7 +324,13 @@ module Vagrant
261
324
  return @root_path if defined?(@root_path)
262
325
 
263
326
  root_finder = lambda do |path|
264
- return path if File.exist?(File.join(path.to_s, ROOTFILE_NAME))
327
+ # Note: To remain compatible with Ruby 1.8, we have to use
328
+ # a `find` here instead of an `each`.
329
+ found = vagrantfile_name.find do |rootfile|
330
+ File.exist?(File.join(path.to_s, rootfile))
331
+ end
332
+
333
+ return path if found
265
334
  return nil if path.root? || !File.exist?(path)
266
335
  root_finder.call(path.parent)
267
336
  end
@@ -269,6 +338,39 @@ module Vagrant
269
338
  @root_path = root_finder.call(cwd)
270
339
  end
271
340
 
341
+ # This returns the path which Vagrant uses to determine the location
342
+ # of the file lock. This is specific to each operating system.
343
+ def lock_path
344
+ @lock_path || tmp_path.join("vagrant.lock")
345
+ end
346
+
347
+ # This locks Vagrant for the duration of the block passed to this
348
+ # method. During this time, any other environment which attempts
349
+ # to lock which points to the same lock file will fail.
350
+ def lock
351
+ # This allows multiple locks in the same process to be nested
352
+ return yield if @lock_acquired
353
+
354
+ File.open(lock_path, "w+") do |f|
355
+ # The file locking fails only if it returns "false." If it
356
+ # succeeds it returns a 0, so we must explicitly check for
357
+ # the proper error case.
358
+ raise Errors::EnvironmentLockedError if f.flock(File::LOCK_EX | File::LOCK_NB) === false
359
+
360
+ begin
361
+ # Mark that we have a lock
362
+ @lock_acquired = true
363
+
364
+ yield
365
+ ensure
366
+ # We need to make sure that no matter what this is always
367
+ # reset to false so we don't think we have a lock when we
368
+ # actually don't.
369
+ @lock_acquired = false
370
+ end
371
+ end
372
+ end
373
+
272
374
  #---------------------------------------------------------------
273
375
  # Config Methods
274
376
  #---------------------------------------------------------------
@@ -301,7 +403,15 @@ module Vagrant
301
403
  def load!
302
404
  if !loaded?
303
405
  @loaded = true
304
- self.class.check_virtualbox!
406
+
407
+ if !parent
408
+ # We only need to check the virtualbox version once, so do it on
409
+ # the parent most environment and then forget about it
410
+ logger.info("environment") { "Environment not loaded. Checking virtual box version..." }
411
+ self.class.check_virtualbox!
412
+ end
413
+
414
+ logger.info("environment") { "Loading configuration..." }
305
415
  load_config!
306
416
  end
307
417
 
@@ -327,9 +437,26 @@ module Vagrant
327
437
  @config_loader ||= Config.new(parent ? parent.config_loader : nil)
328
438
  @config_loader.load_order = [:default, :box, :home, :root, :sub_vm]
329
439
  @config_loader.set(:default, File.expand_path("config/default.rb", Vagrant.source_root))
330
- @config_loader.set(:box, File.join(box.directory, ROOTFILE_NAME)) if !first_run && vm && box
331
- @config_loader.set(:home, File.join(home_path, ROOTFILE_NAME)) if !first_run && home_path
332
- @config_loader.set(:root, File.join(root_path, ROOTFILE_NAME)) if root_path
440
+
441
+ vagrantfile_name.each do |rootfile|
442
+ if !first_run && vm && box
443
+ # We load the box Vagrantfile
444
+ box_vagrantfile = box.directory.join(rootfile)
445
+ @config_loader.set(:box, box_vagrantfile) if box_vagrantfile.exist?
446
+ end
447
+
448
+ if !first_run && home_path
449
+ # Load the home Vagrantfile
450
+ home_vagrantfile = home_path.join(rootfile)
451
+ @config_loader.set(:home, home_vagrantfile) if home_vagrantfile.exist?
452
+ end
453
+
454
+ if root_path
455
+ # Load the Vagrantfile in this directory
456
+ root_vagrantfile = root_path.join(rootfile)
457
+ @config_loader.set(:root, root_vagrantfile) if root_vagrantfile.exist?
458
+ end
459
+ end
333
460
 
334
461
  # If this environment is representing a sub-VM, then we push that
335
462
  # proc on as the last configuration.
@@ -342,9 +469,6 @@ module Vagrant
342
469
  # value in the config ivar.
343
470
  @config = @config_loader.load(self)
344
471
 
345
- # (re)load the logger
346
- @logger = nil
347
-
348
472
  if first_run
349
473
  # After the first run we want to load the configuration again since
350
474
  # it can change due to box Vagrantfiles and home directory Vagrantfiles