Product Announcements

Using A Guest Customization Script to Tell When vApp/VM Is Ready In vCloud Director

By William Lam, Sr. Technical Marketing Engineer

A question that has comes up from time to time for vCloud Director is how to tell when a vApp and its associated Virtual Machines is ready for use after the initial power on operation?

Screen Shot 2012-05-30 at 4.08.46 PM

If you look at the vCloud UI, the status of the Virtual Machine shows “Powered On” which is  also represented in the vCloud API using the “Status” property for a Virtual Machine. However, this status does not necessarily mean the guestOS is ready, it just means that it is powered on. The Virtual Machines could still be booting up or going through their OS customization. So how might you go about determining when the guestOS is actually ready for use?

In talking to one of my fellow colleagues over in the VMware COE (Center of Excellence), Timo Sugliani, Timo came up with a pretty neat idea by leveraging the guest customization script for a Virtual Machine. The idea was to create a file within the guestOS filesystem at the end of the “Post Customization” section which could then be checked periodically to see if the guestOS has completed its customization.

To enable guest OS customization, it is a two step process in the vCloud UI:

1) Right click on the Virtual Machine and select the “Guest OS Customization” tab and check the box “Enable guest customization”.

Vapp-ready-1

2) Next, att the very bottom, you can then either upload a script or paste the contents of the script. The script must be either a Windows Batch script or Linux Shell script.

Vapp-ready-2

Below are two sample scripts that I used to test on both a Windows and Linux VM running in vCloud Director:

Linux Script:
#!/bin/sh
if [ x$1 == x”precustomization” ]; then
echo Do Precustomization tasks
elif [ x$1 == x”postcustomization” ]; then
/bin/date > /var/run/vm-is-ready
fi

Windows Script:
@echo off
if “%1%” == “precustomization” (
echo Do precustomization tasks
) else if “%1%” == “postcustomization” (
echo %DATE% %TIME% > C:vm-is-ready
)

As you can see both script is pretty simple by just printing the date into a file which is stored within the guestOS.

We can also use the vCloud API by performing a PUT operation on the Virtual machine’s guestCustomizationSection. Here is an example curl call:

$ curl -i -k -H “Accept:application/*+xml;version=1.5” -H “x-vcloud-authorization: PaHt58xx53ezIKJRYXT/VGWEricT5vh7xqyZHLEgSOY=” -X PUT https://vcd/api/vApp/vm-ab10d2ab-37da-402f-9f66-277a64c19076/guestCustomizationSection/ -H “Content-Type: application/vnd.vmware.vcloud.guestCustomizationSection+xml” -d @customization-script

Here is an example of what the customization-script file looks like:

Code

Note: You will need to ensure the script body is in UNICODE format (e.g. < > is &lt; &gt;)

Let’s go ahead and test this these two scripts. In my lab, I have a single vApp which contains two Virtual Machines: Windows and Linux. We will go ahead and initiate the power and see when the power operation was initiated and completed.

Vapp-ready-3

As you can see from the above screenshot, the power on started at 4:23 PM and completed at 4:25 PM. Now if we login to our two Virtual Machines, we should see the “vm-is-ready” file in /var/run for our Linux VM and in C: for our Windows VM:

Vapp-ready-4

Vapp-ready-5

If you take a look at the time stamp, we can see that this file is created a few minutes after vCloud Director has noted the Virtual Machines is in a powered on state. If we had an external system which could periodically monitor the Virtual Machines, we could then send an email or notification through a custom portal on when the vApp is fully ready for use. Another option is to have the script perform a “call out” to an external system such as vCenter Orchestrator on when the Virtual Machine is ready versus polling the system.

Get notification of new blog postings and more by following lamw on Twitter:  @lamw