+ script lb

This commit is contained in:
2025-11-18 19:28:47 +01:00
parent 0901504e7c
commit 5f7a3ebd03

175
kind/fix-argocd-clusters.sh Executable file
View File

@@ -0,0 +1,175 @@
#!/bin/bash
set -e
echo "🔧 Correction des clusters ArgoCD pour KinD multi-cluster"
echo ""
# Couleurs pour l'affichage
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color
# Fonction pour créer un kubeconfig modifié
create_modified_kubeconfig() {
local cluster_name=$1
local server_url=$2
local output_file=$3
echo -e "${YELLOW}📝 Création du kubeconfig pour ${cluster_name}...${NC}"
# Extraire les données du kubeconfig original
kubectl config view --flatten --minify \
--context "kind-${cluster_name}" > "${output_file}.tmp"
# Remplacer l'URL du serveur
sed "s|server: https://127.0.0.1:[0-9]*|server: ${server_url}|g" \
"${output_file}.tmp" > "${output_file}"
rm "${output_file}.tmp"
echo -e "${GREEN}✓ Kubeconfig créé: ${output_file}${NC}"
}
# Vérifier que nous sommes sur le contexte management
current_context=$(kubectl config current-context)
if [[ "$current_context" != "kind-management" ]]; then
echo -e "${RED}❌ Erreur: Vous devez être sur le contexte kind-management${NC}"
echo "Exécutez: kubectl config use-context kind-management"
exit 1
fi
# Vérifier qu'ArgoCD est installé
if ! kubectl get namespace argocd &> /dev/null; then
echo -e "${RED}❌ Erreur: Le namespace argocd n'existe pas${NC}"
echo "Installez ArgoCD d'abord avec:"
echo "kubectl create namespace argocd"
echo "kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml"
exit 1
fi
echo ""
echo "🔍 Détection des clusters..."
# Créer un répertoire temporaire
TEMP_DIR=$(mktemp -d)
echo "📁 Répertoire temporaire: ${TEMP_DIR}"
# Configuration des clusters
declare -A CLUSTERS
CLUSTERS["production"]="https://production-external-load-balancer:6443"
CLUSTERS["development"]="https://development-control-plane:6443"
echo ""
echo "🔑 Création des kubeconfigs modifiés..."
for cluster in "${!CLUSTERS[@]}"; do
server_url="${CLUSTERS[$cluster]}"
kubeconfig_file="${TEMP_DIR}/${cluster}-kubeconfig.yaml"
# Vérifier que le contexte existe
if ! kubectl config get-contexts "kind-${cluster}" &> /dev/null; then
echo -e "${RED}❌ Le contexte kind-${cluster} n'existe pas${NC}"
continue
fi
create_modified_kubeconfig "$cluster" "$server_url" "$kubeconfig_file"
done
echo ""
echo "📦 Enregistrement des clusters dans ArgoCD..."
# Fonction pour enregistrer un cluster
register_cluster() {
local cluster_name=$1
local kubeconfig_file=$2
echo -e "${YELLOW}🔗 Enregistrement du cluster ${cluster_name}...${NC}"
# Supprimer le cluster s'il existe déjà
kubectl delete secret -n argocd "cluster-kind-${cluster_name}" 2>/dev/null || true
# Créer le secret pour le cluster
# Note: argocd doit être dans le PATH ou utilisez le kubectl
if command -v argocd &> /dev/null; then
# Méthode avec argocd CLI
argocd cluster add "kind-${cluster_name}" \
--name "${cluster_name}" \
--kubeconfig "${kubeconfig_file}" \
--yes 2>/dev/null || {
echo -e "${RED}❌ Échec avec argocd CLI, tentative avec kubectl...${NC}"
register_cluster_kubectl "$cluster_name" "$kubeconfig_file"
}
else
# Méthode alternative avec kubectl directement
register_cluster_kubectl "$cluster_name" "$kubeconfig_file"
fi
echo -e "${GREEN}✓ Cluster ${cluster_name} enregistré${NC}"
}
# Fonction alternative pour enregistrer via kubectl
register_cluster_kubectl() {
local cluster_name=$1
local kubeconfig_file=$2
# Extraire les informations du kubeconfig
local server=$(grep "server:" "$kubeconfig_file" | awk '{print $2}')
local ca_data=$(grep "certificate-authority-data:" "$kubeconfig_file" | awk '{print $2}')
local cert_data=$(grep "client-certificate-data:" "$kubeconfig_file" | awk '{print $2}')
local key_data=$(grep "client-key-data:" "$kubeconfig_file" | awk '{print $2}')
# Créer le secret
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: cluster-kind-${cluster_name}
namespace: argocd
labels:
argocd.argoproj.io/secret-type: cluster
type: Opaque
stringData:
name: ${cluster_name}
server: ${server}
config: |
{
"tlsClientConfig": {
"insecure": false,
"caData": "${ca_data}",
"certData": "${cert_data}",
"keyData": "${key_data}"
}
}
EOF
}
# Enregistrer tous les clusters
for cluster in "${!CLUSTERS[@]}"; do
kubeconfig_file="${TEMP_DIR}/${cluster}-kubeconfig.yaml"
if [[ -f "$kubeconfig_file" ]]; then
register_cluster "$cluster" "$kubeconfig_file"
fi
done
echo ""
echo "🧹 Nettoyage..."
# Garder les fichiers pour debug si nécessaire
# rm -rf "$TEMP_DIR"
echo "Les kubeconfigs modifiés sont dans: ${TEMP_DIR}"
echo ""
echo "✅ Configuration terminée !"
echo ""
echo "🔍 Vérification des clusters enregistrés:"
kubectl get secrets -n argocd -l argocd.argoproj.io/secret-type=cluster
echo ""
echo "📊 Pour voir le statut dans ArgoCD:"
echo " kubectl port-forward svc/argocd-server -n argocd 8080:443"
echo ""
echo "🔐 Pour obtenir le mot de passe admin:"
echo " kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath='{.data.password}' | base64 -d"
echo ""
echo -e "${GREEN}✨ Terminé ! Vos clusters dev et prod devraient maintenant être accessibles depuis ArgoCD${NC}"