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