class Chef::Knife::VsphereVmSnapshot
Manage snapshots of a virtual machine
Public Instance Methods
display_node(node, current)
click to toggle source
# File lib/chef/knife/vsphere_vm_snapshot.rb, line 144 def display_node(node, current) children = node.childSnapshotList.map { |item| display_node(item, current) } snapshot_tree = { "SnapshotName" => node.name, "SnapshotId" => node.id, "SnapshotDescription" => node.description, "SnapshotCreationDate" => node.createTime.iso8601, "Children" => children } snapshot_tree["IsCurrentSnapshot"] = true if node.snapshot == current snapshot_tree end
find_node(tree, name)
click to toggle source
# File lib/chef/knife/vsphere_vm_snapshot.rb, line 131 def find_node(tree, name) snapshot = nil tree.each do |node| if node.name == name snapshot = node.snapshot break elsif !node.childSnapshotList.empty? snapshot = find_node(node.childSnapshotList, name) end end snapshot end
run()
click to toggle source
# File lib/chef/knife/vsphere_vm_snapshot.rb, line 72 def run $stdout.sync = true vmname = @name_args[0] if vmname.nil? show_usage ui.fatal("You must specify a virtual machine name") exit 1 end vm = get_vm_by_name(vmname, get_config(:folder)) || fatal_exit("Could not find #{vmname}") if vm.snapshot snapshot_list = vm.snapshot.rootSnapshotList current_snapshot = vm.snapshot.currentSnapshot end if get_config(:list) && vm.snapshot ui.output(snapshot_list.map { |i| display_node(i, current_snapshot) }) end if get_config(:create_new_snapshot) snapshot_task = vm.CreateSnapshot_Task(name: get_config(:create_new_snapshot), description: get_config(:snapshot_description), memory: get_config(:dump_memory), quiesce: get_config(:quiesce)) snapshot_task = snapshot_task.wait_for_completion if get_config(:wait) snapshot_task end if get_config(:remove_named_snapshot) ss_name = get_config(:remove_named_snapshot) snapshot = find_node(snapshot_list, ss_name) puts "Found snapshot #{ss_name} removing." snapshot_task = snapshot.RemoveSnapshot_Task(removeChildren: false) snapshot_task = snapshot_task.wait_for_completion if get_config(:wait) snapshot_task end if get_config(:revert_current_snapshot) puts "Reverting to Current Snapshot" vm.RevertToCurrentSnapshot_Task(suppressPowerOn: false).wait_for_completion if get_config(:power) vm.PowerOnVM_Task.wait_for_completion puts "Powered on virtual machine #{vmname}" end end return unless get_config(:revert_snapshot) ss_name = get_config(:revert_snapshot) snapshot = find_node(snapshot_list, ss_name) snapshot.RevertToSnapshot_Task(suppressPowerOn: false).wait_for_completion return unless get_config(:power) vm.PowerOnVM_Task.wait_for_completion puts "Powered on virtual machine #{vmname}" end