Polycrate API 0.11.16
Polycrate API 0.11.16
Release-Datum: 20. Januar 2026
Typ: Bugfixes & UI Improvements
Highlights
- 🔥 Critical Fix: S3 Buckets bleiben nicht mehr DEGRADED - Reconciliation-Blockade behoben
- 🔥 Critical Fix: LoadBalancer Traffic-Metriken zeigen jetzt korrekte Werte
- Fix: Leere Namen bei Backups/Certificates werden automatisch korrigiert
- UI: S3 Bucket Detail Redesign mit Inline Access Keys
- UI: Endpoint Monitoring Coverage Chart auf 1h Granularität optimiert
Artefakte
Docker Images
docker pull cargo.ayedo.cloud/polycrate/polycrate-api:0.11.16
Installation
polycrate pull cargo.ayedo.cloud/ayedo/k8s/polycrate-api
polycrate run polycrate-api install
Critical Bugfixes
S3 Bucket Reconciliation Fix
Problem:
S3 Buckets blieben permanent DEGRADED und wurden beim Provider (MinIO) nie erstellt. In den Logs erschien kein Error, nur:
[INFO] No metrics data available for bucket 'None'. Normal for new/empty buckets.
Root Cause:
Bei der Migration zu run_reconciliation() in 0.11.12 wurden early returns im Minio Metrics-Fetching Block eingeführt, die den REPAIRS-Abschnitt komplett überspringen. Für neue Buckets (ohne Metriken) wurde der create_bucket()-Aufruf nie erreicht.
Lösung:
| Änderung | Beschreibung |
|---|---|
| Guard für Metrics-Fetch | Nur wenn provider_object_created = True |
| Early Returns entfernt | Nur loggen, nicht abbrechen |
| Exception Handling | raise e → log + continue |
| Pre-flight Check | Credential-Validierung vor create_bucket() |
| Besseres Logging | Exception-Details in Fehlermeldungen |
Nach Deploy:
Betroffene S3 Buckets manuell über den Reconcile-Button anstoßen.
LoadBalancer Traffic-Metriken Fix
Problem:
Zwei LoadBalancer, deployed vor 6 und 9 Stunden, zeigten auf "30 Days" bereits 11.4 TB Traffic - und identische Werte obwohl sie unterschiedliche Instanzen sind.
Root Causes:
- Fallback ohne Labels - Bei fehlenden Metriken wurde auf alle HAProxy-Metriken im System gefallback
- Prometheus Extrapolation -
increase(metric[30d])für eine 6h alte Metrik wird auf 30 Tage hochgerechnet - Range Query für Instant-Daten -
increase()sollte als Instant Query laufen
Lösung:
| Änderung | Beschreibung |
|---|---|
| Fallbacks entfernt | Keine Metriken = 0 (nicht "alle HAProxy-Metriken") |
| Instant Queries | increase() als Instant Query statt Range |
| Zeitlimit | Periode auf LBI-Lebenszeit begrenzt |
| Label-Validierung | Format-Prüfung der Prometheus-Labels |
Bugfixes
Backup & Certificate Name Validation
Problem:
Backups und Certificates wurden mit leerem Namen erstellt und erschienen im UI als "Unnamed" oder "None".
Root Cause:
sync_from_cert_manager_cr()nutztemetadata.get('name', '')- leerer String als Default- Model-Validatoren werden bei
get_or_create()nicht automatisch aufgerufen
Lösung:
| Komponente | Änderung |
|---|---|
| Serializer | name als required mit min_length=1 |
| Model | _normalize_name_for_api() Helper mit Fallback-Kette |
| Celery | fix_empty_object_names() Task bei Beat-Start |
Automatische Korrektur:
Bestehende Einträge ohne Namen werden beim nächsten Celery-Beat-Start automatisch repariert (Fallback auf secret_name oder UUID).
UI Improvements
S3 Bucket Detail Redesign
Das S3 Bucket Detail UI wurde analog zum LoadbalancerInstance UI redesigned:
- Inline Access Keys - Access Key ID und Secret werden direkt angezeigt (mit Copy-Button)
- Metrics Dashboard - Usage und Object Count mit Timeline-Graphen
- Kantige Collapsibles - Konsistente UI-Sprache ohne
rounded-*Klassen
Endpoint Monitoring Coverage Chart
Änderung:
Die Granularität des Coverage Charts wurde von 5-Minuten auf 1-Stunden-Intervalle optimiert.
Grund:
- Bei 30-Tage-Ansicht waren 8.640 Datenpunkte zu unübersichtlich
- 1h-Intervalle zeigen sinnvollere Trends (720 Datenpunkte)
- Bessere Performance bei der Datenabfrage
Migration
Keine Datenbank-Migration erforderlich.
Nach Deploy:
- DEGRADED S3 Buckets manuell reconcilen (Reconcile-Button)
fix_empty_object_namesTask läuft automatisch beim Celery-Beat-Start
Changelog
| Datei | Änderung |
|---|---|
src/s3/models.py |
S3Cluster.create_bucket() - Pre-flight Check, Error Logging |
src/s3/models.py |
S3Bucket.run_reconciliation() - Guard + keine early returns |
src/loadbalancers/models.py |
_fetch_metrics_data() komplett überarbeitet |
src/backups/serializers.py |
Name-Validierung hinzugefügt |
src/certificates/serializers.py |
Name-Validierung hinzugefügt |
src/polycrate_api/tasks.py |
fix_empty_object_names() Task |
src/polycrate_api/views.py |
Coverage Chart Step auf 1h |
src/s3/templates/s3/bucket_detail_new.html |
UI Redesign |
Block-Version
# block.poly
name: cargo.ayedo.cloud/ayedo/k8s/polycrate-api
version: 0.5.20
app_version: "0.11.16"
Spezifikationen
Die detaillierten Implementierungs-Spezifikationen finden sich in .specs/0.11.16/:
s3-bucket-reconciliation-fix.md- S3 Reconciliation Analyseloadbalancer-metrics-fix.md- LoadBalancer Metrics Analysebackup-name-validation.md- Backup Name Validationcertificate-name-validation.md- Certificate Name Validations3-bucket-ui-redesign.md- S3 UI Redesignendpoint-monitoring-coverage-chart-granularity.md- Coverage Chart