Class: Vagrant::MachineIndex::Entry
- Inherits:
-
Object
- Object
- Vagrant::MachineIndex::Entry
- Defined in:
- lib/vagrant/machine_index.rb
Overview
An entry in the MachineIndex.
Instance Attribute Summary collapse
-
#extra_data ⇒ Hash
Extra data to store with the index entry.
-
#id ⇒ String
readonly
The unique ID for this entry.
-
#local_data_path ⇒ Pathname
The path for the "local data" directory for the environment.
-
#name ⇒ String
The name of the machine.
-
#provider ⇒ String
The name of the provider.
-
#state ⇒ String
The last known state of this machine.
-
#updated_at ⇒ DateTime
readonly
The last time this entry was updated.
-
#vagrantfile_name ⇒ Array<String>
The valid Vagrantfile filenames for this environment.
-
#vagrantfile_path ⇒ Pathname
The path to the Vagrantfile that manages this machine.
Instance Method Summary collapse
-
#initialize(id = nil, raw = nil) ⇒ Entry
constructor
Initializes an entry.
-
#to_json_struct ⇒ Object
Converts to the structure used by the JSON.
-
#vagrant_env(home_path, **opts) ⇒ Vagrant::Environment
Creates a Environment for this entry.
-
#valid?(home_path) ⇒ Boolean
Returns boolean true if this entry appears to be valid.
Constructor Details
#initialize(id = nil, raw = nil) ⇒ Entry
Initializes an entry.
The parameter given should be nil if this is being created publicly.
380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 |
# File 'lib/vagrant/machine_index.rb', line 380 def initialize(id=nil, raw=nil) @extra_data = {} # Do nothing if we aren't given a raw value. Otherwise, parse it. return if !raw @id = id @local_data_path = raw["local_data_path"] @name = raw["name"] @provider = raw["provider"] @state = raw["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
#extra_data ⇒ Hash
Extra data to store with the index entry. This can be anything and is treated like a general global state bag.
374 375 376 |
# File 'lib/vagrant/machine_index.rb', line 374 def extra_data @extra_data end |
#id ⇒ String (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).
333 334 335 |
# File 'lib/vagrant/machine_index.rb', line 333 def id @id end |
#local_data_path ⇒ Pathname
The path for the "local data" directory for the environment.
338 339 340 |
# File 'lib/vagrant/machine_index.rb', line 338 def local_data_path @local_data_path end |
#name ⇒ String
The name of the machine.
343 344 345 |
# File 'lib/vagrant/machine_index.rb', line 343 def name @name end |
#provider ⇒ String
The name of the provider.
348 349 350 |
# File 'lib/vagrant/machine_index.rb', line 348 def provider @provider end |
#state ⇒ String
The last known state of this machine.
353 354 355 |
# File 'lib/vagrant/machine_index.rb', line 353 def state @state end |
#updated_at ⇒ DateTime (readonly)
The last time this entry was updated.
368 369 370 |
# File 'lib/vagrant/machine_index.rb', line 368 def updated_at @updated_at end |
#vagrantfile_name ⇒ Array<String>
The valid Vagrantfile filenames for this environment.
358 359 360 |
# File 'lib/vagrant/machine_index.rb', line 358 def vagrantfile_name @vagrantfile_name end |
#vagrantfile_path ⇒ Pathname
The path to the Vagrantfile that manages this machine.
363 364 365 |
# File 'lib/vagrant/machine_index.rb', line 363 def vagrantfile_path @vagrantfile_path end |
Instance Method Details
#to_json_struct ⇒ Object
Converts to the structure used by the JSON
467 468 469 470 471 472 473 474 475 476 477 478 |
# File 'lib/vagrant/machine_index.rb', line 467 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 |
#vagrant_env(home_path, **opts) ⇒ Vagrant::Environment
Creates a Environment for this entry.
455 456 457 458 459 460 461 462 463 464 |
# File 'lib/vagrant/machine_index.rb', line 455 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.
418 419 420 421 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 450 |
# File 'lib/vagrant/machine_index.rb', line 418 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 |