Module: Vagrant::Config

Defined in:
lib/vagrant/config.rb,
lib/vagrant/config/v2.rb,
lib/vagrant/config/v1.rb,
lib/vagrant/config/loader.rb,
lib/vagrant/config/v1/root.rb,
lib/vagrant/config/v2/root.rb,
lib/vagrant/config/v1/loader.rb,
lib/vagrant/config/v2/loader.rb,
lib/vagrant/config/container.rb,
lib/vagrant/config/version_base.rb,
lib/vagrant/config/error_recorder.rb

Defined Under Namespace

Modules: V1, V2 Classes: Container, ErrorRecorder, Loader, VersionBase

Constant Summary

CONFIGURE_MUTEX =

This is a mutex used to guarantee that only one thread can load procs at any given time.

Mutex.new
VERSIONS =

This is the registry which keeps track of what configuration versions are available, mapped by the version string used in Vagrant.configure calls.

Registry.new
VERSIONS_ORDER =

This is the order of versions. This is used by the loader to figure out how to "upgrade" versions up to the desired (current) version. The current version is always considered to be the last version in this list.

["1", "2"]
CURRENT_VERSION =
VERSIONS_ORDER.last

Class Method Summary (collapse)

Class Method Details

+ (Object) capture_configures

This is a method which will yield to a block and will capture all Vagrant.configure calls, returning an array of Procs.

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.



50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/vagrant/config.rb', line 50

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

+ (Object) run(version = "1", &block)

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.



38
39
40
41
42
# File 'lib/vagrant/config.rb', line 38

def self.run(version="1", &block)
  # Store it for later
  @last_procs ||= []
  @last_procs << [version, block]
end