class Chef::Knife::VsphereVmState

Manage power state of a virtual machine VsphereVmState extends the BaseVspherecommand

Public Instance Methods

run() click to toggle source

The main run method for vm_state

# File lib/chef/knife/vsphere_vm_state.rb, line 51
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

  vim_connection

  vm = get_vm_by_name(vmname) || fatal_exit("Could not find #{vmname}")

  state = vm.runtime.powerState

  if config[:state].nil?
    puts "VM #{vmname} is currently " + POWER_STATES[vm.runtime.powerState]
  else

    case config[:state]
    when "on"
      if state == PS_ON
        puts "Virtual machine #{vmname} was already powered on"
      else
        vm.PowerOnVM_Task.wait_for_completion
        puts "Powered on virtual machine #{vmname}"
      end
    when "off"
      if state == PS_OFF
        puts "Virtual machine #{vmname} was already powered off"
      else
        if get_config(:shutdown)
          vm.ShutdownGuest
          print "Waiting for virtual machine #{vmname} to shut down..."
          until vm.runtime.powerState == PS_OFF
            sleep 2
            print "."
          end
          puts "done"
        else
          vm.PowerOffVM_Task.wait_for_completion
          puts "Powered off virtual machine #{vmname}"
        end
      end
    when "suspend", "suspended"
      if state == PS_SUSPENDED
        puts "Virtual machine #{vmname} was already suspended"
      else
        vm.SuspendVM_Task.wait_for_completion
        puts "Suspended virtual machine #{vmname}"
      end
    when "reset"
      vm.ResetVM_Task.wait_for_completion
      puts "Reset virtual machine #{vmname}"
    when "reboot"
      vm.RebootGuest
      puts "Reboot virtual machine #{vmname}"
    end

    if get_config(:wait_port)
      print "Waiting for port #{get_config(:wait_port)}..."
      print "." until tcp_test_port_vm(vm, get_config(:wait_port))
      puts "done"
    end
  end
end