Polycrate API 0.15.0¶
Release-Datum: 18. April 2026 Typ: Feature (Bundled)
Übersicht¶
0.15.0 ist das erste grosse Bundled-Release seit 0.14.17. Es bündelt die vollständige User/Contact-Migration mit Keycloak, das abgeschlossene Artifacts-zu-Blocks-Refactoring, externe DNS-Zonen via Lexicon, K8sVolume und DNSZone als Productized Models, das flächendeckend ausgerollte Managed Object Dashboard, ein neues RBAC-Permission-System und zahlreiche Infrastruktur-, Label- und Performance-Verbesserungen.
Pflicht-Schritte nach Upgrade
- polycrate-operator-Block upgraden (Block-basiertes Lookup — sonst wird
installed_versionnicht korrekt propagiert). - API-/CLI-Clients regenerieren (OpenAPI-Schema hat breaking-artige Änderungen bei
K8sApp,/api/v1/contacts/→/api/v1/users/). - Neue SystemConfig-Defaults setzen (siehe Pflicht-Konfiguration).
Highlights¶
- User/Contact-Migration — Contacts werden automatisch zu First-Class-Usern; Keycloak-Provisionierung bei
User.save(), Error-Handling blockiert Save nicht mehr. Neue User-Admin-UI + API unter/api/v1/users/. - Artifacts → Blocks Refactoring abgeschlossen — Operator- und Loadbalancer-Lookup laufen jetzt über
BlockstattArtifact;K8sApp.installed_versionist Block-basiert; ArtifactHub undArtifactRepository-Discovery sind entfernt. - Externe DNS-Zonen — Provisioning via
python-lexiconfür alle gängigen DNS-Provider (Route53, Cloudflare, Hetzner-DNS, …).DNSZoneist jetzt Productized Model mit separaten Produkten fürinternal/external. - K8sVolume Productized — Automatische Product-Zuordnung, Billing via
get_billing_quantity-Hook, Fixes ancomputed_cost. - Managed Object Dashboard flächendeckend — 16 Detail-UIs migriert (K8sApp, Workspace, S3Cluster, Endpoint, S3Bucket, Host, LB, K8sVolume, K8sCluster, Project, Block, Note, DataSource, ActionRun, Downtime, Credential).
- Generisches RBAC-Permission-System — Einheitliche Permission-Checks für alle ManagedObjects, end-to-end getestet mit Nicht-Admin-Usern.
- Dashboard-Revamp — Tab-Layout mit System-Übersicht, archivierte Objekte gefiltert, Add-Note-/Execute-Actions-/Restart-Kontextmenüs.
- Labels via OpenAPI — Label-Konstanten als Single Source of Truth für API und CLI; neue Keys
criticality,priority,controlled_by; Log-Explorer-V2 aufpolycrate_*-Keys migriert. - Vydeo Integration erweitert — Meeting-Notes mit Vydeo-Sync, granulare Trigger-Steuerung, Cancel bei Note-Resolve/Delete, User-Sync als Celery-Task.
- Loopback-Integration — Organisationen und ihre primären Workspaces werden automatisch gegen die Loopback-API aufgelöst;
loopback_org_idam SystemOwner undloopback_project_idje Organisation; strukturierte Condition-Propagation bei Auth-/Timeout-/Match-Fehlern.
Artefakte¶
Docker Image¶
Block¶
Änderungen nach Themen¶
Auth / RBAC / User-Management / Keycloak¶
Contacts werden automatisch zu User-Objekten migriert. Keycloak-User werden bei User.save() automatisch provisioniert, wenn KEYCLOAK_INTEGRATION_ENABLED=True; Fehler blockieren Save nicht mehr und werden sauber geloggt. Neue User-Admin-UI + API-Endpoints unter /api/v1/users/. Generisches RBAC-Permission-System für alle ManagedObjects. Credentials erhalten einen eigenen Top-Level-Sidebar-Eintrag und ein Managed-Object-Dashboard-Detail-UI. User-Assignment auf ManagedObjects ist auf Superuser beschränkt. End-to-end Nicht-Admin-Tests für Auth/RBAC. Fixes: User-Edit NoReverseMatch bei Integer-PK, Agent benötigte Create-Permission für Artifacts.
User-Aktion
- MUSS (wenn Keycloak genutzt): In
SystemConfig→ Kategorie "Keycloak" die FelderKEYCLOAK_INTEGRATION_ENABLED=truesowie Keycloak-Server-URL, Realm, Admin-Client-Credentials setzen. - MUSS: Nach Upgrade im Admin kontrollieren, dass migrierte Contact→User-Objekte mit Keycloak verknüpft sind (
keycloak_user_idgesetzt). Neu-Sync bei Bedarf via Admin-Aktion. - MUSS: API-Clients, die auf
/api/v1/contacts/zugegriffen haben, auf/api/v1/users/umstellen. - KANN: Superuser-Flag auf bestehenden Accounts prüfen — User-Assignment auf ManagedObjects ist jetzt auf Superuser beschränkt.
DNS (externe Zonen, Productized)¶
Externe DNS-Zonen werden via python-lexicon provisioniert; neues Feld DNSZone.kind (internal / external) + provider_credential FK. DNSZone ist Productized Model mit separaten Produkten für internal/external. Fix: OrganizationProduct.active_from wird bei Auto-Reconciliation korrekt gesetzt (Proration).
User-Aktion
- MUSS (wenn externe Zonen genutzt werden): Provider-Credential vom Kind DNS-Provider anlegen (Route53, Cloudflare, Hetzner-DNS etc. — alle von
python-lexiconunterstützten Provider). - MUSS:
SystemConfig.default_external_dns_zone_productundSystemConfig.default_internal_dns_zone_productkonfigurieren, damit neue Zonen automatisch einem Produkt zugeordnet werden. - AUTOMATISCH: Bestehende DNSZones werden via Migration als
kind=internalmarkiert; bestehendeOrganizationProduct-Einträge mit fehlendemactive_fromwerden gebackfillt. - KANN: Externe Zonen mit
kind=external+provider_credentialüber UI oder API anlegen; Records werden via Lexicon-Client synchronisiert.
Artifacts → Blocks Refactoring (grösstes Thema)¶
Operator- und Loadbalancer-Lookup läuft über Block statt Artifact. managed_by umgekehrt: K8sApp.managed_by = Block. CatalogueApp mit template_block FK, K8sApp-Artifact-Chain migriert. ArtifactHub-Integration entfernt; ArtifactRepository-Discovery abgeschaltet. OperatorConfig: artifact_discovery-Sektion entfernt; .state.poly-Integration aus Operator-Deployment entfernt. Block-Model erhält Template-Felder, nullable FKs und neue Felder. Workspace-Reconciliation importiert Template-Blocks. K8sApp.installed_version ist Block-basiert; API schreibbar; Auto-Deployment aktualisiert installed_version; Block-Version-Update bei Auto-Deployment gefixt. Neuer DataSource-Kind polycrate-hub mit Detail-UI. ActionRun- und Block-Detail-UI auf Managed Object Dashboard. Artifact content_url Filter für Operator-Lookup; stale prefetch nach Refactor gefixt; Operator-Template-Block-Lookup registry_url-Mismatch gefixt.
User-Aktion
- MUSS:
polycrate-operator-Block auf eine Version upgraden, die Block-basiertes Lookup unterstützt (siehe Operator-Release-Notes; imarchenemy-Workspace geladen). Ohne Upgrade wirdinstalled_versionnicht korrekt aktualisiert. - MUSS: OperatorConfigs in K8s-Clustern prüfen —
artifact_discovery- undstate_poly-Sektionen entfallen; bestehende Configs werden durch Reconciliation bereinigt. - MUSS: API-Clients regenerieren (OpenAPI) —
K8sApp.artifact/artifact_packageFKs sind entfernt; stattdesseninstalled_block/installed_block_version/installed_versionverwenden. - KANN (empfohlen): Custom-Integrationen, die ArtifactHub-URL verwendeten, auf DataSource
polycrate-hubumstellen. - KANN (Polycrate-Hub-Import): Der Seed-Import legt eine deaktivierte DataSource
polycrate-hub-ayedo(kind=polycrate-hub,system_level=true) an. Um Template Blocks automatisch aus dem Hub zu synchronisieren: im Admin/UI die DataSource aktivieren (is_enabled=true) und inSystemConfig→ Kategorie "Polycrate Hub" die FelderPOLYCRATE_HUB_ENDPOINT,POLYCRATE_HUB_USERNAME,POLYCRATE_HUB_PASSWORDsetzen. Ohne Aktivierung ändert sich nichts am bisherigen Verhalten.
Pricing / Productized Models¶
K8sVolume ist Productized Model mit Default-Product-Zuordnung. Pricing.get_billing_quantity-Hook für usage-basierte Abrechnung. Fix: S3Bucket.computed_cost war leer. Fix: ProductizedModel-Detail-Serializer enthält computed_cost. Provider: CCM/CSI-Felder + K8s-Volume-Product. Analyse gemischter Datenquellen auf Organization Detail View. Neues Management-Command generate_cost_statements.
User-Aktion
- MUSS:
SystemConfig.default_k8s_volume_productsetzen — sonst werden neue K8sVolumes nicht automatisch einem Produkt zugeordnet. - AUTOMATISCH: Backfill-Migration setzt Product auf bestehende K8sVolumes;
OrganizationProduct.active_fromwird für Legacy-Daten gesetzt. - KANN:
python manage.py generate_cost_statementsfür Cost-Statement-Runs.
Managed Object Dashboard Migrationen¶
Zentrale Dashboard-Component + Single-Include-Partial. Detail-UI-Migrationen für K8sApp, Workspace, S3Cluster, Operator Deployment, ManagedObject created_by_component, Endpoint, S3Bucket, Host, LoadbalancerInstance, K8sVolume, K8sCluster, Project, Block, Note, DataSource, ActionRun, Credential und Downtime. Neuer Tab "Conditions/Tolerations/Labels/Annotations". Metrics-Tabs für Host, LB, K8sVolume, K8sCluster. WorkspaceSerializer auf ManagedObjectDetailSerializer refactored.
User-Aktion
- Keine Pflicht-Aktion.
- KANN: Custom-CSS-Overrides auf Detail-Templates prüfen — Layout ist einheitlich.
- KANN:
display_contentTemplate-Tag für eigene Templates nutzen.
Notes / Projects / Meetings / Vydeo¶
Embedded Note Mixin, Note-Timetracking + Project-FK, Project-Management, Note/Project-Bereinigung. Meeting-Note-Kind mit Vydeo-Integration; Note-Kind-Kachel-Selector. Vydeo-User-Sync als Celery-Task; granulare Trigger-Steuerung + Cancel-bei-Resolve; Vydeo-Meeting wird bei Note-Löschung gecancelt. PersonalNote: fehlende Breadcrumbs gefixt; Superadmin-Lesezugriff. Note-Component-Footer: Project- und Vydeo-Links. Note-Assignees: Alpine-Dropdown mit Suche statt SelectMultiple.
User-Aktion
- MUSS (wenn Vydeo genutzt): In
SystemConfig→ Kategorie "Integrations / Vydeo" die FelderVYDEO_INTEGRATION_ENABLED=true,VYDEO_ENDPOINT(z. B.https://api.vydeo.io) undVYDEO_API_TOKENsetzen. Wird Vydeo nicht genutzt:VYDEO_INTEGRATION_ENABLED=false(Default) — keine Aktion. - KANN: Bestehende Notes im Admin an Projekte binden (neues FK).
- KANN: Meeting-Notes mit Vydeo anlegen — Meeting wird automatisch erstellt und bei Note-Delete/Resolve gecancelt.
S3 / K8s / Host / LB / Endpoint Infrastruktur¶
K8sCluster kind=loopback (lokale Cluster via in-Cluster-Kubeconfig; nicht zu verwechseln mit der weiter unten beschriebenen Loopback-API-Integration). K8sVolume PersistentVolume-Tracking; List-UI Namespace-Spalte. S3Cluster: Capacity-Tracking via Prometheus, current_usage aus Bucket-Aggregation, allow_new_buckets Feld, select_related-Fix. S3Bucket: Minio-Policy nach provision(); Agent-Permissions + Filter; Lösch-Fehlerbehandlung + API-Fehlertransport; ViewSet-Auto-Assignment + OpenAPI-Schema-Fix. BackupSchedule Name-Validierung. S3-Cluster-Endpoint-Reachability. Endpoint: do_not_monitor Reconciliation-Guard; Auto-Do-Not-Monitor via HTTP-Status-Codes. LoadbalancerRegion-Reconciliation meldet IPAM-Fehler korrekt. Backup-Retention-Task NoneType-Fix; Downtime-Timeline fehlende Annotations.
User-Aktion
- KANN:
S3Cluster.allow_new_buckets=Falsesetzen, um Neu-Buckets zu sperren. - AUTOMATISCH: S3Bucket-Agents werden automatisch assigned; manuelle Permission-Vergabe obsolet.
- KANN: Endpoints, die anhaltend HTTP-Errors liefern, werden automatisch auf
do_not_monitorgesetzt — im Admin kontrollieren. - KANN:
K8sCluster kind=loopbackfür lokale Setups.
Loopback-Integration¶
Polycrate kann Organisationen und Workspaces gegen die externe Loopback-API auflösen, um loopback_org_id und loopback_project_id zu persistieren. Das Matching erfolgt über Organization.legal_name (→ Loopback-Org, nur am konfigurierten SystemOwner persistiert) und Workspace.fqdn der primären Workspace einer Organisation (→ Loopback-Project, pro Organisation persistiert). Die Reconciliation läuft als Teil der regulären Organization-Reconciliation und ist no-op, solange LOOPBACK_INTEGRATION_ENABLED=false gesetzt ist.
Der LoopbackClient klassifiziert API-Fehler strukturiert: LoopbackAuthError (401/403), LoopbackTimeoutError, LoopbackUnreachableError, LoopbackBadRequestError (400), LoopbackError (generisch). Jeder Fehlertyp wird auf eine dedizierte Condition am Organization-Objekt gemappt: ORGANIZATION_LOOPBACK_AUTH_FAILED, ORGANIZATION_LOOPBACK_API_UNREACHABLE, ORGANIZATION_LOOPBACK_ORG_UNRESOLVED, ORGANIZATION_LOOPBACK_PROJECT_UNRESOLVED. Erfolgreiche Auflösungen entfernen die jeweilige Condition wieder. Auf dem Organization-Dashboard existiert eine read-only Card, die loopback_org_id (mit SystemOwner-Hinweis) und loopback_project_id samt Resolve-Status, Auth-Status und Copy-to-Clipboard anzeigt, solange LOOPBACK_INTEGRATION_ENABLED=true ist.
User-Aktion
- KANN (wenn Loopback genutzt wird): In
SystemConfig→ Kategorie "Integrations / Loopback" die FelderLOOPBACK_INTEGRATION_ENABLED=true,LOOPBACK_API_ENDPOINT(z. B.https://api.loopback.cloud) undLOOPBACK_API_KEY(Bearer-Token) setzen. Ohne Aktivierung ist die Integration no-op — keine Aktion. - MUSS (wenn aktiviert): Eine Organisation in
SystemConfig.system_owner_organizationals SystemOwner referenzieren.loopback_org_idwird ausschliesslich an dieser Organisation persistiert; andere Organisationen zeigen den Wert read-only über den SystemOwner an. - MUSS (wenn aktiviert):
Organization.legal_namemuss exakt dem Namen der Loopback-Org entsprechen;Workspace.fqdnmuss exakt dem Namen des Loopback-Projects entsprechen. Ansonsten tauchenORGANIZATION_LOOPBACK_ORG_UNRESOLVEDbzw.ORGANIZATION_LOOPBACK_PROJECT_UNRESOLVEDWarning-Conditions am Objekt auf. - KANN: Conditions am Organization-Objekt als Early-Warning für Integrations-Drift monitoren —
AUTH_FAILEDdeutet auf ein falsches oder abgelaufenesLOOPBACK_API_KEYhin,API_UNREACHABLEauf Netzwerkprobleme oder falsch gesetztenLOOPBACK_API_ENDPOINT.
Downtime / SLO / Monitoring / Audit¶
Downtime Timeline Graph; SLO-Overview Downtime-Filter auf SLA-relevant; Custom Time Range; metricChart Reset-Toolbar. SSH-Session und Workspace-Sync Activity-Audit API.
User-Aktion
Keine. Neue Monitoring- und Audit-Features sind direkt nutzbar.
Labels / OpenAPI / CLI-Integration¶
ManagedObject-Labels-System mit system_labels + merged_labels. Label-Konstanten via OpenAPI als Single Source of Truth für API + CLI. Log-Explorer-V2-Label-Migration auf neue polycrate_-Keys. LabelKey-Enum erweitert: criticality, priority, controlled_by. Labels-Feld aus ManagedObjectBaseForm entfernt.
User-Aktion
- MUSS: API-Clients /
polycrate-cliregenerieren, um die neuen LabelKeys zu erhalten. - KANN (nur bei externen Tools): Der interne Log Explorer V2 wird automatisch auf die neuen
polycrate_*-Keys migriert — keine User-Aktion. Nur wenn eigene externe VictoriaLogs-/Grafana-Dashboards oder LogsQL-Queries ausserhalb vonpolycrate-apiexistieren, die noch auf*.polycrate.io/*-Label-Keys zugreifen, müssen diese auf die neuenpolycrate_*-Keys umgestellt werden. - KANN: Labels werden nicht mehr direkt im MO-Form editiert — dedizierte Label-UI nutzen.
Dashboard / Navigation / UI Polish¶
Dashboard-Revamp mit Tab-Layout + System-Übersicht. Workspace-State .state.poly (API-seitig). Projects v2: active-Filter Default auf "All". Execute-Actions-Button nur für Instance Blocks. "Add Note" im Dashboard-Kontextmenü. ActionRun-Restart-Button aus Topbar in Dashboard-Tab + Timeline. Dashboard zeigt archivierte Objekte ausgefiltert. Dashboard zeigt alle Objekte unabhängig von Org-Membership. Dashboard-Footer-Fix für Credential/Endpoint/LoadbalancerInstance; redundanter jsonify_pretty-Filter; Copy-Button-Bug.
User-Aktion
Keine. UI-Verbesserungen sind direkt sichtbar.
Performance / Housekeeping¶
FTS DB-Load Analyse + invertierter Signal-Guard-Default; Celery-Task-Result-Bloat. Frontend-Performance-Analyse; N+1-Fix auf Organization Detail View. Seed-Import überschreibt bestehende Provider/DataSources nicht. /portal/ (Organization Portal) abgeschaltet und Code entfernt. Management-Commands-Inventar. PatchedK8sAppRequest OpenAPI-Schema-Fix.
User-Aktion
- MUSS: Bookmarks auf
/portal/entfernen — liefert 404. - MUSS: API-Clients mit
PatchedK8sAppRequestregenerieren. - KANN: FTS-Indexing läuft nun mit korrektem Default — bestehende Queries verifizieren.
Migration¶
0.15.0 enthält datenverarbeitende Migrationen, aber keine harten Breaking Changes, die manuelles Eingreifen erfordern — die meisten Änderungen laufen als Django-Data-Migrations automatisch beim Deploy durch.
Automatische Data-Migrations¶
- Contacts werden zu Usern migriert. Bestehende Contact-FKs werden auf User umgebogen.
DNSZone.kindwird für alle bestehenden Zonen aufinternalgebackfillt.K8sVolume.productwird für bestehende Volumes aufSystemConfig.default_k8s_volume_productgesetzt.OrganizationProduct.active_fromwird für Legacy-Einträge aufcreated_atoder Org-Startdatum gesetzt.SystemConfigbekommt neue Keys:default_s3_bucket_cluster,default_external_dns_zone_product,default_internal_dns_zone_product,default_k8s_volume_product,LOOPBACK_INTEGRATION_ENABLED,LOOPBACK_API_ENDPOINT,LOOPBACK_API_KEY.Credential.kindwird um DNS-Provider-Kinds erweitert.
Pflicht-Konfiguration nach Deploy¶
- Keycloak (falls genutzt):
SystemConfig→KEYCLOAK_INTEGRATION_ENABLED=true+ Server-URL / Realm / Admin-Credentials setzen. - DNS: Falls externe Zonen verwaltet werden sollen,
default_external_dns_zone_productunddefault_internal_dns_zone_productinSystemConfigsetzen. - K8sVolume Pricing:
default_k8s_volume_productinSystemConfigsetzen, damit neu angelegteK8sVolumes automatisch einem Produkt zugeordnet werden. - polycrate-operator-Block: Auf kompatible Version upgraden (Block-basiertes Lookup). Ohne Upgrade wird
installed_versionnicht korrekt propagiert.
API-/CLI-Clients regenerieren¶
K8sApphat keineartifact/artifact_packageFKs mehr — stattdesseninstalled_block,installed_block_version,installed_version.PatchedK8sAppRequest-OpenAPI-Schema wurde korrigiert./api/v1/contacts/existiert nicht mehr — stattdessen/api/v1/users/.- Neue LabelKeys (
criticality,priority,controlled_by) sind im OpenAPI-Enum. S3BucketViewSethat korrigiertes OpenAPI-Schema + Agent-Auto-Assignment.
Entfernte Komponenten¶
/portal/(Organization Portal) ist komplett entfernt. Bestehende Bookmarks liefern 404.- ArtifactHub-Discovery und
artifact_discoveryaus OperatorConfig sind entfernt. .state.poly-Integration aus Operator-Deployment entfernt.
Downtime / Rollback¶
Rollback auf 0.14.17 ist möglich, aber wegen der Data-Migrations (Contact→User, DNSZone.kind, OrganizationProduct.active_from, K8sVolume.product) nur mit vollem Datenbank-Restore sauber durchführbar. DB-Backup VOR Upgrade erstellen.