update sync scripts
This commit is contained in:
@@ -43,10 +43,12 @@ echo "=== Synchronisation automatique des secrets TLS ==="
|
|||||||
echo "Source: $SOURCE_CLUSTER (namespace: $SOURCE_NS)"
|
echo "Source: $SOURCE_CLUSTER (namespace: $SOURCE_NS)"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# Fonction pour déterminer les namespaces cibles pour un certificat wildcard
|
# Fonction pour déterminer automatiquement les namespaces cibles pour un certificat wildcard
|
||||||
# Les certificats wildcard doivent être copiés dans tous les namespaces qui les utilisent
|
# Détecte automatiquement tous les namespaces qui référencent ce secret dans leurs Ingress/IngressRoute
|
||||||
get_wildcard_target_namespaces() {
|
get_wildcard_target_namespaces() {
|
||||||
local cert_name=$1
|
local cert_name=$1
|
||||||
|
local secret_name=$2
|
||||||
|
local target_cluster=$3
|
||||||
local env=""
|
local env=""
|
||||||
|
|
||||||
# Extraire l'environnement depuis le nom du certificat
|
# Extraire l'environnement depuis le nom du certificat
|
||||||
@@ -60,22 +62,59 @@ get_wildcard_target_namespaces() {
|
|||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Liste des namespaces qui utilisent le certificat wildcard pour cet environnement
|
echo " 🔍 Détection automatique des namespaces utilisant $secret_name..."
|
||||||
# Ajoutez ici tous les namespaces qui référencent ce secret dans leurs Ingress
|
|
||||||
case "$env" in
|
# Initialiser le tableau des namespaces cibles
|
||||||
dev)
|
WILDCARD_TARGET_NAMESPACES=()
|
||||||
WILDCARD_TARGET_NAMESPACES=("headlamp-dev" "homarr-dev" "longhorn-dev")
|
|
||||||
;;
|
# Récupérer tous les namespaces du cluster cible
|
||||||
rct)
|
local namespaces
|
||||||
WILDCARD_TARGET_NAMESPACES=("headlamp-rct" "homarr-rct" "longhorn-rct")
|
if [ -z "$target_cluster" ]; then
|
||||||
;;
|
namespaces=$(kubectl get namespaces -o jsonpath='{.items[*].metadata.name}' 2>/dev/null)
|
||||||
prd)
|
else
|
||||||
WILDCARD_TARGET_NAMESPACES=("headlamp-prd" "homarr-prd" "longhorn-prd")
|
namespaces=$(kubectl get namespaces --context="$target_cluster" -o jsonpath='{.items[*].metadata.name}' 2>/dev/null)
|
||||||
;;
|
fi
|
||||||
*)
|
|
||||||
|
if [ -z "$namespaces" ]; then
|
||||||
|
echo " ⚠️ Aucun namespace trouvé dans le cluster $target_cluster"
|
||||||
return 1
|
return 1
|
||||||
;;
|
fi
|
||||||
esac
|
|
||||||
|
# Pour chaque namespace, vérifier s'il contient des Ingress ou IngressRoute qui référencent le secret
|
||||||
|
for ns in $namespaces; do
|
||||||
|
# Ignorer les namespaces système
|
||||||
|
if [[ "$ns" =~ ^(kube-system|kube-public|kube-node-lease|default)$ ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Vérifier les Ingress (ressource standard Kubernetes)
|
||||||
|
local ingress_found=false
|
||||||
|
if [ -z "$target_cluster" ]; then
|
||||||
|
ingress_found=$(kubectl get ingress -n "$ns" -o json 2>/dev/null | jq -r --arg secret "$secret_name" '.items[] | select(.spec.tls[]?.secretName == $secret) | .metadata.name' 2>/dev/null | head -1)
|
||||||
|
else
|
||||||
|
ingress_found=$(kubectl get ingress -n "$ns" --context="$target_cluster" -o json 2>/dev/null | jq -r --arg secret "$secret_name" '.items[] | select(.spec.tls[]?.secretName == $secret) | .metadata.name' 2>/dev/null | head -1)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Vérifier les IngressRoute (Traefik CRD)
|
||||||
|
local ingressroute_found=false
|
||||||
|
if [ -z "$target_cluster" ]; then
|
||||||
|
ingressroute_found=$(kubectl get ingressroute -n "$ns" -o json 2>/dev/null | jq -r --arg secret "$secret_name" '.items[] | select(.spec.tls.secretName == $secret) | .metadata.name' 2>/dev/null | head -1)
|
||||||
|
else
|
||||||
|
ingressroute_found=$(kubectl get ingressroute -n "$ns" --context="$target_cluster" -o json 2>/dev/null | jq -r --arg secret "$secret_name" '.items[] | select(.spec.tls.secretName == $secret) | .metadata.name' 2>/dev/null | head -1)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Si le secret est référencé dans ce namespace, l'ajouter à la liste
|
||||||
|
if [ -n "$ingress_found" ] || [ -n "$ingressroute_found" ]; then
|
||||||
|
WILDCARD_TARGET_NAMESPACES+=("$ns")
|
||||||
|
echo " ✅ $ns (détecté via Ingress/IngressRoute)"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ ${#WILDCARD_TARGET_NAMESPACES[@]} -eq 0 ]; then
|
||||||
|
echo " ⚠️ Aucun namespace n'utilise actuellement le secret $secret_name"
|
||||||
|
echo " Le secret sera synchronisé lors de la prochaine utilisation"
|
||||||
|
return 0 # Ne pas échouer, juste avertir
|
||||||
|
fi
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@@ -281,8 +320,8 @@ for i in $(seq 0 $((CERT_COUNT - 1))); do
|
|||||||
if [ "$IS_WILDCARD" = true ]; then
|
if [ "$IS_WILDCARD" = true ]; then
|
||||||
echo " 🌐 Certificat wildcard détecté"
|
echo " 🌐 Certificat wildcard détecté"
|
||||||
|
|
||||||
# Obtenir la liste des namespaces cibles
|
# Obtenir la liste des namespaces cibles (détection automatique)
|
||||||
if ! get_wildcard_target_namespaces "$CERT_NAME"; then
|
if ! get_wildcard_target_namespaces "$CERT_NAME" "$SECRET_NAME" "$TARGET_CLUSTER"; then
|
||||||
echo " ⚠️ Impossible de déterminer les namespaces cibles pour le wildcard"
|
echo " ⚠️ Impossible de déterminer les namespaces cibles pour le wildcard"
|
||||||
rm -f "$TEMP_FILE"
|
rm -f "$TEMP_FILE"
|
||||||
SKIP_COUNT=$((SKIP_COUNT + 1))
|
SKIP_COUNT=$((SKIP_COUNT + 1))
|
||||||
@@ -290,6 +329,14 @@ for i in $(seq 0 $((CERT_COUNT - 1))); do
|
|||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ ${#WILDCARD_TARGET_NAMESPACES[@]} -eq 0 ]; then
|
||||||
|
echo " ℹ️ Aucun namespace n'utilise actuellement ce certificat"
|
||||||
|
rm -f "$TEMP_FILE"
|
||||||
|
SKIP_COUNT=$((SKIP_COUNT + 1))
|
||||||
|
echo ""
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
echo " Destination: $TARGET_CLUSTER (namespaces: ${WILDCARD_TARGET_NAMESPACES[*]})"
|
echo " Destination: $TARGET_CLUSTER (namespaces: ${WILDCARD_TARGET_NAMESPACES[*]})"
|
||||||
|
|
||||||
# Copier le secret dans chaque namespace cible
|
# Copier le secret dans chaque namespace cible
|
||||||
|
|||||||
@@ -43,10 +43,12 @@ echo "=== Synchronisation automatique des secrets TLS ==="
|
|||||||
echo "Source: $SOURCE_CLUSTER (namespace: $SOURCE_NS)"
|
echo "Source: $SOURCE_CLUSTER (namespace: $SOURCE_NS)"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# Fonction pour déterminer les namespaces cibles pour un certificat wildcard
|
# Fonction pour déterminer automatiquement les namespaces cibles pour un certificat wildcard
|
||||||
# Les certificats wildcard doivent être copiés dans tous les namespaces qui les utilisent
|
# Détecte automatiquement tous les namespaces qui référencent ce secret dans leurs Ingress/IngressRoute
|
||||||
get_wildcard_target_namespaces() {
|
get_wildcard_target_namespaces() {
|
||||||
local cert_name=$1
|
local cert_name=$1
|
||||||
|
local secret_name=$2
|
||||||
|
local target_cluster=$3
|
||||||
local env=""
|
local env=""
|
||||||
|
|
||||||
# Extraire l'environnement depuis le nom du certificat
|
# Extraire l'environnement depuis le nom du certificat
|
||||||
@@ -60,22 +62,59 @@ get_wildcard_target_namespaces() {
|
|||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Liste des namespaces qui utilisent le certificat wildcard pour cet environnement
|
echo " 🔍 Détection automatique des namespaces utilisant $secret_name..."
|
||||||
# Ajoutez ici tous les namespaces qui référencent ce secret dans leurs Ingress
|
|
||||||
case "$env" in
|
# Initialiser le tableau des namespaces cibles
|
||||||
dev)
|
WILDCARD_TARGET_NAMESPACES=()
|
||||||
WILDCARD_TARGET_NAMESPACES=("headlamp-dev" "homarr-dev" "longhorn-dev")
|
|
||||||
;;
|
# Récupérer tous les namespaces du cluster cible
|
||||||
rct)
|
local namespaces
|
||||||
WILDCARD_TARGET_NAMESPACES=("headlamp-rct" "homarr-rct" "longhorn-rct")
|
if [ -z "$target_cluster" ]; then
|
||||||
;;
|
namespaces=$(kubectl get namespaces -o jsonpath='{.items[*].metadata.name}' 2>/dev/null)
|
||||||
prd)
|
else
|
||||||
WILDCARD_TARGET_NAMESPACES=("headlamp-prd" "homarr-prd" "longhorn-prd")
|
namespaces=$(kubectl get namespaces --context="$target_cluster" -o jsonpath='{.items[*].metadata.name}' 2>/dev/null)
|
||||||
;;
|
fi
|
||||||
*)
|
|
||||||
|
if [ -z "$namespaces" ]; then
|
||||||
|
echo " ⚠️ Aucun namespace trouvé dans le cluster $target_cluster"
|
||||||
return 1
|
return 1
|
||||||
;;
|
fi
|
||||||
esac
|
|
||||||
|
# Pour chaque namespace, vérifier s'il contient des Ingress ou IngressRoute qui référencent le secret
|
||||||
|
for ns in $namespaces; do
|
||||||
|
# Ignorer les namespaces système
|
||||||
|
if [[ "$ns" =~ ^(kube-system|kube-public|kube-node-lease|default)$ ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Vérifier les Ingress (ressource standard Kubernetes)
|
||||||
|
local ingress_found=false
|
||||||
|
if [ -z "$target_cluster" ]; then
|
||||||
|
ingress_found=$(kubectl get ingress -n "$ns" -o json 2>/dev/null | jq -r --arg secret "$secret_name" '.items[] | select(.spec.tls[]?.secretName == $secret) | .metadata.name' 2>/dev/null | head -1)
|
||||||
|
else
|
||||||
|
ingress_found=$(kubectl get ingress -n "$ns" --context="$target_cluster" -o json 2>/dev/null | jq -r --arg secret "$secret_name" '.items[] | select(.spec.tls[]?.secretName == $secret) | .metadata.name' 2>/dev/null | head -1)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Vérifier les IngressRoute (Traefik CRD)
|
||||||
|
local ingressroute_found=false
|
||||||
|
if [ -z "$target_cluster" ]; then
|
||||||
|
ingressroute_found=$(kubectl get ingressroute -n "$ns" -o json 2>/dev/null | jq -r --arg secret "$secret_name" '.items[] | select(.spec.tls.secretName == $secret) | .metadata.name' 2>/dev/null | head -1)
|
||||||
|
else
|
||||||
|
ingressroute_found=$(kubectl get ingressroute -n "$ns" --context="$target_cluster" -o json 2>/dev/null | jq -r --arg secret "$secret_name" '.items[] | select(.spec.tls.secretName == $secret) | .metadata.name' 2>/dev/null | head -1)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Si le secret est référencé dans ce namespace, l'ajouter à la liste
|
||||||
|
if [ -n "$ingress_found" ] || [ -n "$ingressroute_found" ]; then
|
||||||
|
WILDCARD_TARGET_NAMESPACES+=("$ns")
|
||||||
|
echo " ✅ $ns (détecté via Ingress/IngressRoute)"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ ${#WILDCARD_TARGET_NAMESPACES[@]} -eq 0 ]; then
|
||||||
|
echo " ⚠️ Aucun namespace n'utilise actuellement le secret $secret_name"
|
||||||
|
echo " Le secret sera synchronisé lors de la prochaine utilisation"
|
||||||
|
return 0 # Ne pas échouer, juste avertir
|
||||||
|
fi
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@@ -281,8 +320,8 @@ for i in $(seq 0 $((CERT_COUNT - 1))); do
|
|||||||
if [ "$IS_WILDCARD" = true ]; then
|
if [ "$IS_WILDCARD" = true ]; then
|
||||||
echo " 🌐 Certificat wildcard détecté"
|
echo " 🌐 Certificat wildcard détecté"
|
||||||
|
|
||||||
# Obtenir la liste des namespaces cibles
|
# Obtenir la liste des namespaces cibles (détection automatique)
|
||||||
if ! get_wildcard_target_namespaces "$CERT_NAME"; then
|
if ! get_wildcard_target_namespaces "$CERT_NAME" "$SECRET_NAME" "$TARGET_CLUSTER"; then
|
||||||
echo " ⚠️ Impossible de déterminer les namespaces cibles pour le wildcard"
|
echo " ⚠️ Impossible de déterminer les namespaces cibles pour le wildcard"
|
||||||
rm -f "$TEMP_FILE"
|
rm -f "$TEMP_FILE"
|
||||||
SKIP_COUNT=$((SKIP_COUNT + 1))
|
SKIP_COUNT=$((SKIP_COUNT + 1))
|
||||||
@@ -290,6 +329,14 @@ for i in $(seq 0 $((CERT_COUNT - 1))); do
|
|||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ ${#WILDCARD_TARGET_NAMESPACES[@]} -eq 0 ]; then
|
||||||
|
echo " ℹ️ Aucun namespace n'utilise actuellement ce certificat"
|
||||||
|
rm -f "$TEMP_FILE"
|
||||||
|
SKIP_COUNT=$((SKIP_COUNT + 1))
|
||||||
|
echo ""
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
echo " Destination: $TARGET_CLUSTER (namespaces: ${WILDCARD_TARGET_NAMESPACES[*]})"
|
echo " Destination: $TARGET_CLUSTER (namespaces: ${WILDCARD_TARGET_NAMESPACES[*]})"
|
||||||
|
|
||||||
# Copier le secret dans chaque namespace cible
|
# Copier le secret dans chaque namespace cible
|
||||||
|
|||||||
Reference in New Issue
Block a user