Register apps before queued deployment
This commit is contained in:
+95
-15
@@ -25,7 +25,7 @@ from ..db.apps import (
|
||||
get_apps,
|
||||
update_app_metadata,
|
||||
update_app_resources,
|
||||
update_app_template_metadata,
|
||||
upsert_created_app,
|
||||
update_app_variable,
|
||||
)
|
||||
from ..db.audit import log_audit_event
|
||||
@@ -893,7 +893,7 @@ def new_app_form(request: Request, user=Depends(require_user)):
|
||||
<h2>Vytvořit novou službu</h2>
|
||||
<p class="muted">Vytvoří Gitea repozitář, webhook, lokální workspace, první commit a nasadí službu.</p>
|
||||
|
||||
<form method="post" action="/portal/new-app">
|
||||
<form method="post" action="/portal/new-app" id="new-app-form" data-ajax-form="new-app">
|
||||
<p>
|
||||
<label>ID služby</label><br>
|
||||
<input name="app_id" placeholder="gmail-service" required>
|
||||
@@ -909,8 +909,16 @@ def new_app_form(request: Request, user=Depends(require_user)):
|
||||
<select name="template" required>{template_options}</select>
|
||||
</p>
|
||||
|
||||
<button type="submit">Vytvořit službu</button>
|
||||
<div class="form-actions">
|
||||
<button type="submit">Vytvořit službu</button>
|
||||
<span class="form-loader" id="new-app-loader" hidden>
|
||||
<span class="spinner" aria-hidden="true"></span>
|
||||
Vytvářím službu...
|
||||
</span>
|
||||
</div>
|
||||
<div class="async-status" id="new-app-status" aria-live="polite"></div>
|
||||
</form>
|
||||
<div id="new-app-result"></div>
|
||||
|
||||
<p><a href="/portal/apps">← Zpět</a></p>
|
||||
</div>
|
||||
@@ -924,6 +932,10 @@ def create_app(
|
||||
app_id: str = Form(...),
|
||||
app_name: str = Form(...),
|
||||
template: str = Form(...),
|
||||
description: str = Form(""),
|
||||
owner: str = Form(""),
|
||||
memory: str = Form(""),
|
||||
cpus: str = Form(""),
|
||||
user=Depends(require_user),
|
||||
):
|
||||
selected_template = get_app_template(template, create_enabled=True)
|
||||
@@ -934,22 +946,91 @@ def create_app(
|
||||
return HTMLResponse("Šablona nemá nastavený create script", status_code=400)
|
||||
|
||||
create_result = run_command([create_script, app_id, app_name])
|
||||
if create_result.returncode == 0:
|
||||
update_app_template_metadata(
|
||||
if create_result.returncode != 0:
|
||||
log_audit_event(
|
||||
user,
|
||||
action="create_app",
|
||||
target_type="app",
|
||||
target_id=app_id,
|
||||
metadata={
|
||||
"app_id": app_id,
|
||||
"app_name": app_name,
|
||||
"template": selected_template.get("id"),
|
||||
"status": "FAILED",
|
||||
"create_returncode": create_result.returncode,
|
||||
},
|
||||
)
|
||||
return render_result(
|
||||
title="Vytvoření služby: FAILED",
|
||||
back_url="/portal/apps",
|
||||
sections=[
|
||||
("Výstup vytvoření", create_result.stdout),
|
||||
("Chyba vytvoření", create_result.stderr),
|
||||
],
|
||||
user=user,
|
||||
)
|
||||
|
||||
gitea_url = read_env_value("GITEA_URL", "").rstrip("/")
|
||||
gitea_org = read_env_value("GITEA_ORG", DEFAULT_GITEA_ORG)
|
||||
repository_url = f"{gitea_url}/{gitea_org}/{app_id}.git" if gitea_url else None
|
||||
owner_value = clean_optional(owner) or user.get("display_name") or user.get("username") or None
|
||||
try:
|
||||
upsert_created_app(
|
||||
app_id,
|
||||
{
|
||||
"name": app_name,
|
||||
"template": selected_template.get("id"),
|
||||
"runtime": selected_template.get("runtime"),
|
||||
"language": selected_template.get("language"),
|
||||
"version": "1.0.0",
|
||||
"status": "created",
|
||||
"memory": clean_optional(memory),
|
||||
"cpus": clean_optional(cpus),
|
||||
"description": clean_optional(description),
|
||||
"owner": owner_value,
|
||||
"repository_name": app_id,
|
||||
"repository_url": repository_url,
|
||||
"default_branch": "main",
|
||||
"health_url": selected_template.get("default_health_path"),
|
||||
"container_port": selected_template.get("default_port"),
|
||||
"is_public": True,
|
||||
"is_enabled": True,
|
||||
},
|
||||
)
|
||||
deploy_script = clean_optional(selected_template.get("deploy_script")) or DEPLOY_SCRIPT
|
||||
deploy_result = run_command([deploy_script, app_id])
|
||||
except Exception as exc:
|
||||
log_audit_event(
|
||||
user,
|
||||
action="create_app",
|
||||
target_type="app",
|
||||
target_id=app_id,
|
||||
metadata={
|
||||
"app_id": app_id,
|
||||
"app_name": app_name,
|
||||
"template": selected_template.get("id"),
|
||||
"status": "FAILED",
|
||||
"create_returncode": create_result.returncode,
|
||||
"registration_error": str(exc),
|
||||
},
|
||||
)
|
||||
return render_result(
|
||||
title="Registrace služby: FAILED",
|
||||
back_url="/portal/apps",
|
||||
sections=[
|
||||
("Výstup vytvoření", create_result.stdout),
|
||||
("Chyba vytvoření", create_result.stderr),
|
||||
("Chyba registrace", str(exc)),
|
||||
],
|
||||
user=user,
|
||||
)
|
||||
|
||||
status = "OK" if create_result.returncode == 0 and deploy_result.returncode == 0 else "FAILED"
|
||||
job_id = create_job(
|
||||
job_type="deploy_app",
|
||||
target_type="app",
|
||||
target_id=app_id,
|
||||
payload={"template": selected_template.get("id")},
|
||||
user=user,
|
||||
source="portal",
|
||||
)
|
||||
log_audit_event(
|
||||
user,
|
||||
action="create_app",
|
||||
@@ -959,23 +1040,22 @@ def create_app(
|
||||
"app_id": app_id,
|
||||
"app_name": app_name,
|
||||
"template": selected_template.get("id"),
|
||||
"status": status,
|
||||
"status": "OK",
|
||||
"create_returncode": create_result.returncode,
|
||||
"deploy_returncode": deploy_result.returncode,
|
||||
"job_id": job_id,
|
||||
},
|
||||
)
|
||||
|
||||
return render_result(
|
||||
title=f"Vytvoření služby: {status}",
|
||||
title="Vytvoření služby: OK",
|
||||
back_url="/portal/apps",
|
||||
sections=[
|
||||
("Výstup vytvoření", create_result.stdout),
|
||||
("Chyba vytvoření", create_result.stderr),
|
||||
("Výstup nasazení", deploy_result.stdout),
|
||||
("Chyba nasazení", deploy_result.stderr),
|
||||
("Nasazení", f"Deploy job #{job_id} byl zařazen do fronty."),
|
||||
],
|
||||
extra_link=f"/apps/{html.escape(app_id)}/docs",
|
||||
extra_label="Otevřít Swagger",
|
||||
extra_link=f"/portal/jobs/{job_id}",
|
||||
extra_label="Otevřít deploy job",
|
||||
user=user,
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user