WMware ESXI - suspend all guests

I have an VMware ESXI 5 which I used for testing things, but I don't want it to run all the time, and using the vSphere Client to stop all the VM's and then stop the ESXI server is a bit too much effort.

So I figured out how to do it from the commandline using 'vim-cmd'.


#/bin/sh

VMS=`vim-cmd vmsvc/getallvms | grep -v Vmid | awk '{print $1}'`
for VM in $VMS ; do
     PWR=`vim-cmd vmsvc/power.getstate $VM | grep -v "Retrieved runtime info"`
     if [ "$PWR" == "Powered on" ] ; then
          name=`vim-cmd vmsvc/get.config $VM | grep -i "name =" | awk '{print $3}' | head -1 | cut -d """ -f2`
          echo "Powered on: $name"
          echo "Suspending: $name"
          vim-cmd vmsvc/power.suspend $VM > /dev/null &
     fi
done

while true ; do
     RUNNING=0
     for VM in $VMS ; do
          PWR=`vim-cmd vmsvc/power.getstate $VM | grep -v "Retrieved runtime info"`
          if [ "$PWR" == "Powered on" ] ; then
          echo "Waiting..."
          RUNNING=1
          fi
     done
     if [ $RUNNING -eq 0 ] ; then
          echo "Gone..."
          break
     fi
     sleep 1
done
echo "Now we suspend the Host..."
vim-cmd hostsvc/standby_mode_enter


This is working just fine, until one discovers the there is no where to store files on the ESXI servers file system without having to restore them after a reboot.

A bit of googing gave me an answer, create a directory in one of the datastores and save it there.

Like in '/vmfs/volumes/datastore1/scripts/', where it will stay after a reboot.

Now to wake the host again, requires that one enable wake-on-lan (wake on PCI and PCIe normally should do it), and then use the wakelan / wol utility;

# wol <mac addr>

This it's possible to hide ones noisy computers somewhere far far away.

Comments

andy said…
Thank you, very nice :-)! Full of nice ideas, God bless ya man :o)..
Russ said…
Very cool, I have my fileserver attached to an UPS and can try to mod this to shutdown my ESXi hosts as well.
dex said…
Thanks!!!
exactly what I needed to shut down my esxi 5.5 with an UPS
[…] detected a power event.  Luckily, it wasn’t too difficult and I was able to find this awesome script to handle the ESX side.  Here is the […]
X3STeNliTE said…
Thank you this's helpful.
Alex said…
Nice work! but i use command /bin/poweroff in esxi 5.5
and may be i help some one.
How connect to ssh from windows and run command
download plink and run command
plink.exe -ssh <username> -pw password /vmfs/volumes/5370dd8b-284e8baf-31ab-002421a85c91/scripts/suspend.sh
Jack said…
This may not work if you have VMs with Descriptions with multiple lines, as the descriptions interfere with the detection. Fixed by replacing the grep on the first vim-cmd with 'grep "^[0-9]"' which finds numerical values on the first character of a line. Should work unless you have a number on the first character of a description line.
Nathan said…
Man, you are a lifesaver! I was going to start researching a way to do this as I only want my ESXI host on 50% of the day!

Popular posts from this blog

Apple AirPort Express and Digital Jitter..

Kviknet and IPv6

MacOS Ventura: not able to ssh to ruckus switch (diffie-hellman-group1-sha1)