I needed to customize a custom Linux VM image with a static IP address in vCloud Director. Here’s the script I came up with. It doesn’t work unless VMWare tools is installed and running in the VM (kernel upgrades tend to break it). The VM should be stopped, then paste the script into the “Guest OS Customization” script area. Boot the VM with the “Power On and Force Recustomization” option.
#!/bin/bash
HOSTNAME=YourHostNameHere
IPADDR=StaticIpAddressGoesHere
NETMASK=255.255.255.0
(
echo "------------------------------------------------------------------------------"
date
if [ x$1 == x"precustomization" ]; then
set -e
echo "Running Pre-Customization tasks..."
if [ x$HOSTNAME != x ]; then
echo "Configuring hostname as $HOSTNAME"
sed -i "/HOSTNAME/d" /etc/sysconfig/network
echo "HOSTNAME=$HOSTNAME" >> /etc/sysconfig/network
hostname $HOSTNAME
hostname
else
# Set it so it can be used below
HOSTNAME=`hostname`
fi
if [ x$IPADDR != x ]; then
echo "Configuring network IP=$IPADDR NETMASK=$NETMASK"
rm /etc/udev/rule.d/70-persistent-net.rules
sed -i "/IPADDR/d" /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i "/NETMASK/d" /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i "/HWADDR/d" /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i "/BOOTPROTO/d" /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i "/DHCPHOSTNAME/d" /etc/sysconfig/network-scripts/ifcfg-eth0
cat >> /etc/sysconfig/network-scripts/ifcfg-eth0 <<ENDCFG
BOOTPROTO=static
IPADDR=$IPADDR
NETMASK=$NETMASK
DHCPHOSTNAME=$HOSTNAME
ENDCFG
fi
echo "Done with Pre-Customization"
elif [ x$1 == x"postcustomization" ]; then
echo "Running Post-Customization tasks..."
fi
) | tee -a /root/customize.log
Update: It turns out that having VMWare Tools functioning properly is enough for vCloud Director to configure the network settings all by itself, without the help of a script.