#!/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/4NK_env/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/4NK_env/$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 ;; *) 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") 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)" } # 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