diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb b/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb index a3d2a998a4..6dcf8732ed 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb @@ -1715,8 +1715,8 @@ class VirtualMachine # Create a snapshot for the VM def create_snapshot(snap_id, snap_name) snapshot_hash = { - :name => snap_id, - :description => snap_name, + :name => snap_name, + :description => "OpenNebula's snapshot at #{Time.now}", :memory => true, :quiesce => true } @@ -1742,7 +1742,7 @@ class VirtualMachine until snapshot_created || elapsed_minutes == 1440 if !!@item['snapshot'] current_snapshot = @item['snapshot.currentSnapshot'] rescue nil - snapshot_found = find_snapshot(@item['snapshot.rootSnapshotList'], snapshot_name) + snapshot_found = find_snapshot(@item['snapshot.rootSnapshotList'], snap_name) snapshot_created = !!snapshot_found && !!current_snapshot && current_snapshot._ref == snapshot_found._ref end sleep(60) @@ -1754,10 +1754,10 @@ class VirtualMachine end # Revert to a VM snapshot - def revert_snapshot(snap_id) + def revert_snapshot(snap_id, snap_name) snapshot_list = self["snapshot.rootSnapshotList"] - snapshot = find_snapshot_in_list(snapshot_list, snap_id) + snapshot = find_snapshot_in_list(snapshot_list, snap_id, snap_name) return nil if !snapshot @@ -1770,10 +1770,10 @@ class VirtualMachine end # Delete VM snapshot - def delete_snapshot(snap_id) + def delete_snapshot(snap_id, snap_name) snapshot_list = self["snapshot.rootSnapshotList"] - snapshot = find_snapshot_in_list(snapshot_list, snap_id) + snapshot = find_snapshot_in_list(snapshot_list, snap_id, snap_name) return nil if !snapshot @@ -1788,12 +1788,12 @@ class VirtualMachine end end - def find_snapshot_in_list(list, snap_id) + def find_snapshot_in_list(list, snap_id, snap_name) list.each do |i| - if i.name == snap_id.to_s + if i.name == snap_id.to_s || i.name == snap_name.to_s return i.snapshot elsif !i.childSnapshotList.empty? - snap = find_snapshot_in_list(i.childSnapshotList, snap_id) + snap = find_snapshot_in_list(i.childSnapshotList, snap_id, snap_name) return snap if snap end end rescue nil diff --git a/src/vmm_mad/remotes/vcenter/snapshot_delete b/src/vmm_mad/remotes/vcenter/snapshot_delete index dab7de7b43..eaeef5e910 100755 --- a/src/vmm_mad/remotes/vcenter/snapshot_delete +++ b/src/vmm_mad/remotes/vcenter/snapshot_delete @@ -31,6 +31,7 @@ require 'vcenter_driver' vm_ref = ARGV[0] snap_id = ARGV[1] +vm_id = ARGV[2] vc_cluster_name = ARGV[3] host = VCenterDriver::VIHelper.find_by_name(OpenNebula::HostPool, vc_cluster_name) @@ -41,7 +42,11 @@ begin vm = VCenterDriver::VirtualMachine.new_from_ref(vm_ref, vi_client) - vm.delete_snapshot(snap_id) + # Get snapshot name + one_vm = VCenterDriver::VIHelper.one_item(OpenNebula::VirtualMachine, vm_id) + snap_name = one_vm["TEMPLATE/SNAPSHOT[SNAPSHOT_ID=#{snap_id}]/NAME"] + + vm.delete_snapshot(snap_id, snap_name) rescue Exception => e STDERR.puts "Snapshot of VM #{vm_ref} on vCenter cluster "\ diff --git a/src/vmm_mad/remotes/vcenter/snapshot_revert b/src/vmm_mad/remotes/vcenter/snapshot_revert index bc630a26c9..2a8687568b 100755 --- a/src/vmm_mad/remotes/vcenter/snapshot_revert +++ b/src/vmm_mad/remotes/vcenter/snapshot_revert @@ -31,6 +31,7 @@ require 'vcenter_driver' vm_ref = ARGV[0] snap_id = ARGV[1] +vm_id = ARGV[2] vc_cluster_name = ARGV[3] host = VCenterDriver::VIHelper.find_by_name(OpenNebula::HostPool, vc_cluster_name) @@ -41,7 +42,11 @@ begin vm = VCenterDriver::VirtualMachine.new_from_ref(vm_ref, vi_client) - vm.revert_snapshot(snap_id) + # Get snapshot name + one_vm = VCenterDriver::VIHelper.one_item(OpenNebula::VirtualMachine, vm_id) + snap_name = one_vm["TEMPLATE/SNAPSHOT[SNAPSHOT_ID=#{snap_id}]/NAME"] + + vm.revert_snapshot(snap_id, snap_name) rescue Exception => e STDERR.puts "Snapshot of VM #{vm_ref} on vCenter cluster "\