4NK_vault/storage/dev/generate.sh
4NK Dev 4834c40503 ci: docker_tag=dev-test
Séparation des scripts de génération et amélioration de l'architecture

- Séparé generate_grafana_dashboards.sh en 3 scripts distincts :
  * generate_grafana_dashboards.sh (dashboards uniquement)
  * generate_promtail_config.sh (configuration Promtail)
  * generate_logrotate_configs.sh (configurations Logrotate)

- Supprimé generate_docker_compose.sh et generate_docker_variables.sh
- Centralisé la génération des variables dans generate_variables.sh
- Mis à jour generate.sh pour une architecture en 5 étapes
- Corrigé les chemins de sortie et les références de variables
- Ajouté la gestion d'erreurs pour les fichiers .env problématiques
- Généré toutes les configurations Nginx, Grafana, Promtail et Logrotate
- Amélioré la modularité et la maintenabilité du code
2025-10-03 17:13:19 +00:00

320 lines
12 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Script principal de génération pour l'écosystème _4NK Vault
# Orchestre l'exécution des scripts de génération dans l'ordre approprié
# Couleurs pour les messages
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# Compteurs
SCRIPTS_EXECUTED=0
SCRIPTS_FAILED=0
TOTAL_SCRIPTS=3
# Fonction pour afficher les messages avec couleurs
print_header() {
local message="$1"
echo -e "${BLUE}================================${NC}"
echo -e "${BLUE}$message${NC}"
echo -e "${BLUE}================================${NC}"
}
print_step() {
local step="$1"
local description="$2"
echo -e "\n${CYAN}📋 ÉTAPE $step${NC}: $description"
echo -e "${CYAN}$(printf '=%.0s' {1..50})${NC}"
}
print_success() {
local message="$1"
echo -e "${GREEN}✅ SUCCÈS${NC}: $message"
}
print_error() {
local message="$1"
echo -e "${RED}❌ ERREUR${NC}: $message"
}
print_warning() {
local message="$1"
echo -e "${YELLOW}⚠️ ATTENTION${NC}: $message"
}
print_info() {
local message="$1"
echo -e "${PURPLE} INFO${NC}: $message"
}
# Fonction pour exécuter un script avec gestion d'erreur
execute_script() {
local script_name="$1"
local script_path="$2"
local description="$3"
echo -e "\n${YELLOW}🚀 Exécution de $script_name...${NC}"
echo -e "${YELLOW}Description: $description${NC}"
echo ""
# Vérifier que le script existe
if [ ! -f "$script_path" ]; then
print_error "Script $script_name non trouvé: $script_path"
SCRIPTS_FAILED=$((SCRIPTS_FAILED + 1))
return 1
fi
# Vérifier que le script est exécutable
if [ ! -x "$script_path" ]; then
print_warning "Script $script_name n'est pas exécutable, tentative de correction..."
chmod +x "$script_path"
fi
# Exécuter le script
echo -e "${BLUE}Commande: $script_path${NC}"
echo ""
if "$script_path"; then
print_success "$script_name exécuté avec succès"
SCRIPTS_EXECUTED=$((SCRIPTS_EXECUTED + 1))
return 0
else
print_error "$script_name a échoué (code de sortie: $?)"
SCRIPTS_FAILED=$((SCRIPTS_FAILED + 1))
return 1
fi
}
# Fonction pour vérifier les prérequis
check_prerequisites() {
echo -e "${BLUE}🔍 Vérification des prérequis...${NC}"
# Vérifier que nous sommes dans le bon répertoire
if [ ! -f "generate_variables.sh" ]; then
print_error "Script generate_variables.sh non trouvé. Assurez-vous d'être dans le répertoire storage/dev"
exit 1
fi
if [ ! -f "generate_grafana_dashboards.sh" ]; then
print_error "Script generate_grafana_dashboards.sh non trouvé"
exit 1
fi
if [ ! -f "generate_promtail_config.sh" ]; then
print_error "Script generate_promtail_config.sh non trouvé"
exit 1
fi
if [ ! -f "generate_logrotate_configs.sh" ]; then
print_error "Script generate_logrotate_configs.sh non trouvé"
exit 1
fi
if [ ! -f "generate_nginx_configs.sh" ]; then
print_error "Script generate_nginx_configs.sh non trouvé"
exit 1
fi
# Vérifier la variable HOST
if [ -z "${HOST:-}" ]; then
print_warning "Variable HOST non définie, utilisation de la valeur par défaut"
export HOST="dev4._4NKweb.com"
print_info "HOST défini à: $HOST"
else
print_info "HOST détecté: $HOST"
fi
# Vérifier la variable SERVICES
if [ -z "${SERVICES:-}" ] || [ ${#SERVICES[@]} -eq 0 ]; then
print_warning "Variable SERVICES non définie"
print_info "Les scripts peuvent échouer si SERVICES n'est pas défini dans .env"
else
print_info "SERVICES détecté: ${#SERVICES[@]} services (${SERVICES[*]})"
fi
print_success "Prérequis vérifiés"
}
# Fonction pour afficher le résumé final
show_summary() {
echo -e "\n${PURPLE}📊 RÉSUMÉ DE LA GÉNÉRATION${NC}"
echo -e "${PURPLE}=============================${NC}"
echo -e "Scripts exécutés avec succès: ${GREEN}$SCRIPTS_EXECUTED/$TOTAL_SCRIPTS${NC}"
echo -e "Scripts échoués: ${RED}$SCRIPTS_FAILED/$TOTAL_SCRIPTS${NC}"
if [ $SCRIPTS_FAILED -eq 0 ]; then
echo -e "\n${GREEN}🎉 TOUS LES SCRIPTS ONT ÉTÉ EXÉCUTÉS AVEC SUCCÈS !${NC}"
echo -e "\n${CYAN}📁 Fichiers générés:${NC}"
echo -e "${GREEN}docker-compose.yml.auto${NC} - Configuration Docker"
echo -e "${GREEN}.env.auto${NC} - Variables d'environnement"
echo -e "${GREEN}_4NK_modules/grafana/dashboards/${NC} - Dashboards Grafana"
echo -e "${GREEN}_4NK_modules/promtail/promtail.yml${NC} - Configuration Promtail"
echo -e "${GREEN}logrotade/${NC} - Configurations Logrotate"
echo -e "${GREEN}nginx/${NC} - Configurations Nginx"
echo -e "\n${CYAN}🚀 Prochaines étapes recommandées:${NC}"
echo -e " 1. Vérifiez les fichiers générés"
echo -e " 2. Déployez avec Docker Compose si nécessaire"
echo -e " 3. Testez les configurations Nginx"
echo -e " 4. Déployez les configurations Nginx si validées"
else
echo -e "\n${RED}⚠️ CERTAINS SCRIPTS ONT ÉCHOUÉ${NC}"
echo -e "\n${YELLOW}🔧 Actions recommandées:${NC}"
echo -e " 1. Vérifiez les variables d'environnement dans .env"
echo -e " 2. Vérifiez les erreurs ci-dessus"
echo -e " 3. Relancez le script après correction"
echo -e " 4. Consultez la documentation des scripts individuels"
fi
echo -e "\n${BLUE}📚 Documentation disponible:${NC}"
echo -e " • generate_variables.sh - Génération des variables et docker-compose"
echo -e " • generate_grafana_dashboards.sh - Génération des dashboards"
echo -e " • generate_promtail_config.sh - Génération de la config Promtail"
echo -e " • generate_logrotate_configs.sh - Génération des configs Logrotate"
echo -e " • generate_nginx_configs.sh - Génération des configs Nginx"
echo -e " • README.md - Documentation générale du projet"
}
# Fonction pour afficher l'aide
show_help() {
echo -e "${BLUE}🚀 GÉNÉRATEUR PRINCIPAL _4NK VAULT${NC}"
echo -e "${BLUE}===================================${NC}"
echo ""
echo -e "${CYAN}Description:${NC}"
echo " Script principal qui orchestre la génération de toutes les configurations"
echo " nécessaires pour l'écosystème _4NK Vault."
echo ""
echo -e "${CYAN}Scripts exécutés dans l'ordre:${NC}"
echo " 1. generate_variables.sh - Génère .env.auto et docker-compose.yml.auto"
echo " 2. generate_grafana_dashboards.sh - Génère les dashboards Grafana"
echo " 3. generate_promtail_config.sh - Génère la configuration Promtail"
echo " 4. generate_logrotate_configs.sh - Génère les configurations Logrotate"
echo " 5. generate_nginx_configs.sh - Génère les configurations Nginx"
echo ""
echo -e "${CYAN}Utilisation:${NC}"
echo " ./generate.sh [options]"
echo ""
echo -e "${CYAN}Options:${NC}"
echo " -h, --help Affiche cette aide"
echo ""
echo -e "${CYAN}Variables d'environnement:${NC}"
echo " HOST Domaine principal (ex: dev4._4NKweb.com)"
echo " SERVICES Tableau des services à configurer"
echo ""
echo -e "${CYAN}Exemple:${NC}"
echo " # Charger les variables d'environnement"
echo " source .env"
echo " # Exécuter la génération"
echo " ./generate.sh"
echo ""
echo -e "${CYAN}Fichiers requis:${NC}"
echo " • .env - Variables d'environnement"
echo " • generate_variables.sh - Script de génération des variables et docker-compose"
echo " • generate_grafana_dashboards.sh - Script de génération Grafana"
echo " • generate_promtail_config.sh - Script de génération Promtail"
echo " • generate_logrotate_configs.sh - Script de génération Logrotate"
echo " • generate_nginx_configs.sh - Script de génération Nginx"
}
# Fonction principale
main() {
# Gestion des arguments
while [[ $# -gt 0 ]]; do
case $1 in
-h|--help)
show_help
exit 0
;;
*)
print_error "Option inconnue: $1"
echo "Utilisez -h ou --help pour voir l'aide"
exit 1
;;
esac
done
# Affichage de l'en-tête
print_header "🚀 GÉNÉRATEUR PRINCIPAL _4NK VAULT"
echo -e "${BLUE}Orchestration des scripts de génération${NC}"
echo -e "${BLUE}Hôte: ${HOST:-"non défini"}${NC}"
echo -e "${BLUE}Timestamp: $(date)${NC}"
# Vérification des prérequis
check_prerequisites
# ÉTAPE 1: Génération des variables et docker-compose
print_step "1/3" "Génération des variables et docker-compose"
if execute_script "generate_variables.sh" "./generate_variables.sh" "Génère .env.auto et docker-compose.yml.auto"; then
print_success "Variables et docker-compose générés avec succès"
print_info "Fichiers créés:"
[ -f ".env.auto" ] && echo " • .env.auto"
[ -f "docker-compose.yml.auto" ] && echo " • docker-compose.yml.auto"
else
print_error "Échec de la génération des variables et docker-compose"
fi
# ÉTAPE 2: Génération des dashboards Grafana
print_step "2/5" "Génération des dashboards Grafana"
if execute_script "generate_grafana_dashboards.sh" "./generate_grafana_dashboards.sh" "Génère les dashboards Grafana"; then
print_success "Dashboards Grafana générés avec succès"
print_info "Fichiers créés:"
[ -d "_4NK_modules/grafana/dashboards" ] && echo " • _4NK_modules/grafana/dashboards/ (dashboards)"
else
print_error "Échec de la génération des dashboards Grafana"
fi
# ÉTAPE 3: Génération de la configuration Promtail
print_step "3/5" "Génération de la configuration Promtail"
if execute_script "generate_promtail_config.sh" "./generate_promtail_config.sh" "Génère la configuration Promtail"; then
print_success "Configuration Promtail générée avec succès"
print_info "Fichiers créés:"
[ -f "_4NK_modules/promtail/promtail.yml" ] && echo " • _4NK_modules/promtail/promtail.yml"
else
print_error "Échec de la génération de la configuration Promtail"
fi
# ÉTAPE 4: Génération des configurations Logrotate
print_step "4/5" "Génération des configurations Logrotate"
if execute_script "generate_logrotate_configs.sh" "./generate_logrotate_configs.sh" "Génère les configurations Logrotate"; then
print_success "Configurations Logrotate générées avec succès"
print_info "Fichiers créés:"
[ -d "logrotade" ] && echo " • logrotade/ (configurations logrotate)"
else
print_error "Échec de la génération des configurations Logrotate"
fi
# ÉTAPE 5: Génération des configurations Nginx
print_step "5/5" "Génération des configurations Nginx"
if execute_script "generate_nginx_configs.sh" "./generate_nginx_configs.sh" "Génère toutes les configurations Nginx (upstreams, internes, HTTPS)"; then
print_success "Configurations Nginx générées avec succès"
print_info "Fichiers créés:"
[ -f "nginx/upstreams.conf" ] && echo " • nginx/upstreams.conf"
[ -f "nginx/app-internal-ports.conf" ] && echo " • nginx/app-internal-ports.conf"
[ -d "nginx/https-configs" ] && echo " • nginx/https-configs/ (configurations HTTPS)"
[ -f "nginx/nginx_${HOST:-dev4._4NKweb.com}-https.conf" ] && echo " • nginx/nginx_${HOST:-dev4._4NKweb.com}-https.conf"
[ -f "nginx/proxy_headers.conf" ] && echo " • nginx/proxy_headers.conf"
else
print_error "Échec de la génération des configurations Nginx"
fi
# Affichage du résumé final
show_summary
# Code de sortie basé sur le succès
if [ $SCRIPTS_FAILED -eq 0 ]; then
exit 0
else
exit 1
fi
}
# Exécution du script principal
main "$@"