proxmox-scripts/convert-static-to-dhcp.sh
thomas 05071d0841 Actualiser convert-static-to-dhcp.sh
Signed-off-by: thomas <contact@thomasmlg.fr>
2025-05-18 23:38:37 +02:00

102 lines
3.2 KiB
Bash
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Script pour configurer l'interface réseau en DHCP pour des conteneurs LXC sur plusieurs PVE
# COMMANDE: ./<nomdufichier>.sh <numéros des conteneurs>
# Il supporte les plages de nombre de conteneur ex: 100-110 ou 100-110
# Ou simplement numéro par numéro 100 101 102 etc..
# Efface l'écran au début
clear
TITLE="🖥️ CONFIGURATION DES CONTENEURS LXC"
HEADER_WIDTH=$(tput cols)
# Affiche le titre centré
printf "\033[1;36m" # Couleur cyan
printf "%*s\n" $((($HEADER_WIDTH + ${#TITLE}) / 2)) "$TITLE"
printf "\033[0m" # Réinitialise la couleur
sleep 2
# Vérifie si au moins un CTID ou une plage est fournie
if [ $# -lt 1 ]; then
echo -e "\033[1;31m❌ Usage : $0 <CTID1> <CTID2-CTID3> ...\033[0m"
exit 1
fi
# Crée une liste vide pour stocker tous les CTID
CTID_LIST=()
# Parcours les arguments pour identifier les CTID et les plages
for arg in "$@"; do
if [[ "$arg" =~ ^[0-9]+$ ]]; then
# CTID simple
CTID_LIST+=("$arg")
elif [[ "$arg" =~ ^([0-9]+)-([0-9]+)$ ]]; then
# Plage de CTID
START=${BASH_REMATCH[1]}
END=${BASH_REMATCH[2]}
if [ "$START" -gt "$END" ]; then
echo -e "\033[1;31m❌ Plage invalide : $START-$END\033[0m"
exit 1
fi
for ((ctid=START; ctid<=END; ctid++)); do
CTID_LIST+=("$ctid")
done
else
echo -e "\033[1;31m❌ Argument invalide : $arg\033[0m"
exit 1
fi
done
TOTAL_CONTAINERS=${#CTID_LIST[@]}
CURRENT_INDEX=0
START_TIME=$(date +%s)
# Configuration des conteneurs
for ctid in "${CTID_LIST[@]}"; do
CURRENT_INDEX=$((CURRENT_INDEX + 1))
PERCENT=$((CURRENT_INDEX * 100 / TOTAL_CONTAINERS))
clear
# Affiche le titre centré
TITLE_CT="🖥️ CONFIGURATION DU CONTENEUR $ctid ($PERCENT%)"
BORDER=$(printf '━%.0s' $(seq 1 $HEADER_WIDTH))
SPACER=$(printf ' %.0s' $(seq 1 $((($HEADER_WIDTH - ${#TITLE_CT}) / 2))))
echo -e "\033[1;36m$BORDER\033[0m"
echo -e "\033[1;36m$SPACER$TITLE_CT\033[0m"
echo -e "\033[1;36m$BORDER\033[0m"
echo -e "\n\n"
# Démarre le conteneur si éteint
if ! lxc-info -n "$ctid" | grep -q "RUNNING"; then
echo -e "\033[1;33m⚠ $ctid est éteint. Démarrage en cours...\033[0m"
lxc-start -n "$ctid" &> /dev/null
sleep 2
fi
echo -e "\033[1;32m✅ $ctid est maintenant en cours d'exécution.\033[0m"
# Met à jour la configuration réseau avec pct
pct set "$ctid" -net0 name=eth0,bridge=vmbr0,ip=dhcp &> /dev/null
echo -e "\033[1;34m🔄 Configuration réseau mise à jour pour $ctid avec pct.\033[0m"
# Redémarre l'interface réseau sans afficher les logs
lxc-attach -n "$ctid" -- ifdown eth0 &> /dev/null || true
lxc-attach -n "$ctid" -- ifup eth0 &> /dev/null || true
echo -e "\033[1;32m🚀 DHCP configuré et interface eth0 redémarrée pour $ctid.\033[0m"
sleep 2
done
clear
# Affiche le message final sans bordures
END_TIME=$(date +%s)
TOTAL_TIME=$((END_TIME - START_TIME))
MINUTES=$((TOTAL_TIME / 60))
SECONDS=$((TOTAL_TIME % 60))
printf "\033[1;32m🎉 Configuration terminée en ${MINUTES}m ${SECONDS}s. Félicitations ! Tous les conteneurs ont été configurés avec succès !\033[0m\n"