← 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 "===================="
}