How to automatically shut down VMware ESXi gracefully during power failure using an APC UPS

by Shawn 30. August 2011 10:06

 

In this latest post by TechHead guest contributor James Pearce he covers a topic near and dear to many of us – how to get VMware ESX/ESXi and its VMs to shut down gracefully upon power failure to the host.  Tighter integration between a UPS and a VMware ESX/ESXi host is no doubt something that will become more mature over time though for now it can be an issue for many administrators especially those running the free version of ESXi.  So read on to find out how James overcame this issue in his virtualization lab.

 

A Nearly Free UPS


I recently acquired an APC Smart UPS that was being chucked out from work (having never worked) for my home lab along with an ancient AP9606 management card. With the batteries changed the UPS burst into life – but after some messing about getting the right firmware on it, I was disappointed to find no easy way to get it to shutdown my ESXi box when it needed to.

 

VMware License Restriction

The VMware management appliance (vima) can shutdown only paid-for installations of ESXi (using apcupsd and VMware community member lamw’s scripts) – the necessary interfaces on the free version have been made read-only since ESXi v3.5 U3.

 

Burp Suite

VMware ESX ESXi - How to shut down using APC UPSI’ve been finding a lot of use recently for network sniffers, so thought I’d have a look at how the VMware vSphere Client works, as obviously that can shut down the host. As luck would have it, the client is nothing more than a glorified web browser with the slight complication that it’s talking over SSL – but that’s no problem for PortSwigger’s Burp suite in its transparent proxy mode.

The traffic captures revealed that only three frames would be needed to perform the shutdown (hello, authenticate, and shutdown). A little manipulation is needed to get the session keys in, but that is basically it. ESXi’s startup and shutdown policy will do the work suspending or shutting down individual VMs, as configured through the vSphere Client.

 

The Script – shutdown.bat

Using this newly found knowledge I’ve created a Windows batch file (with a few supporting text files which are basically HTTP requests) that takes the hostname, username and password as parameters and will then shut down the host cleanly. The script needs something to launch it –APC PowerChute Network Shutdown in my case – and a utility to send the commands over SSL, for which I’ve used Nmap ncat (which just needs to be installed).

I have put all the necessary script files into a single convenient zipped file which you can download from here – the scripts are fairly well commented so you should be able to follow what is happening.

 

APC PowerChute

A potential issue is that APC’s PowerChute Network Shutdown utility will always shut down the Windows machine it’s running on. I’ve therefore used a separate Windows management VM to host PowerChute and my script, since I wanted everything else just suspended.

PowerChute has an option to ‘run this command’ but it’s limited to 8.3 paths and won’t accept command line parameters. A separate batch file is needed (poweroff.bat) that runs the shutdown script with the parameters – but that could shut down other ESXi boxes as well if required. Also the PowerChute service needs to be run as local Administrator as the default Local System account doesn’t have sufficient rights.

 

Testing the Scripts

VMware ESX ESXi - How to shut down using APC UPS

Download the ZIP and extract the files – I’ve assumed the package will be extracted to c:\scripts\esxi; update the path in poweroff.bat otherwise. Also the hostname, username and password also need to be specified in poweroff.bat.

Next install and configure PowerChute (in particular change the service user account) and enter the script in the ‘run this command’ box – I also increased the time allowed, but in practice it runs in a few seconds.

VMware ESX ESXi - How to shut down using APC UPS

Some waiting around can be avoided when testing by setting the UPS low-battery duration as high as it will go – just remember to change it back.

Next open up vSphere Client from a real machine, pull the UPS plug and once the battery get’s down to the specified number of minutes remaining, the script should run and the tasks will appear in vSphere Client.  Shortly afterwards the VM used to launch the script will itself shutdown under the control of PowerChute!

 

In Summary

The complete set of files can be downloaded here, and nMap ncat installation for Windows from here. Then a UPS management application is needed, for APC Smart UPSs use PowerChute for Windows.

The shutdown script includes logging and should report most errors. Bear in mind though that once a host is shutdown, it probably won’t be restarted when utility power is restored.

Burp Suite is a handy utility to bypass device limitations by enabling the scripting of management tasks that are only usually available through a web interface. I’ve used it to build scripts to regularly reboot home-spec routers every couple of weeks to keep them stable, and to set the time on the APC AP9606 management card daily since it doesn’t support NTP – and here to build a UPS shutdown script for ESXi; functionality that should really be built into ESXi in the first place.

Tags: ,

Virtualization

Configuring Network Interfaces in VMWare Player7 and VMWare Workstation 7

by Shawn 26. July 2011 06:29

VMWare Player is a free verson of VMWare Workstation with reduced functionality -- mainly you cannot easily create new Virtual Machines and you cannot take advantage of advanced features like Snapshots and Teams.  Outside of that it is an incredible product that can provide huge benefits to Admins and Developers alike.

One topic that comes up now and again is how to modify the default network settings that ALL virtual machines on a specific computer use. These are used for concepts like NAT and HOST ONLY network access.  For this cases VMWare will assign a set of IP addresses from a specific group.  It is usefull from time to time to be able to change these settings.

 

The easiest way to do this is to look inside the installation path of the VM player. For example, C:\Program Files\VMware\VMware Player\

Note: For VMWare workstation, simple go to the main Edit Menu and select "Virtual Network Editor"

Here, you can find an executable named as vmnetcfg.exe

You should see a window that looks like this open up.

 

Select the network interface that you want to change (in the case above I am changing the IP addresses that are used for NAT interfaces).

Then edit the Subnet IP (and Subnet mask if you need to).  In the case above, I have already changed the address from 192.168.137.0 (the default) to 192.168.138.0

Once you have made you changes, click OK and you are done.

Tags: ,

Virtualization

How to reset the UUID for a Virtual Hard Drive

by Shawn 15. November 2010 11:28

<PATH TO VIRTUAL BOX>\VBoxManage internalcommands sethduuid <PATH TO VHD>
VirtualBox Command Line Management Interface Version 2.1.4
(C) 2005-2009 Sun Microsystems, Inc.
All rights reserved.

UUID changed to: 46a453bd-4d03-4988-a066-6ecfc6ced308

Tags: ,

Virtualization

Hyper-V Script: Compact VHD

by Shawn 25. October 2010 20:11

Tags:

Virtualization

Resizing a VHD drive

by Shawn 14. August 2010 06:22

Resizing a VHD drive is not particularly complicated, it just involves a number of steps.

To Shrink

  1. Mount the VHD in Windows 7/2008 using Disk Management Tools (or DISKPART)
  2. Defragment the drive, makeing sure the free space is also defragmented (UltraDefrg in Optimize mode is a good free tools for this)
  3. Resize the main parition using Disk Management Tools (or DISKPART)
  4. Unmount the VHD Drive
  5. Resize the actual VHD file (VHDResizer is a great tool for this)
    1. http://sysadmingeek.com/articles/how-to-resize-a-microsoft-virtual-hard-drive-vhd-file/

To Expand

Resize the actual VHD file (VHDResizer is a great tool for this)

  1. http://sysadmingeek.com/articles/how-to-resize-a-microsoft-virtual-hard-drive-vhd-file/
  2. Mount the VHD in Windows 7/2008 using Disk Management Tools (or DISKPART)
  3. Defragment the drive, makeing sure the free space is also defragmented (UltraDefrg in Optimize mode is a good free tools for this)
  4. Resize the main parition using Disk Management Tools (or DISKPART)
  5. Unmount the VHD Drive

 

Tags: , ,

Windows | Virtualization

Powered by BlogEngine.NET 2.5.0.6
Theme by Mads Kristensen | Modified by Mooglegiant

About the author

As an individual with a passion for technology and knolwedge I have long enjoyed being part of the computer industry as both a systems architect and infrastructure engineering.  This blog is way for me to share some thoughts. ideas, and ponderings on all of these things.

Calendar

<<  February 2012  >>
MoTuWeThFrSaSu
303112345
6789101112
13141516171819
20212223242526
2728291234
567891011

View posts in large calendar

Calendar Of Posts