lecoffre_node/scripts/rex/verify_config_writing.sh

163 lines
5.0 KiB
Bash
Executable File

#!/bin/bash
# verify_config_writing.sh
# Script de vérification de l'écriture effective des fichiers de configuration
# Basé sur REX_CONFIGURATION_MANAGEMENT.md
set -e
# 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
# Fonctions de logging
log() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
# Fonction de vérification d'un fichier de configuration
verify_config_file() {
local file="$1"
local expected_content="$2"
local description="$3"
log "Vérification de $file ($description)..."
if [ -f "$file" ]; then
if grep -q "$expected_content" "$file"; then
log_success "$file contient '$expected_content'"
return 0
else
log_error "$file ne contient pas '$expected_content'"
return 1
fi
else
log_error "$file n'existe pas"
return 1
fi
}
# Fonction de vérification de la syntaxe
verify_syntax() {
local file="$1"
case "$file" in
*.yml|*.yaml)
log "Vérification de la syntaxe YAML pour $file..."
if command -v yq >/dev/null 2>&1; then
if yq eval '.' "$file" >/dev/null 2>&1; then
log_success "Syntaxe YAML valide pour $file"
return 0
else
log_error "Syntaxe YAML invalide pour $file"
return 1
fi
else
log_warning "yq non installé, impossible de vérifier la syntaxe YAML"
return 0
fi
;;
*.json)
log "Vérification de la syntaxe JSON pour $file..."
if command -v jq >/dev/null 2>&1; then
if jq '.' "$file" >/dev/null 2>&1; then
log_success "Syntaxe JSON valide pour $file"
return 0
else
log_error "Syntaxe JSON invalide pour $file"
return 1
fi
else
log_warning "jq non installé, impossible de vérifier la syntaxe JSON"
return 0
fi
;;
*.conf)
log "Vérification de la syntaxe pour $file..."
# Vérification basique : fichier non vide et lisible
if [ -s "$file" ] && [ -r "$file" ]; then
log_success "Fichier $file est lisible et non vide"
return 0
else
log_error "Fichier $file est vide ou non lisible"
return 1
fi
;;
*)
log "Vérification basique pour $file..."
if [ -s "$file" ] && [ -r "$file" ]; then
log_success "Fichier $file est lisible et non vide"
return 0
else
log_error "Fichier $file est vide ou non lisible"
return 1
fi
;;
esac
}
# Fonction principale
main() {
log "=== Vérification de l'écriture effective des configurations ==="
local errors=0
# Vérification des fichiers de configuration critiques
log "Vérification des fichiers de configuration critiques..."
# 1. Configuration du relai
verify_config_file "relay/sdk_relay.conf" "bootstrap_url=" "Configuration bootstrap" || ((errors++))
verify_config_file "relay/sdk_relay.conf" "sp_address=" "Adresse SP" || ((errors++))
# 2. Variables d'environnement
verify_config_file ".env" "RELAY_URLS=" "URLs des relais" || ((errors++))
verify_config_file ".env" "SIGNER_WS_URL=" "URL WebSocket du signer" || ((errors++))
# 3. Configuration Docker Compose
verify_config_file "docker-compose.yml" "services:" "Services Docker" || ((errors++))
verify_config_file "docker-compose.yml" "healthcheck:" "Healthchecks" || ((errors++))
# 4. Configuration du miner
verify_config_file "miner/.env" "RPC_HOST=" "Configuration RPC" || ((errors++))
# Vérification de la syntaxe
log "Vérification de la syntaxe des fichiers..."
verify_syntax "docker-compose.yml" || ((errors++))
verify_syntax "miner/.env" || ((errors++))
# Vérification des permissions
log "Vérification des permissions..."
local config_files=("relay/sdk_relay.conf" ".env" "docker-compose.yml" "miner/.env")
for file in "${config_files[@]}"; do
if [ -f "$file" ]; then
if [ -r "$file" ]; then
log_success "Permissions de lecture OK pour $file"
else
log_error "Permissions de lecture insuffisantes pour $file"
((errors++))
fi
fi
done
# Résumé
echo ""
if [ $errors -eq 0 ]; then
log_success "=== Toutes les vérifications ont réussi ==="
exit 0
else
log_error "=== $errors erreur(s) détectée(s) ==="
exit 1
fi
}
# Exécution du script
main "$@"