VMWare Scripting

We are using Oracle Enterprise Linux 64bit installations in VMWare Fusion (32GB MacPros). In principal there are two possibilities to access running processes vmrun and normal IP-based protocols.

Here are two bash functions to support scripting:

Script to select one of the running VMWare boxes

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SelectVMWare() {
 
	IFS='
	'
	listOfVMWares=(`vmrun list`)
 
	echo -e "\n\n Please select Client to Install:"
 
	for((i=1;i<${#listOfVMWares[*]};i++)) do
		echo -e  "\t\t" $i "  " ${listOfVMWares[$i]}
	done
 
	read CLIENT_SELECTION
 
	CLIENT_VMX=${listOfVMWares[$CLIENT_SELECTION]}
}

If you want to access the boxes by e.g. SSH you will need the IP-number. This is possible by using the MAC address parsed from the given VMX-file, fping (it is no default on OSX) and arp.

Script to get the IP address (runs on Snow Leopard)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
GetIP() {
	fping -c 1 -g -q 176.16.8.0/24 2> /dev/null;  # pings all of subnet
 
	# get the MAC address
	MAC_ADDRESS=`grep "ethernet0.generatedAddress " $1 | sed 's/.*= "00:\(.*\)"/\1/'`
 
	# set the field separator to : and create an array
	IFS=":"
	temp=( $MAC_ADDRESS )
 
	# iterate through the array and delete the leading zeros
	for i in {0..4}
	do
	   characters=`echo ${temp[i]} |wc -m`
	   if [ $characters -gt 2 ]; then
		  temp[i]="${temp[i]/#0/ }"
	   fi
	done
 
	# change IFS back and create corrected MAC address
	IFS=","
 
	MAC_TEMP=${temp[0]}:${temp[1]}:${temp[2]}:${temp[3]}:${temp[4]}
	MAC_ADDRESS=`echo $MAC_TEMP | sed -e 's/ //g'`
	MAC_MATCH=0:$MAC_ADDRESS
 
	#echo $MAC_MATCH
	#echo $MAC_ADDRESS
 
	# convert MAC address
	IP_ADDRESS=`arp -an |grep $MAC_ADDRESS |sed "s/.*? (\(.*\)) at $MAC_MATCH on vmnet1 ifscope \[ethernet\]/\1/"`
 
	#echo found IP: $IP_ADDRESS Is this OK?
	#read -n1
}

Comments are closed.