+ script lb
This commit is contained in:
175
kind/fix-argocd-clusters.sh
Executable file
175
kind/fix-argocd-clusters.sh
Executable 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}"
|
||||
Reference in New Issue
Block a user