90 lines
4.2 KiB
Bash
Executable File
90 lines
4.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Logging — use these everywhere instead of bare echo
|
|
# ---------------------------------------------------------------------------
|
|
log() { echo "$(date '+%Y-%m-%d %H:%M:%S') [INFO] $*"; }
|
|
warn() { echo "$(date '+%Y-%m-%d %H:%M:%S') [WARN] $*" >&2; }
|
|
die() { echo "$(date '+%Y-%m-%d %H:%M:%S') [ERROR] $*" >&2; exit 1; }
|
|
|
|
# Resolve the absolute directory of a script.
|
|
# Always pass ${BASH_SOURCE[0]} — it holds the real path even when the
|
|
# script is invoked via PATH (unlike $0 which may be just a bare name).
|
|
# Usage in top-level scripts: SBIN="$(sbin_dir "${BASH_SOURCE[0]}")"
|
|
# Sub-scripts one level deep: SBIN_ROOT="$(dirname "$(sbin_dir "${BASH_SOURCE[0]}")")"
|
|
sbin_dir() { dirname "$(realpath "$1")"; }
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# load_container_config <container_id>
|
|
# Sources /4server/data/<container_id>/config/container.env and exports:
|
|
# SOFTWARE — n8n | ODOO_17 | ODOO_18 | ODOO_19
|
|
# DB_NAME — postgres database/user (may differ from CONTAINER_ID for migrations)
|
|
# ---------------------------------------------------------------------------
|
|
load_container_config() {
|
|
local container_id="${1:-$CONTAINER_ID}"
|
|
local cfg="/4server/data/$container_id/config/container.env"
|
|
if [ -f "$cfg" ]; then
|
|
while IFS= read -r line; do
|
|
case "$line" in
|
|
''|'#'*) continue ;;
|
|
esac
|
|
local _k="${line%%=*}"
|
|
local _v="${line#*=}"
|
|
case "$_k" in
|
|
*[!A-Z_]*) continue ;;
|
|
esac
|
|
export "$_k=$_v"
|
|
done < "$cfg"
|
|
else
|
|
warn "no container.env found at $cfg"
|
|
fi
|
|
}
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Postgres defaults (overridable via environment)
|
|
# ---------------------------------------------------------------------------
|
|
POSTGRES_HOST="${POSTGRES_HOST:-beedb}"
|
|
POSTGRES_PORT="${POSTGRES_PORT:-5432}"
|
|
POSTGRES_ADMIN_USER="${POSTGRES_ADMIN_USER:-1gtT0sf8klB9lDbYZD9}"
|
|
POSTGRES_ADMIN_PASSWORD="${POSTGRES_ADMIN_PASSWORD:-ZpSwWNafyy9GhY2gzHw}"
|
|
|
|
DB_PATH="/4server/data/contracts.db"
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# get_contract_info
|
|
# Reads the contracts.db row for $CONTAINER_ID and exports all columns as env vars.
|
|
# Also parses SECRET_LIST and exports ODOO_DB_PASSWORD from the psql key.
|
|
# ---------------------------------------------------------------------------
|
|
get_contract_info() {
|
|
log "get_contract_info $CONTAINER_ID"
|
|
|
|
while IFS="=" read -r key value; do
|
|
[ -n "$key" ] && export "$key=$value"
|
|
done < <(sqlite3 "$DB_PATH" "
|
|
WITH c AS (SELECT * FROM containers WHERE UUID='$CONTAINER_ID' LIMIT 1)
|
|
SELECT 'CONTAINER_ID=' || COALESCE(UUID, '') FROM c UNION ALL
|
|
SELECT 'EXPIRES=' || COALESCE(expires, '') FROM c UNION ALL
|
|
SELECT 'IMAGE=' || COALESCE(image, '') FROM c UNION ALL
|
|
SELECT 'STATUS=' || COALESCE(status, '') FROM c UNION ALL
|
|
SELECT 'CREATED=' || COALESCE(created, '') FROM c UNION ALL
|
|
SELECT 'SECRET_LIST=' || COALESCE(secret_list, '') FROM c UNION ALL
|
|
SELECT 'CONTAINERDBID=' || COALESCE(id, '') FROM c UNION ALL
|
|
SELECT 'GIT=' || COALESCE(git, '') FROM c UNION ALL
|
|
SELECT 'BACKUP_SLOTS=' || COALESCE(backup_slots, '') FROM c UNION ALL
|
|
SELECT 'HDD=' || COALESCE(hdd, '') FROM c UNION ALL
|
|
SELECT 'WORKERS=' || COALESCE(workers, '') FROM c UNION ALL
|
|
SELECT 'DOMAINS_SLOTS=' || COALESCE(domains_slots, '') FROM c;
|
|
")
|
|
|
|
# Parse SECRET_LIST: backslash-separated key=value pairs
|
|
# %%=* / #*= split on the FIRST = only, so base64 values like tok=ab== are safe
|
|
if [ -n "$SECRET_LIST" ]; then
|
|
while IFS= read -r pair || [ -n "$pair" ]; do
|
|
_key="${pair%%=*}"
|
|
_value="${pair#*=}"
|
|
[ -n "$_key" ] && export "$_key=$_value"
|
|
done < <(printf '%s' "$SECRET_LIST" | tr -d '\r\n' | tr '\\' '\n')
|
|
fi
|
|
export ODOO_DB_PASSWORD=$psql
|
|
}
|