#!/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 <