lecoffre_node/scripts/sync-configs.sh

197 lines
5.4 KiB
Bash
Executable File

#!/bin/bash
# Script de synchronisation des configurations centralisées
# Usage: ./scripts/sync-configs.sh [project_name]
# Si aucun projet n'est spécifié, synchronise tous les projets
set -euo pipefail
# Couleurs pour les logs
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Fonction de logging
log() {
echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1"
}
log_success() {
echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')] ✓${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[$(date +'%Y-%m-%d %H:%M:%S')] ⚠${NC} $1"
}
log_error() {
echo -e "${RED}[$(date +'%Y-%m-%d %H:%M:%S')] ✗${NC} $1"
}
# Répertoire racine du projet
PROJECT_ROOT="/home/debian/lecoffre_node"
CONF_DIR="$PROJECT_ROOT/conf"
# Vérifier que nous sommes dans le bon répertoire
if [[ ! -d "$CONF_DIR" ]]; then
log_error "Répertoire de configuration non trouvé: $CONF_DIR"
exit 1
fi
# Fonction pour synchroniser un projet
sync_project() {
local project_name="$1"
local project_path="/home/debian/$project_name"
log "Synchronisation de $project_name..."
# Vérifier que le projet existe
if [[ ! -d "$project_path" ]]; then
log_warning "Projet $project_name non trouvé: $project_path"
return 1
fi
case "$project_name" in
"lecoffre_node")
# Bitcoin configuration
if [[ -f "$CONF_DIR/bitcoin/bitcoin.conf" ]]; then
cp "$CONF_DIR/bitcoin/bitcoin.conf" "$project_path/bitcoin/"
log_success "Bitcoin config copiée"
fi
# Relay configuration
if [[ -f "$CONF_DIR/relay/sdk_relay.conf" ]]; then
cp "$CONF_DIR/relay/sdk_relay.conf" "$project_path/relay/"
log_success "Relay config copiée"
fi
;;
"ihm_client")
# Nginx configuration
if [[ -f "$CONF_DIR/ihm_client/nginx.dev.conf" ]]; then
cp "$CONF_DIR/ihm_client/nginx.dev.conf" "$project_path/"
log_success "Nginx config copiée vers ihm_client"
fi
;;
"lecoffre-front")
# Frontend configuration (si nécessaire)
if [[ -d "$CONF_DIR/lecoffre-front" ]]; then
cp -r "$CONF_DIR/lecoffre-front/"* "$project_path/" 2>/dev/null || true
log_success "Frontend configs copiées"
fi
;;
"lecoffre-back-mini")
# Backend configuration (si nécessaire)
if [[ -d "$CONF_DIR/lecoffre-back" ]]; then
cp -r "$CONF_DIR/lecoffre-back/"* "$project_path/" 2>/dev/null || true
log_success "Backend configs copiées"
fi
;;
*)
log_warning "Projet $project_name non configuré pour la synchronisation"
return 1
;;
esac
log_success "Synchronisation de $project_name terminée"
}
# Fonction pour synchroniser tous les projets
sync_all() {
log "Synchronisation de tous les projets..."
local projects=("lecoffre_node" "ihm_client" "lecoffre-front" "lecoffre-back-mini")
local success_count=0
local total_count=${#projects[@]}
for project in "${projects[@]}"; do
if sync_project "$project"; then
((success_count++))
fi
done
log "Synchronisation terminée: $success_count/$total_count projets synchronisés"
if [[ $success_count -eq $total_count ]]; then
log_success "Tous les projets ont été synchronisés avec succès"
return 0
else
log_warning "Certains projets n'ont pas pu être synchronisés"
return 1
fi
}
# Fonction pour afficher l'aide
show_help() {
echo "Usage: $0 [OPTIONS] [PROJECT_NAME]"
echo ""
echo "Synchronise les configurations centralisées vers les projets"
echo ""
echo "OPTIONS:"
echo " -h, --help Affiche cette aide"
echo " -l, --list Liste les projets disponibles"
echo " -v, --verbose Mode verbeux"
echo ""
echo "PROJECT_NAME:"
echo " Nom du projet à synchroniser (optionnel)"
echo " Si non spécifié, synchronise tous les projets"
echo ""
echo "Exemples:"
echo " $0 # Synchronise tous les projets"
echo " $0 ihm_client # Synchronise seulement ihm_client"
echo " $0 lecoffre_node # Synchronise seulement lecoffre_node"
}
# Fonction pour lister les projets
list_projects() {
echo "Projets disponibles pour la synchronisation:"
echo " - lecoffre_node (bitcoin.conf, sdk_relay.conf)"
echo " - ihm_client (nginx.dev.conf)"
echo " - lecoffre-front (configurations frontend)"
echo " - lecoffre-back-mini (configurations backend)"
}
# Parse des arguments
VERBOSE=false
while [[ $# -gt 0 ]]; do
case $1 in
-h|--help)
show_help
exit 0
;;
-l|--list)
list_projects
exit 0
;;
-v|--verbose)
VERBOSE=true
shift
;;
-*)
log_error "Option inconnue: $1"
show_help
exit 1
;;
*)
PROJECT_NAME="$1"
shift
;;
esac
done
# Changer vers le répertoire du projet
cd "$PROJECT_ROOT"
# Exécuter la synchronisation
if [[ -n "${PROJECT_NAME:-}" ]]; then
log "Synchronisation du projet: $PROJECT_NAME"
sync_project "$PROJECT_NAME"
else
sync_all
fi