50 lines
1.7 KiB
Ruby
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
|