33800 Docs

← Retour
#!/bin/bash # =========================================== # Parser pour conf.gouroubleu.yml # Usage: source parse-config.sh # =========================================== # Dépendance: yq (snap install yq ou apt install yq) # Parse une valeur du conf.gouroubleu.yml # Usage: parse_config <file> <path> parse_config() { local file="$1" local path="$2" yq eval "$path" "$file" 2>/dev/null || echo "" } # Génère les options Docker pour les logs # Usage: get_docker_log_opts <conf_file> <env> <service_name> get_docker_log_opts() { local conf_file="$1" local env="$2" local service_name="$3" local opts="" # Vérifier si logs est activé local logs_enabled=$(parse_config "$conf_file" ".logs.enabled") if [ "$logs_enabled" != "true" ]; then echo "" return fi local driver=$(parse_config "$conf_file" ".logs.driver") driver=${driver:-loki} if [ "$driver" = "loki" ]; then local loki_url=$(parse_config "$conf_file" ".logs.options.loki-url") loki_url=${loki_url:-"http://192.168.1.12:3100/loki/api/v1/push"} local type=$(parse_config "$conf_file" ".logs.labels.type") type=${type:-app} opts="--log-driver=loki" opts="$opts --log-opt loki-url=$loki_url" opts="$opts --log-opt loki-batch-size=400" opts="$opts --log-opt loki-retries=3" opts="$opts --log-opt loki-external-labels=env=$env,host=prod-portainer,service=$service_name,type=$type" elif [ "$driver" = "json-file" ]; then local max_size=$(parse_config "$conf_file" ".logs.options.max-size") max_size=${max_size:-50m} local max_file=$(parse_config "$conf_file" ".logs.options.max-file") max_file=${max_file:-5} opts="--log-driver=json-file" opts="$opts --log-opt max-size=$max_size" opts="$opts --log-opt max-file=$max_file" fi echo "$opts" } # Génère la config Nginx depuis conf.gouroubleu.yml # Usage: get_nginx_config <conf_file> <env> get_nginx_config() { local conf_file="$1" local env="$2" local nginx_enabled=$(parse_config "$conf_file" ".nginx.enabled") if [ "$nginx_enabled" != "true" ]; then echo "disabled" return fi local domain=$(parse_config "$conf_file" ".domain") local port=$(parse_config "$conf_file" ".port") local ssl=$(parse_config "$conf_file" ".nginx.ssl") local websocket=$(parse_config "$conf_file" ".nginx.websocket") echo "domain=$domain port=$port ssl=$ssl websocket=$websocket" } # Vérifie que le conf.gouroubleu.yml a une section logs # Usage: validate_config <conf_file> validate_config() { local conf_file="$1" local errors=0 if [ ! -f "$conf_file" ]; then echo "[ERROR] Fichier non trouvé: $conf_file" return 1 fi # Champs obligatoires local name=$(parse_config "$conf_file" ".name") if [ -z "$name" ] || [ "$name" = "null" ]; then echo "[ERROR] Champ 'name' manquant" ((errors++)) fi local domain=$(parse_config "$conf_file" ".domain") if [ -z "$domain" ] || [ "$domain" = "null" ]; then echo "[ERROR] Champ 'domain' manquant" ((errors++)) fi local port=$(parse_config "$conf_file" ".port") if [ -z "$port" ] || [ "$port" = "null" ]; then echo "[ERROR] Champ 'port' manquant" ((errors++)) fi # Section logs (obligatoire depuis 16/01/2026) local logs_enabled=$(parse_config "$conf_file" ".logs.enabled") if [ -z "$logs_enabled" ] || [ "$logs_enabled" = "null" ]; then echo "[WARN] Section 'logs' manquante - ajoutez logs.enabled: true" fi if [ $errors -gt 0 ]; then return 1 fi echo "[OK] Configuration valide" return 0 } # Affiche un résumé de la config # Usage: show_config_summary <conf_file> show_config_summary() { local conf_file="$1" echo "=== Configuration ===" echo "Name: $(parse_config "$conf_file" ".name")" echo "Type: $(parse_config "$conf_file" ".type")" echo "Domain: $(parse_config "$conf_file" ".domain")" echo "Port: $(parse_config "$conf_file" ".port")" echo "" echo "Logs:" echo " Enabled: $(parse_config "$conf_file" ".logs.enabled")" echo " Driver: $(parse_config "$conf_file" ".logs.driver")" echo "" echo "Nginx:" echo " Enabled: $(parse_config "$conf_file" ".nginx.enabled")" echo " SSL: $(parse_config "$conf_file" ".nginx.ssl")" echo "====================" }