rendered paste body#!/bin/bash
# Joern Eisenkraetzer, 2007-12-13 Version 1.0
##################################################################################################
#### Dupliziere ein vmx-Image in ein neu erstelltes Verzeichnis, nenne es um, registriere es ####
##################################################################################################
PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
clear
echo " "
echo " ######################################################################"
echo " ### Kopiere eine virtuelle Maschine ###"
echo " ######################################################################"
echo " "
#### 0. Loesche/verschiebe alle Snapshots -soweit vorhanden- manuell.
#### --------------------------------- Verzeichnis/Image bezeichnen/pruefen ---------
VERZEICHNISTEST=`ls |grep vmx|wc -l`
if [ $VERZEICHNISTEST -eq 0 ]; then
echo " "
echo " ++++++++++++++++++++++++++++++++++++"
echo " Abbruch, kein VM-Image-Verzeichnis !"
echo " ++++++++++++++++++++++++++++++++++++"
echo " "
echo " "
echo " Abbruch, Programm bitte aus dem Verzeichnis des VM-Image-Masters heraus starten!"
echo " "
sleep 2
exit 1
fi
IMAGE_ALT=`ls -1 *.vmx|cut -d. -f1`
W=n
echo " Starte das Programm im Verzeichnis der Master-VM"
echo " "
echo " Das Script wurde im Verzeichnis `pwd` gestartete. "
echo " Die VM-Vorlage ist $IMAGE_ALT"
echo " "
SCHALTER=1
while [ $SCHALTER -eq 1 ]; do
read -p " Namen der neuen Virtuelle Maschine vergeben: " IMAGE_NEU
PRUEF=`echo $IMAGE_NEU|wc -w |tr -s " "|cut -d" " -f2`
case $PRUEF in
0) echo " Bitte Dateinamen benennen!"
echo " " ;;
1) echo " VM-Maschinen- und Verzeichnisname ist $IMAGE_NEU"
CHARA=`echo $IMAGE_NEU|wc -m`
if [ $CHARA -lt 4 ]; then
echo " "
echo " Bitte laengeren Namen waehlen!"
echo " "
else
if [ -e ../$IMAGE_NEU ]; then
echo " "
echo " Dateiname existiert bereits, anderen waehlen!"
echo " "
else
echo " OK..."
echo " "
SCHALTER=2
fi
fi ;;
*) echo " Bitte Dateiamen ohne Leerzeichen schreiben"
echo " " ;;
esac
done
echo " "
echo " Es wird der VM.Master $IMAGE_ALT unter den Namen $IMAGE_NEU kopiert."
read -p " OK und weiter? <j/n>: " W
W=$W\a
echo " "
#### ------------------------ PROGRAMM ------------------------------------
if [ $W = ja ]; then
#### Neues Verzeichnisname = neuer Image-Name
echo " Erzeuge neues Verzeichnis $IMAGE_NEU"
mkdir ../$IMAGE_NEU
#### Kopieren von VMware-Images
## 1. Kopieren der Dateien mit cp und vmkfstools in ein neues Verzeichnis.
echo " Kopiere *.vmx und *.vmxf-Dateien in das Verzeichnis $IMAGE_NEU"
cp *.vmx* ../$IMAGE_NEU/
DATEIEN_1=`ls -1 ../$IMAGE_NEU/*.vm*`
echo " Kopierte Dateien sind: "
echo -e $DATEIEN_1|tr " " "\n"
echo " "
echo " Kopiere vmdk-Dateien mit dem Tool vmkfstool"
echo " "
for i in $(ls *.vmdk|grep -v flat.vmdk); do vmkfstools -i $i ../$IMAGE_NEU/$i; done
DATEIEN_2=`ls -1 *.vm* ../$IMAGE_NEU/*.vm*`
echo " "
echo " Dateien im Verzeichnis $IMAGE_NEU sind: "
echo -e $DATEIEN_2|tr " " "\n"
echo " "
echo " Wechseln in das neue Verzeichnis"
cd ../$IMAGE_NEU
HIER=`pwd`
echo " Das neue aktuelle Verzeichnis ist $HIER "
echo " Umbenennen der kopierten Dateien"
rename $IMAGE_ALT $IMAGE_NEU *.*
DATEIEN_3=`ls -1`
echo " "
echo " Dateien im Verzeichnis $IMAGE_NEU sind: "
echo -e $DATEIEN_3|tr " " "\n"
#### 3. Anpassen der vmx-Konfiguratiosdatei
sed -i "s/$IMAGE_ALT/$IMAGE_NEU/g" $HIER/$IMAGE_NEU.vmx
sed -i "/^nvram/d" $IMAGE_NEU.vmx
sed -i "/^uuid/d" $IMAGE_NEU.vmx
sed -i "/^sched.swap/d" $IMAGE_NEU.vmx
echo " "
echo " Anpassen der Festplattenbeschreibungsdatei"
for i in $(ls *.vmdk|grep -v flat.vmdk); do sed -i "s/$IMAGE_ALT/$IMAGE_NEU/g" $i; done
#### 5. Registrieren der virtuellen Maschine
## Storage?
STORAGE=`pwd|cut -d/ -f4`
echo " Es wird Storage $STORAGE benutzt"
echo " "
STORAGE_PFAD=`pwd|cut -d/ -f1-4`
STORAGE_LINK=`ls -l $STORAGE_PFAD|tr ">" "#"|cut -d# -f2|cut -d" " -f2`
echo " Die Storage-Entsprechung lautet $STORAGE_LINK"
vmware-cmd -s register /vmfs/volumes/$STORAGE_LINK/$IMAGE_NEU/$IMAGE_NEU.vmx
echo " fertig"
sleep 3
else
echo " Tschuess"
sleep 2
fi
exit