Scripting Creation of Virtual Machines in ESX Shell
Scripting the creation of virtual machines is simpler than one might think.We
will leverage your newly gained experience from previous sections on utilizing
the VMware tools to automate the VM creation process. In the previous section,
you manually created a virtual machine configuration file and virtual
disk.You then registered the virtual machine with ESX Server.We're going to
now essentially take all those commands and steps and automate them in a
script that you can run repeatedly and customize to build various types of virtual
machines.
The VMware ESX shell is simply the service console operating system.
This operating system is a custom version of Linux that VMware created. In
Linux, you can create a simple text file to automate commands and then execute
it. If you are familiar with DOS batch files, then this will be easy for
you. Code Listing 4.6 shows an example of scripted VM creation.
Code Listing 4.6 Scripted VM Creation
##### VM Creation Script #####################################
#Script Version 1.1
#Author David E. Hart
#Date 10-05-06
#
#--------+
# Purpose|
#--------+-----------------------------------------------------
# This script will create a VM with the following attributes;
# Virtual Machine Name = ScriptedVM
# Location of Virtual Machine = /VMFS/volumes/storage1/ScriptedVM
# Virtual Machine Type = "Microsoft Windows 2003 Standard"
# Virtual Machine Memory Allocation = 256 meg
#
#----------------------------------------+
#Custom Variable Section for Modification|
#----------------------------------------+---------------------
#NVM is name of virtual machine(NVM). No Spaces allowed in name
#NVMDIR is the directory which holds all the VM files
#NVMOS specifies VM Operating System
#NVMSIZE is the size of the virtual disk to be created
#--------------------------------------------------------------
###############################################################
### Default Variable settings - change this to your preferences
NVM="ScriptedVM" # Name of Virtual Machine
NVMDIR="ScriptedVM" # Specify only the folder name to be created; NOT the
complete path
NVMOS="winnetstandard" # Type of OS for Virtual Machine
NVMSIZE="4g" # Size of Virtual Machine Disk
VMMEMSIZE="256" # Default Memory Size
### End Variable Declaration
mkdir /vmfs/volumes/storage1/$NVMDIR # Creates directory
exec 6>&1 # Sets up write to file
exec 1>/vmfs/volumes/storage1/$NVMDIR/$NVM.vmx # Open file
# write the configuration
echo config.version = '"'6'"' # For ESX 3.x the value is 8
echo virtualHW.version = '"'3'"' # For ESX 3.x the value is 4
echo memsize = '"'$VMMEMSIZE'"'
www.syngress.com
Building a VM • Chapter 4 151
370_VMware_Tools_04_dummy.qxd 10/12/06 7:28 PM Page 151
echo floppy0.present = '"'TRUE'"' # setup VM with floppy
echo displayName = '"'$NVM'"' # name of virtual machine
echo guestOS = '"'$NVMOS'"'
echo
echo ide0:0.present = '"'TRUE'"'
echo ide0:0.deviceType = '"'cdrom-raw'"'
echo ide:0.startConnected = '"'false'"' # CDROM enabled
echo floppy0.startConnected = '"'FALSE'"'
echo floppy0.fileName = '"'/dev/fd0'"'
echo Ethernet0.present = '"'TRUE'"'
echo Ethernet0.networkName = '"'VM Network'"' # Default network
echo Ethernet0.addressType = '"'vpx'"'
echo
echo scsi0.present = '"'true'"'
echo scsi0.sharedBus = '"'none'"'
echo scsi0.virtualDev = '"'lsilogic'"'
echo scsi0:0.present = '"'true'"' # Virtual Disk Settings
echo scsi0:0.fileName = '"'$NVM.vmdk'"'
echo scsi0:0.deviceType = '"'scsi-hardDisk'"'
echo
# close file
exec 1>&-
# make stdout a copy of FD 6 (reset stdout), and close FD6
exec 1>&6
exec 6>&-
# Change permissions on the file so it can be executed by anyone
chmod 755 /vmfs/volumes/storage1/$NVMDIR/$NVM.vmx
#Creates 4gb Virtual disk
cd /vmfs/volumes/storage1/$NVMDIR #change to the VM dir
vmkfstools -c $NVMSIZE $NVM.vmdk -a lsilogic
#Register VM
vmware-cmd -s register /vmfs/volumes/storage1/$NVMDIR/$NVM.vmx
The script in Code Listing 4.6 will create a virtual machine that has the
following characteristics:
A VM called ScriptedVM in a directory named ScriptedVM on
storage1
A VM that will be assigned 256MB of memory
A VM that will have a 4GB SCSI hard drive (lsilogic controller)
A VM configured for a Windows 2003 standard operating system
A floppy drive assigned, not connected at startup
A CD-ROM attached to the ESX server's CD-ROM drive, not connected
at startup
An Ethernet adapter connected to the VM Network, enabled at startup
The exec commands in the script are system-level commands in Linux to
set up the writing to, and saving of, the script file. It redirects the console
screen's output to the script file.The use of the echo commands in the script
sends the commands to the screen which are redirected to the file for
writing.The file is then closed and the virtual configuration file,VMX, is
saved.The permissions are changed on the configuration file so any user on
ESX can access the virtual machine.Then the script creates the virtual disk
and registers the VM with the ESX server.
Use the following process to set up your script on the ESX server:
Log in locally or connect to your ESX server remotely.
Log in with an ID that has root privileges (see Figure 4.9).
Figure 4.9 Gaining Root Level Access on ESX Server
Change to the location or create a location of where you would like
to store your scripts (see Figure 4.10).
Figure 4.10 Script Storage Location
Type VI newvm.script and press Enter.
Press I for insert and type in the script as shown in Code Listing 4.6
(see Figure 4.11).
Figure 4.11Using VI to Create Shell Script
Press Esc and then press and hold Shift while pressing ZZ to exit
and save.
You should now have a file called newvm.script listed. Before you
run the script, you must set permissions on it.To do this, type
chmod 755 newvm.script (see Figure 4.12).
Figure 4.12 Setting Permissions on Script File
Run the script by typing ./newvm.script (see Figure 4.13).
Figure 4.13 The Execution of Shell Script
The virtual machine has now been created and registered with ESX.The
next steps are for you to power it on and install the guest operating system.
Creating scripts in ESX shell will save you time and effort in creating new
virtual machines in your environment.
Use the following table of contents to navigate to chapter excerpts, or click here to view Chapter 4 in its entirety.
Scripting VMware Power Tools shows readers scripting techniques using both ESX and Linux commands to automate administrative tasks of ESX Server. It covers VMware ESX Server native tools and discusses in detail the different scripting APIs and how they can be used to provide some very useful, practical, and time-saving tools to manage a virtual infrastructure. From virtual server provisioning to backups, and everything in between, this book is a one-stop shop for virtual tools!Purchase the book from Syngress Publishing
ABOUT THE AUTHOR:
Lead author Al Muller is a consultant for Callisma, a wholly owned subsidiary of AT&T. He has been in the IT field since 1995, getting his start as a database administrator in the Navy. In 2002 he began using VMware's GSX Server and within a year was involved in his first virtualization project. Since then, he has been an eager proponent of virtualization technology and has worked on a number of different server consolidation and virtualization projects.
TechTarget provides enterprise IT professionals with the information they need to perform their jobs - from developing strategy, to making cost-effective IT purchase decisions and managing their organizations' IT projects - with its network of technology-specific Web sites, events and magazines.