Specs stay at repo root (cross-VM). Move deploy and code into logical projects with README per domain, updated manifest.yaml, and symlinks at legacy paths for VM122 backward compatibility.
67 lines
2.3 KiB
Python
67 lines
2.3 KiB
Python
"""VM112 portal infrastructure checks (read-only API)."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
import httpx
|
|
|
|
|
|
def _result(check_id: str, label: str, ok: bool | None, message: str, evidence: dict | None = None) -> dict[str, Any]:
|
|
if ok is True:
|
|
status = "pass"
|
|
elif ok is False:
|
|
status = "fail"
|
|
else:
|
|
status = "error"
|
|
return {
|
|
"check_id": check_id,
|
|
"label": label,
|
|
"status": status,
|
|
"message": message,
|
|
"evidence": evidence or {},
|
|
}
|
|
|
|
|
|
def collect(domain: str, api_base: str) -> dict[str, dict[str, Any]]:
|
|
url = f"{api_base.rstrip('/')}/api/onboarding/infrastructure/status/{domain}"
|
|
try:
|
|
with httpx.Client(timeout=15.0) as client:
|
|
response = client.get(url)
|
|
if response.status_code != 200:
|
|
err = _result("carbonio", "Carbonio domain", None, f"Portal API HTTP {response.status_code}")
|
|
return {
|
|
"carbonio": err,
|
|
"nginx_vhost": {**err, "check_id": "nginx_vhost", "label": "carbonio-nginx vhost"},
|
|
"cert_le": {**err, "check_id": "cert_le", "label": "Let's Encrypt certificate"},
|
|
}
|
|
data = response.json()
|
|
except Exception as exc:
|
|
err = _result("carbonio", "Carbonio domain", None, str(exc))
|
|
return {
|
|
"carbonio": err,
|
|
"nginx_vhost": {**err, "check_id": "nginx_vhost", "label": "carbonio-nginx vhost"},
|
|
"cert_le": {**err, "check_id": "cert_le", "label": "Let's Encrypt certificate"},
|
|
}
|
|
|
|
steps = {s.get("id"): s for s in data.get("steps") or [] if isinstance(s, dict)}
|
|
|
|
def from_step(check_id: str, label: str, step_id: str) -> dict[str, Any]:
|
|
step = steps.get(step_id) or {}
|
|
return _result(
|
|
check_id,
|
|
label,
|
|
step.get("ok"),
|
|
step.get("message") or f"Step {step_id}",
|
|
{"step_id": step_id, "ready": data.get("ready")},
|
|
)
|
|
|
|
cert = from_step("cert_le", "Let's Encrypt certificate", "cert_san")
|
|
if cert["status"] == "pass":
|
|
cert["status"] = "pass"
|
|
|
|
return {
|
|
"carbonio": from_step("carbonio", "Carbonio domain", "carbonio_domain"),
|
|
"nginx_vhost": from_step("nginx_vhost", "carbonio-nginx vhost", "carbonio_nginx_vhost"),
|
|
"cert_le": cert,
|
|
}
|