Deploy: Stack-Auflösung mit Rückfall über die Projekt-UUID und aussagekräftiger Fehlermeldung; CORTECS_API_KEY aus der Admin-Env zählt als gesetzt
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -20,6 +20,12 @@ from app.services import contract, crypto, guard, onyva_login, store
|
||||
from app.services.mittwald import DeployError, Mittwald, mask_env
|
||||
|
||||
PORT = "8276"
|
||||
# Geteilte Secrets, die – falls nicht in der DB gesetzt – aus der Env der Admin-Plattform kommen (gleicher Key wie für Agent/Prompt-Test)
|
||||
ENV_FALLBACK_SECRETS = ("CORTECS_API_KEY",)
|
||||
|
||||
|
||||
def _env_secret(key: str) -> str:
|
||||
return os.getenv(key, "").strip() if key in ENV_FALLBACK_SECRETS else ""
|
||||
|
||||
|
||||
def live_enabled() -> bool:
|
||||
@@ -75,6 +81,10 @@ def build_env(db, t: Tenant, reveal: bool) -> dict[str, str]:
|
||||
env[s_.key] = crypto.decrypt(s_.value_enc) if reveal else "•••• gesetzt"
|
||||
elif not reveal:
|
||||
env[s_.key] = "⚠ fehlt (Wert noch nicht in der Admin-DB)"
|
||||
for k in ENV_FALLBACK_SECRETS: # Admin-Env als Rückfall für geteilte Secrets ohne DB-Wert
|
||||
v = _env_secret(k)
|
||||
if v and (k not in env or not env[k] or env[k].startswith("⚠")):
|
||||
env[k] = v if reveal else "•••• gesetzt (aus Admin-Env)"
|
||||
if t.source == "admin":
|
||||
env["TENANT_SOURCE"] = "admin"
|
||||
env["ADMIN_URL"] = setting(db, "admin_public_url", "https://<admin-host>")
|
||||
@@ -85,6 +95,7 @@ def missing_secrets(db, t: Tenant) -> list[str]:
|
||||
"""Pflicht-Secrets laut Schema, die weder beim Tenant noch geteilt einen Wert haben."""
|
||||
cfg, _ = store.content(db, t, "current")
|
||||
have = {s.key for s in db.scalars(select(Secret).where((Secret.tenant_id == t.id) | Secret.tenant_id.is_(None))) if s.value_enc}
|
||||
have |= {k for k in ENV_FALLBACK_SECRETS if _env_secret(k)}
|
||||
need = set(contract.required_secrets(cfg))
|
||||
if t.source == "admin":
|
||||
need.add("ADMIN_BUNDLE_TOKEN")
|
||||
|
||||
Reference in New Issue
Block a user