class Vagrant::MachineIndex::Entry
An entry in the MachineIndex
.
Attributes
Extra data to store with the index entry. This can be anything and is treated like a general global state bag.
@return [Hash]
The last known state of this machine.
@return [MachineState]
The unique ID for this entry. This is not the ID for the machine itself (which is provider-specific and in the data directory).
@return [String]
The path for the “local data” directory for the environment.
@return [Pathname]
The name of the machine.
@return [String]
The name of the provider.
@return [String]
The last known state of this machine.
@return [String]
The last time this entry was updated.
@return [DateTime]
The valid Vagrantfile
filenames for this environment.
@return [Array<String>]
The path to the Vagrantfile
that manages this machine.
@return [Pathname]
Public Class Methods
Initializes an entry.
The parameter given should be nil if this is being created publicly.
# File lib/vagrant/machine_index.rb, line 416 def initialize(id=nil, raw=nil) @logger = Log4r::Logger.new("vagrant::machine_index::entry") @extra_data = {} @id = id # Do nothing if we aren't given a raw value. Otherwise, parse it. return if !raw @local_data_path = raw["local_data_path"] @name = raw["name"] @provider = raw["provider"] @state = raw["state"] @full_state = raw["full_state"] @vagrantfile_name = raw["vagrantfile_name"] @vagrantfile_path = raw["vagrantfile_path"] # TODO(mitchellh): parse into a proper datetime @updated_at = raw["updated_at"] @extra_data = raw["extra_data"] || {} # Be careful with the paths @local_data_path = nil if @local_data_path == "" @vagrantfile_path = nil if @vagrantfile_path == "" # Convert to proper types @local_data_path = Pathname.new(@local_data_path) if @local_data_path @vagrantfile_path = Pathname.new(@vagrantfile_path) if @vagrantfile_path end
Public Instance Methods
Converts to the structure used by the JSON
# File lib/vagrant/machine_index.rb, line 505 def to_json_struct { "local_data_path" => @local_data_path.to_s, "name" => @name, "provider" => @provider, "state" => @state, "vagrantfile_name" => @vagrantfile_name, "vagrantfile_path" => @vagrantfile_path.to_s, "updated_at" => @updated_at, "extra_data" => @extra_data, } end
Creates a {Vagrant::Environment} for this entry.
@return [Vagrant::Environment]
# File lib/vagrant/machine_index.rb, line 493 def vagrant_env(home_path, opts={}) Vagrant::Util::SilenceWarnings.silence! do Environment.new({ cwd: @vagrantfile_path, home_path: home_path, local_data_path: @local_data_path, vagrantfile_name: @vagrantfile_name, }.merge(opts)) end end
Returns boolean true if this entry appears to be valid. The criteria for being valid:
* Vagrantfile directory exists * Vagrant environment contains a machine with this name and provider.
This method is slow. It should be used with care.
@param [Pathname] home_path The home path for the Vagrant
environment.
@return [Boolean]
# File lib/vagrant/machine_index.rb, line 456 def valid?(home_path) return false if !vagrantfile_path return false if !vagrantfile_path.directory? # Create an environment so we can determine the active # machines... found = false env = vagrant_env(home_path) env.active_machines.each do |name, provider| if name.to_s == self.name.to_s && provider.to_s == self.provider.to_s found = true break end end # If an active machine of the same name/provider was not # found, it is already false. return false if !found # Get the machine machine = nil begin machine = env.machine(self.name.to_sym, self.provider.to_sym) rescue Errors::MachineNotFound return false end # Refresh the machine state return false if machine.state.id == MachineState::NOT_CREATED_ID true end