backup-scripts/restore_pv.sh

71 lines
1.9 KiB
Bash
Executable File

#!/bin/bash
set -e
OLD_NODE="kube.ia86.cc"
NEW_NODE="newkube.ia86.cc"
echo "🛑 Suppression de tous les PV existants..."
for pv in $(kubectl get pv --no-headers -o custom-columns=":metadata.name"); do
echo "🗑️ Suppression du PV : $pv"
kubectl delete pv "$pv" --wait=false
done
# Attente active stricte
echo "⏳ Vérification que tous les PV soient supprimés complètement..."
while true; do
nb=$(kubectl get pv --no-headers 2>/dev/null | wc -l)
if [ "$nb" -eq 0 ]; then
echo "✅ Tous les PV sont supprimés."
break
else
echo "$nb PV encore présents... attente 5 secondes..."
sleep 5
fi
done
echo "📦 Début de la recréation depuis $(pwd)..."
for file in *.yaml; do
echo "🔧 Traitement du fichier $file"
cp "$file" "${file}.tmp"
# Supprimer tout à partir du bloc status: avec awk (plus sûr que sed)
awk '
BEGIN {skip=0}
/^status:/ {skip=1}
skip==0 {print}
' "${file}.tmp" > "${file}.fixed"
# Remplacer le node name proprement
sed -i "s/$OLD_NODE/$NEW_NODE/g" "${file}.fixed"
echo "🚀 Création du PV corrigé depuis $file"
kubectl apply -f "${file}.fixed"
rm -f "${file}.tmp" "${file}.fixed"
done
echo "✅ Recréation complète sans erreurs YAML."
echo "🔧 Forçage des PV en Bound (seulement ceux pas déjà Bound)..."
for pv in $(kubectl get pv --no-headers | grep -v Bound | awk '{print $1}'); do
echo "➡️ Forçage du PV $pv"
kubectl patch pv "$pv" --type='merge' -p '{"status":{"phase":"Bound"}}'
done
echo "✅ Seuls les PV non-Bound ont été corrigés."
echo "🔧 Suppression des claimRef pour libérer les PV..."
for pv in $(kubectl get pv --no-headers | grep Released | awk '{print $1}'); do
echo "➡️ Suppression du claimRef sur $pv"
kubectl patch pv "$pv" --type json -p='[{"op": "remove", "path": "/spec/claimRef"}]'
done
echo "✅ Tous les PV sont maintenant Available."