176 lines
5.4 KiB
Bash
Executable File
176 lines
5.4 KiB
Bash
Executable File
#!/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}"
|