class Fission::Action::VM::Lister
Public Instance Methods
Public: Provides all of the VMs which are located in the VM directory.
Examples
Fission::VM.all.data # => [<Fission::VM:0x007fd6fa24c5d8 @name="foo">, <Fission::VM:0x007fd6fa23c5e8 @name="bar">]
Returns a Response with the result. If successful, the Response's data attribute will be an Array of VM objects. If no VMs are found, the Response's data attribute will be an empty Array. If there is an error, an unsuccessful Response will be returned.
# File lib/fission/action/vm/lister.rb, line 20 def all vm_dirs = Dir[File.join Fission.config['vm_dir'], '*.vmwarevm'].select do |d| File.directory? d end response = Response.new :code => 0 response.data = vm_dirs.collect do |dir| Fission::VM.new(File.basename dir, '.vmwarevm') end response end
Public: Provides all of the VMs which are currently running.
Examples
Fission::VM.all_running.data # => [<Fission::VM:0x007fd6fa24c5d8 @name="foo">, <Fission::VM:0x007fd6fa23c5e8 @name="bar">]
Returns a Response with the result. If successful, the Response's data attribute will be an Array of VM objects which are running. If no VMs are running, the Response's data attribute will be an empty Array. If there is an error, an unsuccessful Response will be returned.
# File lib/fission/action/vm/lister.rb, line 46 def all_running command = "#{Fission.config['vmrun_cmd']} list" command_executor = Fission::Action::ShellExecutor.new command result = command_executor.execute response = Response.new :code => result['process_status'].exitstatus if response.successful? response.data = get_vm_objects_from_list_output result['output'] else response.message = result['output'] end response end
Public: Provides a list of all of the VMs and their associated status
Examples
Fission::VM.all_with_status.data # => { 'vm1' => 'running', 'vm2' => 'suspended', 'vm3' => 'not running'}
Returns a Response with the result. If successful, the Response's data attribute will be a Hash of with the VM names as keys and their status as the values. If there is an error, an unsuccessful Repsonse will be returned.
# File lib/fission/action/vm/lister.rb, line 73 def all_with_status all_response = all return all_response unless all_response.successful? all_vms = all_response.data running_response = all_running return running_response unless running_response.successful? response = Response.new :code => 0 @all_running_vm_names = running_response.data.collect { |v| v.name } response.data = all_vms.inject({}) do |result, vm| result[vm.name] = determine_status vm result end response end
Private Instance Methods
Internal: Helper to determines the status of a VM.
vm - The VM object.
Examples:
@lister.determine_status my_vm # => 'suspended'
Returns a String of the status.
# File lib/fission/action/vm/lister.rb, line 105 def determine_status(vm) return 'running' if @all_running_vm_names.include? vm.name return 'suspended' if vm.suspend_file_exists? return 'not running' end
Internal: Helper to get VM objects from the output of running VMs.
output - output from the list command.
Examples:
@lister.get_vm_objects_from_list_output my_output # => [<Fission::VM:0x007fd6fa24c5d8 @name="foo">, <Fission::VM:0x007fd6fa23c5e8 @name="bar">]
Returns an Array of VM objects.
# File lib/fission/action/vm/lister.rb, line 122 def get_vm_objects_from_list_output(output) vms = output.split("\n").select do |vm| vm.include?('.vmx') && File.exists?(vm) && File.extname(vm) == '.vmx' end vms.collect do |vm| Fission::VM.new File.basename(File.dirname(vm), '.vmwarevm') end end