Class: Vagrant::MachineIndex::Entry

Inherits:
Object
  • Object
show all
Defined in:
lib/vagrant/machine_index.rb

Overview

An entry in the MachineIndex.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(id = nil, raw = nil) ⇒ Entry

Initializes an entry.

The parameter given should be nil if this is being created publicly.



422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
# File 'lib/vagrant/machine_index.rb', line 422

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"]
  @architecture     = raw["architecture"]
  @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

Instance Attribute Details

#architectureString

The name of the architecture.

Returns:

  • (String)


385
386
387
# File 'lib/vagrant/machine_index.rb', line 385

def architecture
  @architecture
end

#extra_dataHash

Extra data to store with the index entry. This can be anything and is treated like a general global state bag.

Returns:

  • (Hash)


416
417
418
# File 'lib/vagrant/machine_index.rb', line 416

def extra_data
  @extra_data
end

#full_stateMachineState

The last known state of this machine.

Returns:



395
396
397
# File 'lib/vagrant/machine_index.rb', line 395

def full_state
  @full_state
end

#idString (readonly)

The unique ID for this entry. This is not the ID for the machine itself (which is provider-specific and in the data directory).

Returns:

  • (String)


365
366
367
# File 'lib/vagrant/machine_index.rb', line 365

def id
  @id
end

#local_data_pathPathname

The path for the "local data" directory for the environment.

Returns:

  • (Pathname)


370
371
372
# File 'lib/vagrant/machine_index.rb', line 370

def local_data_path
  @local_data_path
end

#nameString

The name of the machine.

Returns:

  • (String)


375
376
377
# File 'lib/vagrant/machine_index.rb', line 375

def name
  @name
end

#providerString

The name of the provider.

Returns:

  • (String)


380
381
382
# File 'lib/vagrant/machine_index.rb', line 380

def provider
  @provider
end

#stateString

The last known state of this machine.

Returns:

  • (String)


390
391
392
# File 'lib/vagrant/machine_index.rb', line 390

def state
  @state
end

#updated_atDateTime (readonly)

The last time this entry was updated.

Returns:

  • (DateTime)


410
411
412
# File 'lib/vagrant/machine_index.rb', line 410

def updated_at
  @updated_at
end

#vagrantfile_nameArray<String>

The valid Vagrantfile filenames for this environment.

Returns:

  • (Array<String>)


400
401
402
# File 'lib/vagrant/machine_index.rb', line 400

def vagrantfile_name
  @vagrantfile_name
end

#vagrantfile_pathPathname

The path to the Vagrantfile that manages this machine.

Returns:

  • (Pathname)


405
406
407
# File 'lib/vagrant/machine_index.rb', line 405

def vagrantfile_path
  @vagrantfile_path
end

Instance Method Details

#to_json_structObject

Converts to the structure used by the JSON



512
513
514
515
516
517
518
519
520
521
522
523
524
# File 'lib/vagrant/machine_index.rb', line 512

def to_json_struct
  {
    "local_data_path"  => @local_data_path.to_s,
    "name"             => @name,
    "provider"         => @provider,
    "architecture"     => @architecture,
    "state"            => @state,
    "vagrantfile_name" => @vagrantfile_name,
    "vagrantfile_path" => @vagrantfile_path.to_s,
    "updated_at"       => @updated_at,
    "extra_data"       => @extra_data,
  }
end

#vagrant_env(home_path, opts = {}) ⇒ Vagrant::Environment

Creates a Environment for this entry.



500
501
502
503
504
505
506
507
508
509
# File 'lib/vagrant/machine_index.rb', line 500

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

#valid?(home_path) ⇒ Boolean

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.

Parameters:

  • home_path (Pathname)

    The home path for the Vagrant environment.

Returns:

  • (Boolean)


463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
# File 'lib/vagrant/machine_index.rb', line 463

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