Si vous êtes comme moi et que vous bricolez un homelab VMware, vous savez que les ressources ne tombent pas du ciel. Entre le CPU et la RAM limités (c’est moins vrai depuis le NVMe Tiering) on compte chaque VM déployée !
Alors quand il s’agit de monter une infra pour du test, la tentation est grande de déployer un vCenter pour manager son unique ESX. C’est vrai qu’il amène pas mal de fonctionnalités bien utiles mais il a un gros inconvénient il est souvent trop gourmand pour nos petites machines.
Surtout si tu veux déployer un cluster vSAN qui aura lui aussi son propre vCenter
C’est là que mon petit script Bash entre en scène : il me permet de déployer plusieurs ESXi nested en restant sur un simple ESXi standalone, sans vCenter, sans cluster, et surtout sans dévorer toutes les ressources.
Comment fonctionne le script ?
Il faut installer à la mano un premier Nested ESX que l’on nommera template_esx.
Une fois installé, on se connecte à la console et on fait un reset de la configuration System : c’est un moyen rapide de « dépersonnaliser » un ESX et d’être sur qu’au moment de le cloner, on aura bien un comportement similaire à un template générique.
On peut même enlever de l’inventaire notre VM pour éviter de la démarrer sans le vouloir.
ATTENTION : Ne supprimez pas votre VM, il faut juste la désenregistrer

Personnaliser le script
Activer SSH sur votre ESX et enregistrer le script sur votre datastore.
Pensez à rendre exécutable le script avec un chmod +x
Le script est assez lisible, il va tout simplement copier la VM template_esx (conf et disques) dans un nouveau dossier qui portera le nom que vous lui aurez donné.
#!/bin/sh
# ===============================
# Script pour cloner une VM ESXi standalone
# ===============================
# --- CONFIGURATION ---
ORIGINAL_VM_NAME="template_esx" # Nom du dossier de la VM source
DATASTORE="DatastoreNVME" # Nom du datastore
VM_PATH="/vmfs/volumes/$DATASTORE"
# --- DEMANDER LE NOM DU CLONE À L'UTILISATEUR ---
read -p "Entrez le nom du clone : " CLONED_VM_NAME
if [ -z "$CLONED_VM_NAME" ]; then
echo "Erreur : vous devez entrer un nom pour le clone."
exit 1
fi
echo "[+] Nom du clone choisi : $CLONED_VM_NAME"
# --- CRÉER LE DOSSIER DE LA VM CLONÉE ---
mkdir -p "$VM_PATH/$CLONED_VM_NAME"
echo "Dossier $CLONED_VM_NAME créé."
# --- COPIER LES FICHIERS DE CONFIGURATION ---
cp "$VM_PATH/$ORIGINAL_VM_NAME/"*.vmx "$VM_PATH/$CLONED_VM_NAME/"
cp "$VM_PATH/$ORIGINAL_VM_NAME/"*.nvram "$VM_PATH/$CLONED_VM_NAME/"
cp "$VM_PATH/$ORIGINAL_VM_NAME/"*.vmxf "$VM_PATH/$CLONED_VM_NAME/" 2>/dev/null
cp "$VM_PATH/$ORIGINAL_VM_NAME/"*.vmsd "$VM_PATH/$CLONED_VM_NAME/" 2>/dev/null
echo "Fichiers de configuration copiés."
# --- CLONER LES DISQUES VMDK ---
for disk in "$VM_PATH/$ORIGINAL_VM_NAME/"*.vmdk; do
base_disk=$(basename "$disk")
new_disk="$VM_PATH/$CLONED_VM_NAME/${base_disk%.vmdk}_cloned.vmdk"
echo "Clonage de $base_disk → $(basename $new_disk)"
vmkfstools -i "$disk" "$new_disk" -d thin
done
# --- METTRE À JOUR LE VMX POUR UTILISER LES NOUVEAUX DISQUES ---
for new_disk in "$VM_PATH/$CLONED_VM_NAME/"*_cloned.vmdk; do
# Remplace le disque original par le disque cloné
original_disk_name=$(basename "$new_disk" | sed 's/_cloned.vmdk/.vmdk/')
sed -i "s/$original_disk_name/$(basename $new_disk)/g" "$VM_PATH/$CLONED_VM_NAME/$ORIGINAL_VM_NAME.vmx"
done
# Renommer le fichier VMX pour le clone
mv "$VM_PATH/$CLONED_VM_NAME/$ORIGINAL_VM_NAME.vmx" "$VM_PATH/$CLONED_VM_NAME/$CLONED_VM_NAME.vmx"
# Enregistre la VM dans l’inventaire
vim-cmd solo/registervm "$VM_PATH/$CLONED_VM_NAME/$CLONED_VM_NAME.vmx"
#Renommer le displayName dans le fichier vmx
#sed -i "s/^displayName = \"template_esx\"/displayName = \"$CLONED_VM_NAME\"/" $VM_PATH/$CLONED_VM_NAME/$CLONED_VM_NAME.vmx
echo "Au premier démarrage, choisissez 'I copied it' pour générer un nouvel UUID et MAC."
En quelques secondes vous pouvez déployer autant d’ESX que vous le souhaitez.







Laisser un commentaire