I got this idea after catching an interesting tweet by Cody Bunch last Friday:
I had just recently finished a post on How to Ack & Reset vCenter Alarm implementing hidden API method and thought this might work by using a vCenter alarm. After few hours in our skunkwork's lab, I found "a" method to exactly what Cody wished for. If you can not wait, jump straight to the video at the bottom 🙂
The following tools were used:
- PsExec -Windows utility to perform remote operations
- SayStatic - Windows text to speech utility
- A random mp3 audio file found online
The environment consisted of two vESXi 4.1 hosts and Windows XP VM residing on shared storage that was vMotion functional:
You will need to upload some files to your vCenter server and to the desktop in which you want to implement this hack.
Local Desktop Server Setup
1) Download SayStatic to your local desktop ( in the example, it is located on the desktop)
2) Download a playable mp3 file (in the example, it is located on the desktop)
Note: If you decide to change the path to the files above, please make note of the path as it will be used later in the alarm script.
Here is a screenshot of my local desktop:
vCenter Server Setup
1) Download PsTools toolkit and extract the contents to your vCenter Server and make a note of the path (in the example, it is located on the desktop)
2) Create an alarm script and make a note of the path ( in the example, it is located in C:\alarm.cmd)
The alarm.cmd should contain the following:
You will need to edit the script and update at minimum the following variables:
REMOTE_SERVER = This is the hostname or IP address of your local desktop, make sure you keep the double slashes which is needed
REMOTE_USERNAME = This is the username to login to your local desktop and it should be the one you use to login else you will not see anything interesting. Make sure you include both the Domain and username, if your system is not part of a domain, use the local system name else the script will fail.
REMOTE_PASSWORD = The password to the account aove
Note: If you have changed the path of the files on either the local desktop or vCenter Server, you will need edit the remainder variables that specify where to look for the executable's.
Here is a screenshot of vCenter Server desktop:
Finally, we need to create an alarm in vCenter, you can create this at any level of the vCenter infrastructure.
1) Create an alarm and give it a name and ensure the type is of "Virtual Machines" and monitor type is "Monitor for specific events occurring on this object" (in the example, I call it VMOTIONIN_WITH_STYLE)
2) Now click on the Triggers tab and look for an event type called "VM emigrating", no this is not a typo. VMware apparently has both "VM migrating" and "VM emigrating", apparently the functional alarm is under the name emigrating ... don't ask me why they called it that ;). Make sure the status is set to "alert"
3) Next, click on the Actions tab and set the action to "Run a command" and specify the configuration to the path of the alarm.cmd. In the example, I stored the script in C:\alarm.cmd and then make sure it alarms when it hits "red" or error and then click okay for the alarm to be created.
Now you are ready to go. Instead of explaining and providing screenshots, I thought I show you what this would look like (explanation of what is going on is at the very bottom).
Without further ado, here is a recorded video of this in action:
What is actually going on:
When a vMotion is triggered, it will fire off the alarm.cmd script which basically uses SayStatic.exe to remotely execute on your local desktop to announce the virtual machine being vMotioned by capturing the VMware specific environmental variables and then it will also remotely playing the local audio file using Windows Media Player.One caveat that I was not able to solve, was clearing the alarm after the vMotion. You will notice the virtual machines that vMotion and fire off this alarm will stay alerted and will not play again until it has been resetted to green. I thought about creating another alarm to clear this initial alarm but it did not actually clear the alarm.
There you have it, vMotioin' with style ... though cool in concept, I doubt you will last very long with this kicking off on every single vMotion in your environment.
Big thanks to Cody Bunch for the idea! 🙂