#!/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? : " 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