Zum Inhalt

Polycrate API 0.15.4

Release-Datum: 24. April 2026
Typ: Feature

Highlights

  • Loadbalancer – Metrics APImetrics_data (Traffic-Volumen, Bandwidth) wird direkt über den Detail-Endpoint ausgeliefert; Dashboard-Tab zeigt Aggregated-Statistics nach der Reconciliation korrekt an (Spec 182).
  • Loadbalancer – Traffic-Graphtabs – Zwei neue Tabs im LoadbalancerInstance-Dashboard: Traffic-Volumen total und aufgeschlüsselt nach Region (Spec 183).
  • Loadbalancer – Deployment Guards – Neue LoadbalancerInstances ohne Konfiguration oder Ports werden nicht mehr in Regionen ausgerollt; bestehende Deployments werden bei Entfernung der Config automatisch deinstalliert (Spec 188).
  • Loadbalancer – Create-Wizard – Das Create-Formular bietet jetzt einen Mode-Selektor (DaemonSet vs. Deployment) mit geführtem Wizard und Ports-Eingabe (Spec 189).
  • LoadbalancerRegion – Managed Object Dashboard – Region-Detail migriert: Tabs Instances, IP Prefixes, Configuration (Monaco YAML); K8sCluster-Link korrekt verknüpft (Spec 187).
  • Verwaiste Cluster-Ressourcen – HAProxy-Deployments/DaemonSets und Services bleiben nach API-Löschung nicht mehr im Cluster stehen: DB-Löschung erfolgt jetzt erst nach verifiziertem Uninstall (Spec 180).
  • IPPrefix Detail UI – Migration auf das Managed Object Dashboard (Spec 193).
  • Diverse Fixes – Cloudflare PATCH-Payload, Workspace-Kubeconfig-Fallback, K8sCluster Endpoint unnötige Writes, Harbor Quota Logging, VictoriaMetrics Label-Selektoren, PromQL Vector-Mismatch, IPAM-Manifest-Labels, ManagedObject merged_labels, views.py logger.

Details zu einzelnen Specs: polycrate spec inspect <id> im Workspace polycrate-api.

Artefakte

Docker Image

docker pull cargo.ayedo.cloud/polycrate/polycrate-api:0.15.4

Block

polycrate pull cargo.ayedo.cloud/ayedo/k8s/polycrate-api
polycrate run polycrate-api install

Loadbalancer

Metrics API (Spec 182)

GET /api/v1/loadbalancers/instances/<id>/ liefert nun metrics_data mit den Schlüsseln traffic (Bytes-Volumen via increase()), bandwidth (Rate in Bytes/s via rate()), connections und last_updated. Der Dashboard-Tab-Bug (fehlende Aggregated-Statistics) ist behoben — die Template-Bedingung prüft jetzt last_updated statt des nicht existierenden available-Keys.

Der List-Endpoint liefert zusätzlich die flachen Properties bandwidth_now_bytes_per_second, traffic_30d_bytes_in, traffic_30d_bytes_out pro Instanz.

Traffic-Graphtabs (Spec 183)

Im LoadbalancerInstance-Dashboard stehen zwei neue Tabs bereit:

  • Traffic (Total) – Gesamtvolumen (Bytes) über alle Regionen
  • Traffic by Region – Aufschlüsselung nach Region

Deployment Guards (Spec 188)

Eine neue LoadbalancerInstance ohne config oder ohne ports löst beim Reconcile kein Region-Deployment mehr aus; stattdessen wird LOADBALANCER_CONFIG_MISSING bzw. LOADBALANCER_PORTS_MISSING als Condition gesetzt. Werden Config oder Ports nachträglich entfernt, initiiert der nächste Reconcile-Zyklus die Deinstallation aller aktiven Region-Deployments (deployment_status = 'removing'). Das Create-Formular setzt keinen automatischen Port-Default mehr.

Create-Wizard (Spec 189)

Das Create-Formular zeigt jetzt einen zweistufigen Wizard: zuerst Mode-Auswahl (DaemonSet / Deployment), dann Konfigurationsfelder inkl. Ports-Eingabe via PortTagWidget.

Region Detail UI (Spec 187)

Die LoadbalancerRegion-Detailseite nutzt das standardisierte Managed Object Dashboard mit drei Tabs:

  • Instances – gefilterte LoadbalancerInstances
  • IP Prefixes – zugehörige IP-Prefixes
  • Configurationregion_config als Read-Only Monaco-YAML-Viewer

Der K8sCluster-Link zeigt auf k8s_cluster.get_absolute_url() (war zuvor #).

Verwaiste Cluster-Ressourcen (Spec 180)

In der Reconciliation-Schleife für obsolete Region-Deployments wurde K8sApp.uninstall() bisher nicht-blockierend aufgerufen und die DB-Zeile danach sofort gelöscht. Der Cluster-Cleanup wurde damit stillschweigend übersprungen. Jetzt: blockierendes Uninstall + ActionRun.status-Prüfung vor K8sApp.delete() — analog zu LoadbalancerRegion.remove_instance().

VictoriaMetrics Label-Selektoren (Spec 181)

Alle PromQL-Queries nutzen jetzt die kanonischen polycrate_-Keys statt der alten loadbalancerinstances_polycrate_io_*-Labels.

IPAM-Manifest kanonische Labels (Spec 191)

Das IPAM-Manifest der LoadbalancerRegion verwendet jetzt system_labels statt merged_labels, um kanonische und stabile Label-Werte sicherzustellen.

Traffic by Region – PromQL Fix (Spec 190)

Vector-Mismatch in der PromQL-Abfrage für die Region-Aufschlüsselung behoben; leere Charts werden nicht mehr angezeigt.

IPPrefix

Detail UI – Managed Object Dashboard (Spec 193)

Die IPPrefix-Detailseite wurde auf das Managed Object Dashboard migriert.

Fixes

  • Spec 175 – Harbor Registry Quota: Verbesserte Payload-Normalisierung (_normalize_quota_payload()), DEBUG-Logging der vollständigen Harbor-Antwort, 0 B statt wenn Quota 0 Byte.
  • Spec 184 – Cloudflare update_record: type und name werden jetzt immer im PATCH-Payload mitgesendet; kein 400-Fehler mehr.
  • Spec 185 – Workspace Reconciliation: Kubeconfig-Pfad-Fallback für alternative Cluster-Konfigurationen.
  • Spec 186 – K8sCluster _ensure_api_server_endpoint: update_or_createget_or_create + Conditional Update; kein unnötiger DB-Write mehr wenn Hostname/Port unverändert.
  • Spec 192 – LoadbalancerInstance Dashboard Tab: veraltete/doppelte UI-Elemente entfernt.
  • Spec 194views.py: logger war in _integrity_error_response nicht definiert; Fehler behoben.
  • Spec 195ManagedObject.merged_labels: TypeError wenn labels kein Dict ist behoben.

Kompatibilität und Deployment

  • Kein Breaking Change. Django-Migrationen ausführen falls vorhanden (polycrate run polycrate-api migrate).
  • OpenAPI-Schema und JS API Client wurden mit diesem Release neu generiert (make api-client-js-rebuild).

Nach dem Deployment

  • LoadbalancerInstances ohne Config: Dashboard zeigt LOADBALANCER_CONFIG_MISSING-Condition; beim nächsten Reconcile werden bestehende Deployments initiiert zu deinstallieren.
  • Harbor Quota: nach Reconciliation harbor_quota_updated_at in der DB prüfen; bei None VictoriaLogs auf get_project_quota failed prüfen.
  • K8sCluster Endpoints: Reconciliation-Logs sollten keinen DB-Write mehr für unveränderte kubeconfigs zeigen.