vagrant/lib/vagrant/config.rb

50 lines
1.7 KiB
Ruby

module Vagrant
module Config
autoload :Base, 'vagrant/config/base'
autoload :Container, 'vagrant/config/container'
autoload :ErrorRecorder, 'vagrant/config/error_recorder'
autoload :Loader, 'vagrant/config/loader'
autoload :Top, 'vagrant/config/top'
autoload :NFSConfig, 'vagrant/config/nfs'
autoload :PackageConfig, 'vagrant/config/package'
autoload :SSHConfig, 'vagrant/config/ssh'
autoload :VagrantConfig, 'vagrant/config/vagrant'
autoload :VMConfig, 'vagrant/config/vm'
CONFIGURE_MUTEX = Mutex.new
# This is the method which is called by all Vagrantfiles to configure Vagrant.
# This method expects a block which accepts a single argument representing
# an instance of the {Config::Top} class.
#
# Note that the block is not run immediately. Instead, it's proc is stored
# away for execution later.
def self.run(&block)
# Store it for later
@last_procs ||= []
@last_procs << block
end
# This is a method which will yield to a block and will capture all
# ``Vagrant.configure`` calls, returning an array of `Proc`s.
#
# Wrapping this around anytime you call code which loads configurations
# will force a mutex so that procs never get mixed up. This keeps
# the configuration loading part of Vagrant thread-safe.
def self.capture_configures
CONFIGURE_MUTEX.synchronize do
# Reset the last procs so that we start fresh
@last_procs = []
# Yield to allow the caller to do whatever loading needed
yield
# Return the last procs we've seen while still in the mutex,
# knowing we're safe.
return @last_procs
end
end
end
end