Got tired of crappy PG&E power messing up my filesystems and got an APC UPS. Next step was getting it setup to shutdown all of the VMs and then the VMware host. I used an Ubuntu 18.04 VM. First thing is to pass through the APC USB connection. This can be done just from the web GUI. Also make sure ssh is enabled on you ESXi server. Once that’s done a lsusb
on the VM will show you the IDs. In my case:
$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 004: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
From this I needed to add the following line to my .vmx so that the APC is passed through every time. I had to use device1 as device0 was already take.
usb.autoConnect.device1 = "0x51d:0x2"
Next step is to setup ssh-keys. ESXi 6.7, at least, doesn’t support ed25519 so I went ahead with a 4096-bit rsa key. As root this looks like:
ssh-keygen -t rsa -b 4096
Your new key goes into /etc/ssh/keys-root/authorized_keys on your ESXi server. Make sure when you ssh as root from your VM to your ESXi host you can get in without a password.
Next step is to setup the tools you need on the Ubuntu VM. I used apcupsd
and putty-tools
. They install like this:
sudo apt-get install apcupsd putty-tools
Plink can only use private ssh keys in a .ppk format instead of the standard PEM as far as I can tell. To fix this use:
puttygen ~root/.ssh/id_rsa -O private -o ~root/.ssh/id_rsa.ppk
You can test if all of this is working like this:
/usr/bin/plink -i /root/.ssh/id_rsa.ppk root@<ESXi IP> "ls"
This should give you a badly formatted list of files from your ESXi server.
Next let’s setup apcupsd
. We need to edit a few files. We will start with /etc/apcupsd/apcupsd.conf
. We need to edit the following:
UPSNAME <someUPSname>
UPSCABLE usb
UPSTYPE usb
# For USB UPSes, please leave the DEVICE directive blank.
DEVICE
Might as well adjust your BATTERYLEVEL
, MINUTES
and TIMEOUT
variables at this point as well. I focused mainly on the last variable there, but YMMV. Make sure that /etc/default/apcupsd
Ā hasĀ ISCONFIGURED=yes
set. Let’s run a sudo service apcupsd restart
at this point and then a apcaccess
command. If everything was setup right you should see all of your UPS information. Let’s move on to setting up some actions now. In /etc/apcupsd/apccontrol
you’ll want something like:
doshutdown)
echo "UPS ${2} initiated Shutdown Sequence" | ${WALL}
# Shut down indirectly by triggering the ESXi host to do the
# shutdown VMWare from ssh
/usr/bin/plink -i /root/.ssh/id_rsa.ppk root@<ESXi IP> "/sbin/shutdown.sh && /sbin/poweroff"
;;
Run another sudo service apcupsd restart
and you can try to pull the plug!