MODOP – Déploiement de VM/Template via CSV/Excel – Proxmox

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

  1. Mise en variable des champs du fichier CSV
  2. Traitements des variables (Gestion des Options)
  3. Déploiement des machines virtuelles
  4. 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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *