Le principe
Vous remplissez les champs d’un fichier Excel avec toutes les options souhaitées pour chacune des machines à créer. Puis vous enregistrer le fichier sous le format CSV que vous transférer sur la machine ou le script sera exécuté.
Le script va découper le fichier et créer pour chaque ligne la machine souhaitée sur l’infrastructure Proxmox
Exemple de fichier Excel
Il faut enregistrer le fichier Excel au format CSV avec séparateur « ; » et avec pour nom « deploy_machine.csv »
Transférer le fichier « deploy_machine.csv » sur le répertoire du script
root@floki03:~# cat deploy_machine.csv Nom de la machine;VMID -Template Model;vSwitch - R▒seau ;IP Souhait▒e;Taille m▒moire - RAM;Taille Disque - Go;Nombre CPU (Socket);Nombre vCPU (Core);Mot de passe ROOT node01-sql.house.cpb;5000;vmbr1;;2048;20G;1;2;test01 node02-sql.house.cpb;5000;vmbr1;;2048;20G;1;2;test02 node03-sql.house.cpb;5000;vmbr1;;2048;20G;1;2;test03 node01-www.house.cpb;5000;vmbr1;;1024;15G;1;1;test04 node02-www.house.cpb;5000;vmbr1;;1024;15G;1;1;test05 node03-www.house.cpb;5000;vmbr1;;1024;15G;1;1;test06 node01-ha.house.cpb;5000;vmbr1;;2048;10G;1;2; test07 node02-ha.house.cpb;5000;vmbr1;;2048;10G;1;2;test08 node02-dns.house.cpb;5000;vmbr1;172.16.185.50;1024;10G;1;1;
Lancement du script
root@floki03:~# ./Proxmox_Create_VM_via_Template_file.sh
Toutes les machines provisionner dans le fichier CSV seront créées sur l’infrastructure de votre PVE Proxmox.
Toutes les machines sont démarrées en même temps.
Côté Serveur Proxmox
Le Script se compose de la manière suivante
- Mise en variable des champs du fichier CSV
- Traitements des variables (Gestion des Options)
- Déploiement des machines virtuelles
- Démarrage des machines virtuelles
Le Script complet
#!/bin/bash clear COMPTEUR_LIGNE=0 if [[ -f vmid.txt ]] then rm -f vmid.txt fi load_main_program () { #### Test si fichier deploy_machine.csv existe FILE_DEPLOY=$PWD/deploy_machine.csv if [[ -f $FILE_DEPLOY ]] then ## Ttraitement du fichier for ligne in `cat $FILE_DEPLOY | tail -n +2` do ########################################### #### - Mise en variable des datas - ###### ########################################### MACHINE=`echo $ligne |awk -F";" '{print $1}'` TEMPLATE=`echo $ligne |awk -F";" '{print $2}'` VMBR_VM=`echo $ligne |awk -F";" '{print $3}'` IP=`echo $ligne |awk -F";" '{print $4}'` RAM=`echo $ligne |awk -F";" '{print $5}'` DISK=`echo $ligne |awk -F";" '{print $6}'` CPU=`echo $ligne |awk -F";" '{print $7}'` CORE=`echo $ligne |awk -F";" '{print $8}'` PASSWORD=`echo $ligne |awk -F";" '{print $9}'` ########################################### ### Traitement des Valeurs de la ligne #### ########################################### #Traitement Nom Machine existe dans le fichier if [[ -z "$MACHINE" ]] then echo "" echo "ERREUR - vous n'avez pas renseigné de nom de machine ...." echo "" exit else NOM_MACHINE=$MACHINE fi #Traitement Template existe dans le fichier if [[ -z "$TEMPLATE" ]] then echo "" echo "ERREUR - vous n'avez pas renseigné de Template ...." echo "" exit else NUMBER_TEMPLATE=$TEMPLATE fi #Traitement vmbr réseau existe dans le fichier if [[ -z "$VMBR_VM" ]] then echo "" echo "ERREUR - vous n'avez pas renseigné le vSwitch du réseau Proxmox ...." echo "" exit else load_vmbr $VMBR_VM fi # Traitement IP Fixe par l'uilisateur dans le fichier if [[ -z "$IP" ]] then #Cherche une IP dispo sur le masque du Réseau vswitch indiqué ci-dessus COMPTEUR_LIGNE=`expr $COMPTEUR_LIGNE + 1` IP_VALID=`nmap -v -sn $MASK_IP/24|grep -v $MASK_IP|grep down |head -$COMPTEUR_LIGNE |tail -1 |awk '{print $5}'` else IP_VALID=$IP fi # Traitement Taille mémoire indiqué sur le fichier if [[ -z "$RAM" ]] then ## Valeur par defaut 1024 SIZE_RAM=1024 else SIZE_RAM=$RAM fi # Traitement taille DISK de notre VM if [[ -z "$DISK" ]] then ## Valeur par defaut 10G SIZE_DISK=10G else SIZE_DISK=$DISK fi # Traitement Nombre de CPU (Socket) if [[ -z "$CPU" ]] then ## Valeur par defaut 1 CPU SIZE_CPU=1 else SIZE_CPU=$CPU fi # Traitement nombre vCPU (Core) if [[ -z "$CORE" ]] then ## Valeur par defaut 1 vCPU SIZE_CORE=2 else SIZE_CORE=$CORE fi # Traitemnent Mot de passe if [[ -z "$PASSWORD" ]] then ## Valeur par defaut 1 vCPU PASS=toor else PASS=$PASSWORD fi ############################################# # Lancement du déploiement des machines ############################################ deploy_machines done else echo "" echo "Le fichier $FILE_DEPLOY n'existe pas sur la ressource" echo "" exit fi } ############################################# # Tables des Réseaux sur le serveur ############################################ load_vmbr () { case $VMBR_VM in vmbr0) GATEWAY="192.168.1.1" NAMESERVER="192.168.1.1" DOMAINE="house.cpb" MASK_IP="192.168.1.0" ;; vmbr1) GATEWAY="172.16.185.201" NAMESERVER="172.16.185.1" DOMAINE="house.cpb" MASK_IP="172.16.185.0" ;; vmbr2) GATEWAY="172.32.185.201" NAMESERVER="172.16.185.1" DOMAINE="house.cpb" MASK_IP="172.32.185.0" ;; vmbr3) GATEWAY="172.16.186.201" NAMESERVER="172.16.185.1" DOMAINE="house.cpb" MASK_IP="172.16.186.0" ;; esac } deploy_machines () { ############################################## # Résumé des valeurs # ############################################## echo "" echo $NOM_MACHINE echo $NUMBER_TEMPLATE echo $VMBR_VM echo $IP_VALID echo $SIZE_RAM echo $SIZE_DISK echo $SIZE_CPU echo $SIZE_CORE echo $PASS ############################################## # Lancement de la création des machines VM # ############################################# echo "" echo "" echo "#########################################################################################" echo " Déploiement de la machine $NOM_MACHINE sur l'Infra PROXMOX " echo "#########################################################################################" echo "" ##### SPECIFICATION des machines virtuelles DATASTORE=DataStore02 PATH_DATA=/mnt/pve/DataStore02 USER=root #Cherche la derniere machine et déploi sur VM+1 LAST_VM=`qm list |awk '{print $1}' |grep -v VMID|grep -v $NUMBER_TEMPLATE |tail -1` LAST_VM=`expr $LAST_VM + 1` #Clone du Template qm clone $NUMBER_TEMPLATE $LAST_VM --name $NOM_MACHINE #### Reseau de la machine $NOM_MACHINE qm set $LAST_VM --ipconfig0 ip="$IP_VALID"/24,gw=$GATEWAY qm set $LAST_VM --searchdomain $DOMAINE qm set $LAST_VM --nameserver $NAMESERVER ## HArdware Machine qm resize $LAST_VM scsi0 $SIZE_DISK qm set $LAST_VM --memory $SIZE_RAM qm set $LAST_VM --core $SIZE_CORE qm set $LAST_VM --socket $SIZE_CPU # User qm set $LAST_VM --ciuser $USER qm set $LAST_VM --cipassword $PASS qm set $LAST_VM --sshkey ~/.ssh/id_rsa.pub # Deplace la VM sur le DATASTORE qm move_disk $LAST_VM scsi0 $DATASTORE --delete #Démarrage de la machine echo $LAST_VM >> vmid.txt #qm start $LAST_VM } load_main_program ## Démarrage des machines for line in `cat vmid.txt` do echo "###################################################" echo "## Démarrage de la Machine Virtuelle VMID: $line ##" echo "###################################################" echo "" qm start $line done
Views: 25