Stabilize Prefect DB host resolution and startup
This commit is contained in:
@@ -13,6 +13,8 @@ services:
|
||||
PREFECT_SERVER_API_HOST: 0.0.0.0
|
||||
PREFECT_UI_API_URL: https://prefect.optovia.ru/api
|
||||
PREFECT_API_DATABASE_CONNECTION_URL: ${PREFECT_API_DATABASE_CONNECTION_URL}
|
||||
PREFECT_DB_HOST: ${PREFECT_DB_HOST:-prefect_db_v18}
|
||||
PREFECT_DB_PORT: ${PREFECT_DB_PORT:-5432}
|
||||
# Vault
|
||||
VAULT_ADDR: http://optovia-vault:8200
|
||||
VAULT_TOKEN: ${VAULT_TOKEN}
|
||||
@@ -39,6 +41,8 @@ services:
|
||||
environment:
|
||||
PREFECT_API_URL: http://prefect-server:4200/api
|
||||
PREFECT_API_DATABASE_CONNECTION_URL: ${PREFECT_API_DATABASE_CONNECTION_URL}
|
||||
PREFECT_DB_HOST: ${PREFECT_DB_HOST:-prefect_db_v18}
|
||||
PREFECT_DB_PORT: ${PREFECT_DB_PORT:-5432}
|
||||
ARANGODB_URL: ${ARANGODB_URL:-http://arangodb:8529}
|
||||
ARANGODB_DATABASE: ${ARANGODB_DATABASE:-optovia_maps}
|
||||
ARANGODB_PASSWORD: ${ARANGODB_PASSWORD}
|
||||
|
||||
@@ -5,6 +5,38 @@ set -e
|
||||
echo "Loading secrets from Vault..."
|
||||
. /app/scripts/load-vault-env.sh
|
||||
|
||||
echo "Normalizing Prefect DB URL..."
|
||||
NORMALIZED_DB_URL="$(python - <<'PY'
|
||||
import os
|
||||
from urllib.parse import parse_qsl, urlencode, urlparse, urlunparse
|
||||
|
||||
db_url = os.environ.get("PREFECT_API_DATABASE_CONNECTION_URL", "")
|
||||
if not db_url:
|
||||
raise SystemExit("PREFECT_API_DATABASE_CONNECTION_URL is not set")
|
||||
|
||||
parsed = urlparse(db_url)
|
||||
if not parsed.hostname:
|
||||
raise SystemExit(f"Cannot parse DB host from URL: {db_url}")
|
||||
|
||||
host = os.environ.get("PREFECT_DB_HOST", parsed.hostname) or parsed.hostname
|
||||
port = int(os.environ.get("PREFECT_DB_PORT", str(parsed.port or 5432)))
|
||||
|
||||
user = parsed.username or ""
|
||||
password = parsed.password or ""
|
||||
auth = user
|
||||
if password:
|
||||
auth = f"{auth}:{password}"
|
||||
if auth:
|
||||
auth = f"{auth}@"
|
||||
|
||||
query = urlencode(parse_qsl(parsed.query, keep_blank_values=True), doseq=True)
|
||||
netloc = f"{auth}{host}:{port}"
|
||||
new_url = urlunparse((parsed.scheme, netloc, parsed.path, parsed.params, query, parsed.fragment))
|
||||
print(new_url)
|
||||
PY
|
||||
)"
|
||||
export PREFECT_API_DATABASE_CONNECTION_URL="${NORMALIZED_DB_URL}"
|
||||
|
||||
echo "Waiting for Prefect DB..."
|
||||
python - <<'PY'
|
||||
import os
|
||||
|
||||
@@ -5,5 +5,37 @@ set -e
|
||||
echo "Loading secrets from Vault..."
|
||||
. /app/scripts/load-vault-env.sh
|
||||
|
||||
echo "Normalizing Prefect DB URL..."
|
||||
NORMALIZED_DB_URL="$(python - <<'PY'
|
||||
import os
|
||||
from urllib.parse import parse_qsl, urlencode, urlparse, urlunparse
|
||||
|
||||
db_url = os.environ.get("PREFECT_API_DATABASE_CONNECTION_URL", "")
|
||||
if not db_url:
|
||||
raise SystemExit("PREFECT_API_DATABASE_CONNECTION_URL is not set")
|
||||
|
||||
parsed = urlparse(db_url)
|
||||
if not parsed.hostname:
|
||||
raise SystemExit(f"Cannot parse DB host from URL: {db_url}")
|
||||
|
||||
host = os.environ.get("PREFECT_DB_HOST", parsed.hostname) or parsed.hostname
|
||||
port = int(os.environ.get("PREFECT_DB_PORT", str(parsed.port or 5432)))
|
||||
|
||||
user = parsed.username or ""
|
||||
password = parsed.password or ""
|
||||
auth = user
|
||||
if password:
|
||||
auth = f"{auth}:{password}"
|
||||
if auth:
|
||||
auth = f"{auth}@"
|
||||
|
||||
query = urlencode(parse_qsl(parsed.query, keep_blank_values=True), doseq=True)
|
||||
netloc = f"{auth}{host}:{port}"
|
||||
new_url = urlunparse((parsed.scheme, netloc, parsed.path, parsed.params, query, parsed.fragment))
|
||||
print(new_url)
|
||||
PY
|
||||
)"
|
||||
export PREFECT_API_DATABASE_CONNECTION_URL="${NORMALIZED_DB_URL}"
|
||||
|
||||
echo "Starting Prefect services..."
|
||||
exec prefect server services start
|
||||
|
||||
Reference in New Issue
Block a user