#!/bin/bash # Script de vérification des ExternalSecrets pour cert-manager-webhook-ovh set -e # Détection automatique du contexte si non fourni if [ -z "$1" ]; then # Essayer de détecter le contexte actuel CURRENT_CONTEXT=$(kubectl config current-context 2>/dev/null || echo "") if [ -n "$CURRENT_CONTEXT" ]; then CONTEXT="$CURRENT_CONTEXT" echo "⚠️ Aucun contexte spécifié, utilisation du contexte actuel: $CONTEXT" else CONTEXT="" echo "⚠️ Aucun contexte kubectl trouvé. Les commandes seront exécutées sans --context" fi else CONTEXT="$1" fi # Fonction pour exécuter kubectl avec ou sans contexte kubectl_cmd() { if [ -n "$CONTEXT" ]; then kubectl "$@" --context="$CONTEXT" else kubectl "$@" fi } SECRET_NAME="${2:-cert-manager-webhook-ovh}" NAMESPACE_WEBHOOK="${3:-cert-manager-webhook-ovh-ops}" NAMESPACE_CERTMANAGER="${4:-cert-manager-ops}" SECRET_STORE_NAME="${5:-vault-backend}" echo "=== Vérification des ExternalSecrets pour cert-manager-webhook-ovh ===" echo "Contexte: $CONTEXT" echo "" # 1. Vérifier le ClusterSecretStore echo "1. Vérification du ClusterSecretStore '$SECRET_STORE_NAME'..." if kubectl_cmd get clustersecretstore "$SECRET_STORE_NAME" &>/dev/null; then echo " ✅ ClusterSecretStore trouvé" kubectl_cmd get clustersecretstore "$SECRET_STORE_NAME" -o wide echo "" # Afficher les détails echo " Détails du ClusterSecretStore:" kubectl_cmd describe clustersecretstore "$SECRET_STORE_NAME" | grep -A 20 "Spec:" || true echo "" else echo " ❌ ClusterSecretStore '$SECRET_STORE_NAME' non trouvé" echo "" fi # 2. Vérifier les ExternalSecrets echo "2. Vérification des ExternalSecrets..." # Dans cert-manager-webhook-ovh-ops echo " a) Dans le namespace '$NAMESPACE_WEBHOOK':" if kubectl_cmd get externalsecret "$SECRET_NAME" -n "$NAMESPACE_WEBHOOK" &>/dev/null; then echo " ✅ ExternalSecret trouvé" kubectl_cmd get externalsecret "$SECRET_NAME" -n "$NAMESPACE_WEBHOOK" -o wide echo "" # Afficher le statut echo " Statut:" kubectl_cmd get externalsecret "$SECRET_NAME" -n "$NAMESPACE_WEBHOOK" -o jsonpath='{.status}' | jq '.' 2>/dev/null || \ kubectl_cmd describe externalsecret "$SECRET_NAME" -n "$NAMESPACE_WEBHOOK" | grep -A 10 "Status:" || true echo "" else echo " ❌ ExternalSecret '$SECRET_NAME' non trouvé dans '$NAMESPACE_WEBHOOK'" echo "" fi # Dans cert-manager-ops echo " b) Dans le namespace '$NAMESPACE_CERTMANAGER':" if kubectl_cmd get externalsecret "$SECRET_NAME" -n "$NAMESPACE_CERTMANAGER" &>/dev/null; then echo " ✅ ExternalSecret trouvé" kubectl_cmd get externalsecret "$SECRET_NAME" -n "$NAMESPACE_CERTMANAGER" -o wide echo "" # Afficher le statut echo " Statut:" kubectl_cmd get externalsecret "$SECRET_NAME" -n "$NAMESPACE_CERTMANAGER" -o jsonpath='{.status}' | jq '.' 2>/dev/null || \ kubectl_cmd describe externalsecret "$SECRET_NAME" -n "$NAMESPACE_CERTMANAGER" | grep -A 10 "Status:" || true echo "" else echo " ❌ ExternalSecret '$SECRET_NAME' non trouvé dans '$NAMESPACE_CERTMANAGER'" echo "" fi # 3. Vérifier les Secrets créés echo "3. Vérification des Secrets créés par External Secrets..." # Dans cert-manager-webhook-ovh-ops echo " a) Secret dans '$NAMESPACE_WEBHOOK':" if kubectl_cmd get secret "$SECRET_NAME" -n "$NAMESPACE_WEBHOOK" &>/dev/null; then echo " ✅ Secret trouvé" kubectl_cmd get secret "$SECRET_NAME" -n "$NAMESPACE_WEBHOOK" -o wide echo "" # Vérifier les clés présentes echo " Clés présentes dans le secret:" kubectl_cmd get secret "$SECRET_NAME" -n "$NAMESPACE_WEBHOOK" -o jsonpath='{.data}' | jq 'keys' 2>/dev/null || \ kubectl_cmd get secret "$SECRET_NAME" -n "$NAMESPACE_WEBHOOK" -o jsonpath='{.data}' | grep -o '"[^"]*":' | sed 's/"//g' | sed 's/://g' || true echo "" else echo " ❌ Secret '$SECRET_NAME' non trouvé dans '$NAMESPACE_WEBHOOK'" echo " ⚠️ Le secret sera créé automatiquement par External Secrets une fois la synchronisation réussie" echo "" fi # Dans cert-manager-ops echo " b) Secret dans '$NAMESPACE_CERTMANAGER':" if kubectl_cmd get secret "$SECRET_NAME" -n "$NAMESPACE_CERTMANAGER" &>/dev/null; then echo " ✅ Secret trouvé" kubectl_cmd get secret "$SECRET_NAME" -n "$NAMESPACE_CERTMANAGER" -o wide echo "" # Vérifier les clés présentes echo " Clés présentes dans le secret:" kubectl_cmd get secret "$SECRET_NAME" -n "$NAMESPACE_CERTMANAGER" -o jsonpath='{.data}' | jq 'keys' 2>/dev/null || \ kubectl_cmd get secret "$SECRET_NAME" -n "$NAMESPACE_CERTMANAGER" -o jsonpath='{.data}' | grep -o '"[^"]*":' | sed 's/"//g' | sed 's/://g' || true echo "" else echo " ❌ Secret '$SECRET_NAME' non trouvé dans '$NAMESPACE_CERTMANAGER'" echo " ⚠️ Le secret sera créé automatiquement par External Secrets une fois la synchronisation réussie" echo "" fi # 4. Vérifier les événements et logs d'External Secrets Operator echo "4. Vérification des événements récents..." echo " Événements pour ExternalSecret dans '$NAMESPACE_CERTMANAGER':" kubectl_cmd get events -n "$NAMESPACE_CERTMANAGER" \ --field-selector involvedObject.name="$SECRET_NAME" \ --sort-by='.lastTimestamp' | tail -5 || echo " Aucun événement récent" echo "" # 5. Résumé echo "=== Résumé ===" echo "" echo "Pour voir les détails complets d'un ExternalSecret:" if [ -n "$CONTEXT" ]; then echo " kubectl describe externalsecret $SECRET_NAME -n $NAMESPACE_CERTMANAGER --context=$CONTEXT" echo "" echo "Pour voir les logs d'External Secrets Operator:" echo " kubectl logs -n external-secrets-system -l app.kubernetes.io/name=external-secrets --context=$CONTEXT --tail=50" echo "" echo "Pour forcer une synchronisation immédiate:" echo " kubectl annotate externalsecret $SECRET_NAME -n $NAMESPACE_CERTMANAGER --context=$CONTEXT force-sync=\$(date +%s) --overwrite" else echo " kubectl describe externalsecret $SECRET_NAME -n $NAMESPACE_CERTMANAGER" echo "" echo "Pour voir les logs d'External Secrets Operator:" echo " kubectl logs -n external-secrets-system -l app.kubernetes.io/name=external-secrets --tail=50" echo "" echo "Pour forcer une synchronisation immédiate:" echo " kubectl annotate externalsecret $SECRET_NAME -n $NAMESPACE_CERTMANAGER force-sync=\$(date +%s) --overwrite" fi echo ""