Polycrate API 0.13.0¶
Release-Datum: 25. Februar 2026
Typ: Feature-Release
Highlights¶
Version 0.13.0 fuehrt den Pricing & Business Layer als Ersatz fuer Baserow ein, ermoegliche RocketChat-Integration fuer automatisches Channel-Management und vervollstaendigt die Region Default Products-Logik fuer S3 und Loadbalancer.
- Pricing & Business Layer — Abloesung von Baserow: Product-Katalog, PricingRule, PricingQuote, OrganizationProduct, SLO Pre-Computation
- RocketChat Integration — Automatisches Channel-Management und OIDC Channel-Mapping fuer Organizations mit Premium/Priority Support
- Region Default Products — S3Cluster und LoadbalancerInstance erhalten automatisch Products aus konfigurierbaren Systemdefaults
- Mattermost Native API — Bot-Token-Modus mit Rich Messaging, Action Buttons und Rueck-Aktionen
- Operator Deployment Dashboard — Systemuebergreifender Ueberblick ueber Operator-Rollout-Status
- Condition-gesteuerte Note Lifecycle —
add_condition/remove_conditionoptional an Todos/Notes gebunden - SLO/SLA Pre-Computation — Celery-Task fuer vorberechnete Uebersichten via Redis-Cache
- System Owner & Health Banner — Explizite UI fuer System Owner, Health-Checkliste in System Insights
Artefakte¶
Docker Images¶
Deployment¶
Neue Features¶
Pricing & Business Layer¶
Abloesung von Baserow als Backend fuer den Pricing Calculator. Preisdaten, Angebote und Verkaufshistorie werden jetzt nativ in der Polycrate API verwaltet.
Product-Katalog:
Product-Model mitkind-Differenzierung:host,support,object-storage,loadbalancer,k8sapp,k8sclusterPricingRule-Model fuer Preisregeln (flat/usage-based, Einheit, Waehrung)OrganizationProduct-Model fuer Verkaufshistorie (was, an wen, zu welchem Preis, ab wann)CostStatement-Model fuer monatliche AbrechnungseinheitenPricingQuote-Model fuer Angebote (ersetzt Baserow-Tabellen)
Migration aus Baserow:
# Products migrieren (NodeTypes + SupportPackages + K8sApp-Preise)
python manage.py migrate_products --token <BASEROW_TOKEN>
# Quotes migrieren
python manage.py migrate_pricing_quotes --token <BASEROW_TOKEN>
# Hosts mit Products verknuepfen
python manage.py match_host_products --reconcile
Berechnete Kosten:
S3Bucket.computed_cost: Nutzungsbasiert (KB → GB × Preis/GB)LoadbalancerInstance.computed_cost: Flat-Rate (1 Instanz × Monatspreis)Host.computed_cost: Uebermatch_host_productsCommand zugewiesen
RocketChat Integration¶
Jede Organization mit einem aktiven Support-Product, das features.rocketchat_channel=true traegt, erhaelt automatisch einen privaten RocketChat Channel.
Funktionsumfang:
- Automatische Channel-Erstellung bei Organization-Reconciliation
- OIDC Channel-Mapping Sync via Celery Task
sync_rocketchat_channel_mappings - System-Org hat Zugriff auf alle Channels (Array-Format im Mapping)
- Channel-Archivierung bei Organization-Archivierung
- Condition
ORGANIZATION_ROCKETCHAT_CHANNEL_MISSINGbei fehlgeschlagener Erstellung - Auto-Discovery des OAuth-Provider-Settings via RocketChat Settings API
Konfiguration (System Config → Integration: RocketChat):
ROCKETCHAT_ENABLED = true
ROCKETCHAT_API_ENDPOINT = https://chat.example.com/api/v1
ROCKETCHAT_ADMIN_USER_ID = <admin-user-id>
ROCKETCHAT_ADMIN_AUTH_TOKEN = <personal-access-token>
ROCKETCHAT_CHANNEL_PREFIX = (optional, z.B. "org-")
Feature Flag am Product:
Region Default Products¶
S3-Buckets und LoadbalancerInstances erhalten jetzt automatisch ein Product-Assignment, sobald ein Default auf Cluster- oder Systemebene konfiguriert ist.
S3Cluster:
- Neues
default_product-FK-Feld (kind=object-storage) aufS3Cluster - Beim Anlegen neuer Buckets wird das Product automatisch aus dem Cluster vorbelegt
- Backfill bei Reconciliation: alle Buckets ohne Product erhalten das Cluster-Default
S3BucketForm.clean()blockiert Bucket-Erstellung wenn kein Default konfiguriert ist- Condition
S3_CLUSTER_DEFAULT_PRODUCT_MISSINGals Warning
LoadbalancerInstance:
- Auto-Assignment aus
SystemConfig.default_loadbalancer_product - Wird bei
save()undrun_reconciliation()gesetzt (deckt historischen Backfill ab)
SystemConfig:
default_s3_product: Vorschlag fuer neue S3 Clusterdefault_loadbalancer_product: Direktes Auto-Assignment auf alle LBIs
DrawerTable:
S3ClusterDrawerTable: Neue SpalteDefault Productmit LinkS3BucketDrawerTable: Neue SpaltenProduct(Link auf OrganizationProduct) +Computed CostLoadbalancerInstanceDrawerTable: Neue SpaltenProduct+Computed Cost
Mattermost Native API¶
Mattermost-Benachrichtigungen koennen jetzt neben dem klassischen Webhook-Modus auch ueber die native Mattermost Bot-API versendet werden.
Vorteile des API-Modus:
- Rich Formatting (Attachments mit Feldern)
- Action Buttons (z.B. "Downtime bestaetigen", "Snooze")
- Message-Updates (bestehende Nachricht wird aktualisiert statt neu gepostet)
- Thread-Replies fuer Note-Updates
Konfiguration (Notification Sink → Edit):
mattermost_mode:webhook(Standard) oderapi- Im API-Modus:
bot_token(Mattermost Bot Account),integration_tokenfuer Callback-Verifikation
Operator Deployment Dashboard¶
Neues System-Dashboard unter System → Operator Rollout, das den Operator-Deployment-Status ueber alle Workspaces und Cluster visualisiert.
Inhalt:
- Pro Workspace/Cluster: aktuell deployete Operator-Version vs. verfuegbare Version
- Update-Verfuegbarkeit und Rollout-Gating
- Blockierungen und ausstehende Konfigurationsschritte
Condition-gesteuerte Note Lifecycle¶
add_condition und remove_condition koennen optional mit einer Note/Todo verknuepft werden.
Beispiel K8sCluster Cert-Expiry:
- Bei Hinzufuegen der Condition
K8S_CLUSTER_CERT_EXPIRYwird automatisch ein Todo-Note erstellt - Bei Entfernen der Condition wird die Note automatisch geschlossen
- Abloesung der bisherigen "Geburtstag"-Policy fuer Zertifikatsablauf
SLO/SLA Pre-Computation¶
SLO-Uebersichten werden jetzt im 5-Minuten-Intervall via Celery vorberechnet und in Redis gecacht.
Cache-Ebenen:
- Global (systemweit)
- Per-Organization
- Per-Workspace
Der View-seitige Cache-Lookup ersetzt die bisherige On-Demand-Berechnung und eliminiert Timeouts bei grossen Datenmengen.
System Owner & Health Banner¶
- Explizite UI fuer die Zuweisung des System Owners (keine automatische Zuweisung mehr)
- Health-Banner in der Topbar bei aktiven System-Warnings
- System Insights Umbau mit
metricChart-Widget und Health-Checkliste
Verbesserungen¶
BackupSchedule Name-Validierung¶
BackupScheduleSerializer validiert den name-Parameter jetzt analog zu BackupSerializer via validate_name(). Verhindert Konflikte bei identischen Namen innerhalb einer Organization.
K8sAppInstance Bereinigung¶
Migration 0190 loescht alle K8sAppInstance-Datensaetze als Vorbereitung fuer das Model-Removal in 0.14.0.
Provider & PoP Seed Data¶
Globale Hyperscaler (AWS, Azure, GCP, DigitalOcean, OCI, IBM Cloud, Alibaba Cloud) und europaeische Cloud-Provider mit ihren PoPs als Seed Data verfuegbar:
UI-Verbesserungen¶
- Alle
rounded-*-Klassen entfernt: Forms, Widgets, Auth-Seiten, Error Pages — konsequent kantige Labels - Dashboard PoP-Map-Widget: Weltkarte mit Workspace-zugeordneten PoPs als oberstes Dashboard-Element
- Dependent Select Fields: Alpine.js-basierte generische Loesung fuer kaskadierte Select-Felder (Org → Workspace u.a.)
- Topbar Todo-Indikator: Icon + Count-Badge + Alpine.js-Dropdown fuer dem User zugewiesene offene Todos
- Catalogue App Sortierung: Default-Sortierung nach Serial Number, Draft-Filter
Migration¶
Django Migrations laufen automatisch beim Container-Start. Manuelle Post-Deployment-Schritte sind erforderlich — siehe:
→ Post-Deployment Anleitung (intern)
Migrations-Uebersicht:
| App | Migration | Beschreibung |
|---|---|---|
organizations | 0077 | rocketchat_channel_id, rocketchat_channel_name Felder |
organizations | 0076 | Cached Product Cost Fields |
s3 | 0062 | S3Cluster.default_product FK |
s3 | 0061 | S3Cluster.default_product (weitere Felder) |
loadbalancers | 0035 | LoadbalancerInstance.product FK |
polycrate_api | 0061 | SystemConfig.default_s3_product, default_loadbalancer_product |
polycrate_api | 0060 | SystemConfig.default_support_product |
polycrate_api | 0059 | Activity.kind Anpassung |
notes | 0035 | Note.condition Feld |
workspaces | 0123 | Cached Product Cost Fields |
k8s | 0190 | K8sAppInstance Datensaetze loeschen |
k8s | 0189 | K8sApp.product FK |
k8s | 0188 | K8sCluster.product FK |
hosts | 0074 | Host.product FK |
artifacts | 0041 | CatalogueApp + Product FKs |
polycrate-api Block¶
Block-Version: 0.8.0 (app_version: 0.13.0)