Class: Fission::Action::Snapshot::Deleter

Inherits:
Object
  • Object
show all
Defined in:
lib/fission/action/snapshot/deleter.rb

Instance Method Summary collapse

Constructor Details

#initialize(vm) ⇒ Deleter

Internal: Creates a new SnapshotDeleter object. This accepts a VM object.

vm - An instance of VM

Examples:

Fission::Action::SnapshotDeleter.new @my_vm

Returns a new SnapshotDeleter object



17
18
19
# File 'lib/fission/action/snapshot/deleter.rb', line 17

def initialize(vm)
  @vm = vm
end

Instance Method Details

#delete_snapshot(name) ⇒ Object

Public: Deletes a snapshot for a VM. The snapshot to delete must exist. If the Fusion GUI is running, then the VM must also be running.

name - The name of the snapshot to delete.

Examples

@deleter.delete_snapshot('foo_snap_1')

Returns a Response with the result. If successful, the Response’s data attribute will be nil. If there is an error, an unsuccessful Response will be returned.



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/fission/action/snapshot/deleter.rb', line 33

def delete_snapshot(name)
  unless @vm.exists?
    return Response.new :code => 1, :message => 'VM does not exist'
  end

  if Fusion.running?
    running_response = @vm.running?
    return running_response unless running_response.successful?

    unless running_response.data
      message = 'A snapshot cannot be deleted when the GUI is running '
      message << 'and the VM is not running.'
      return Response.new :code => 1, :message => message
    end
  end

  conf_file_response = @vm.conf_file
  return conf_file_response unless conf_file_response.successful?

  snapshots_response = @vm.snapshots
  return snapshots_response unless snapshots_response.successful?

  unless snapshots_response.data.include? name
    message = "Unable to find a snapshot named '#{name}'."
    return Response.new :code => 1, :message => message
  end

  command = "#{vmrun_cmd} deleteSnapshot "
  command << "'#{conf_file_response.data}' \"#{name}\" 2>&1"

  command_exec = Fission::Action::ShellExecutor.new command
  Response.from_shell_executor command_exec.execute
end