class Chef::Knife::VsphereVmDelete

Delete a virtual machine from vCenter VsphereVmDelete extends the BaseVspherecommand

Public Instance Methods

destroy_item(itemClass, name, type_name) click to toggle source

Extracted from Chef::Knife.delete_object, because it has a confirmation step built in… By specifying the '–purge' flag (and also explicitly confirming the server destruction!) the user is already making their intent known. It is not necessary to make them confirm two more times.

@param [Object] itemClass The class object @param [String] name The name of the VM that you need to delete @param [String] type_name The type_name of the thing that you need? TODO

# File lib/chef/knife/vsphere_vm_delete.rb, line 47
def destroy_item(itemClass, name, type_name)
  object = itemClass.load(name)
  object.destroy
  puts "Deleted #{type_name} #{name}"
end
run() click to toggle source

The main run method from vm_delete

# File lib/chef/knife/vsphere_vm_delete.rb, line 55
def run
  $stdout.sync = true

  vmname = @name_args[0]

  if vmname.nil?
    show_usage
    fatal_exit("You must specify a virtual machine name")
  end

  vm = get_vm_by_name(vmname, get_config(:folder)) || fatal_exit("Could not find #{vmname}")

  vm.PowerOffVM_Task.wait_for_completion unless vm.runtime.powerState == "poweredOff"
  vm.Destroy_Task.wait_for_completion
  puts "Deleted virtual machine #{vmname}"

  if config[:purge]
    vmname = config[:chef_node_name] if config[:chef_node_name]
    destroy_item(Chef::Node, vmname, "node")
    destroy_item(Chef::ApiClient, vmname, "client")
    puts "Corresponding node and client for the #{vmname} server were deleted and unregistered with the Chef Server"
  end
end