← Retour
#!/bin/bash
# ===========================================
# Fonctions utilitaires partagées
# ===========================================
# Charger les autres libs si pas déjà fait
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
[ -z "$SCRIPTS_PATH" ] && source "$SCRIPT_DIR/config.sh"
[ -z "$RED" ] && source "$SCRIPT_DIR/colors.sh"
# Vérifier si une commande existe
command_exists() {
command -v "$1" >/dev/null 2>&1
}
# Vérifier la connexion SSH vers Nginx
check_nginx_ssh() {
if ! ssh -o ConnectTimeout=5 -o BatchMode=yes "$NGINX_USER@$NGINX_HOST" "echo 'ok'" > /dev/null 2>&1; then
log_error "Impossible de se connecter à $NGINX_HOST"
return 1
fi
return 0
}
# Exécuter une commande sur le serveur Nginx
nginx_exec() {
ssh "$NGINX_USER@$NGINX_HOST" "$@"
}
# Exécuter une commande sudo sur Nginx
nginx_sudo() {
ssh "$NGINX_USER@$NGINX_HOST" "sudo $@"
}
# Tester une URL et retourner le code HTTP
check_url() {
local url="$1"
local timeout="${2:-5}"
curl -s -o /dev/null -w "%{http_code}" --connect-timeout "$timeout" "$url" 2>/dev/null || echo "ERR"
}
# Afficher le status d'une URL avec couleur
print_url_status() {
local url="$1"
local code=$(check_url "$url")
if [ "$code" = "200" ] || [ "$code" = "301" ] || [ "$code" = "302" ]; then
echo -e " ${GREEN}✓${NC} $url ${DIM}[$code]${NC}"
else
echo -e " ${RED}✗${NC} $url ${DIM}[$code]${NC}"
fi
}
# Parser les services d'un projet
# Usage: parse_services "api:4510,public:4501" -> retourne array
parse_services() {
local services_str="$1"
IFS=',' read -ra SERVICES <<< "$services_str"
echo "${SERVICES[@]}"
}
# Obtenir le port d'un service
# Usage: get_service_port "api:4510" -> 4510
get_service_port() {
echo "$1" | cut -d':' -f2
}
# Obtenir le nom d'un service
# Usage: get_service_name "api:4510" -> api
get_service_name() {
echo "$1" | cut -d':' -f1
}
# Vérifier si un container existe
container_exists() {
docker ps -a --format '{{.Names}}' | grep -q "^$1$"
}
# Vérifier si un container tourne
container_running() {
docker ps --format '{{.Names}}' | grep -q "^$1$"
}
# Générer le nom du container
# Usage: container_name "hellocar" "api" "prod" -> hellocar-api-prod
container_name() {
echo "$1-$2-$3"
}
# Générer le domaine
# Usage: domain_name "hellocar" "api" "prod" -> hellocar-api-prod.33800.nowhere84.com
domain_name() {
echo "$1-$2-$3.$DOMAIN_BASE"
}
# Confirmer une action
confirm() {
local message="${1:-Continuer ?}"
read -p "$message [y/N] " -n 1 -r
echo
[[ $REPLY =~ ^[Yy]$ ]]
}
# Charger les secrets depuis le fichier env
load_secrets() {
local env="${1:-prod}"
local secrets_file="$SECRETS_PATH/${env}.env"
if [ -f "$secrets_file" ]; then
set -a
source "$secrets_file"
set +a
return 0
else
log_error "Fichier secrets non trouvé: $secrets_file"
return 1
fi
}
# Obtenir la date formatée
get_date() {
date '+%Y-%m-%d %H:%M:%S'
}
# Obtenir le timestamp
get_timestamp() {
date '+%Y%m%d%H%M%S'
}