From ed419c1f5f64976b962a579221004c12bbffc5fa Mon Sep 17 00:00:00 2001 From: noroot Date: Fri, 11 Sep 2026 10:23:36 +0200 Subject: [PATCH] fix(ui): Cluster-Karte las sich als Widerspruch zur VIP-Karte MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die Dashboard-Cluster-Karte zeigte ha_nodes.role als nacktes "primary". Das ist die DB-/Cluster-Rolle (wohin Schreibzugriffe gehen); sie wandert bewusst NICHT mit der VIP und aendert sich nur durch `edgeguard-ctl promote`. Direkt daneben steht aber die VIP/VRRP-Karte mit "BACKUP" — waehrend eines Failovers (z.B. Node-Reboot) sah der Operator also gleichzeitig "primary" und "BACKUP" und musste raten, was stimmt. Die Daten waren korrekt, nur das Label mehrdeutig: jetzt "DB-Primary" statt "primary", plus Tooltip der den Unterschied zur VRRP-Rolle benennt. Auf der Cluster-Seite bleibt es unveraendert — dort steht die Spalte direkt neben pg_role, der Kontext erklaert sich dort selbst. Co-Authored-By: Claude Opus 5 --- management-ui/src/i18n/locales/de/common.json | 5 ++++- management-ui/src/i18n/locales/en/common.json | 5 ++++- management-ui/src/pages/Dashboard/index.tsx | 13 ++++++++++++- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/management-ui/src/i18n/locales/de/common.json b/management-ui/src/i18n/locales/de/common.json index 25af81c..76db7a5 100644 --- a/management-ui/src/i18n/locales/de/common.json +++ b/management-ui/src/i18n/locales/de/common.json @@ -416,7 +416,10 @@ "ok": "OK", "degraded": "degraded", "split-brain": "split-brain" - } + }, + "roleDbPrimary": "DB-Primary", + "rolePeer": "Peer", + "roleHint": "DB-/Cluster-Rolle: bestimmt, wohin Schreibzugriffe gehen. Sie wandert NICHT mit der VIP — ein Node kann DB-Primary sein und trotzdem gerade keepalived-BACKUP (siehe VIP/VRRP-Karte). Sie aendert sich nur durch „edgeguard-ctl promote“." }, "routingCard": { "title": "Routing", diff --git a/management-ui/src/i18n/locales/en/common.json b/management-ui/src/i18n/locales/en/common.json index 3d532d2..cff7bc5 100644 --- a/management-ui/src/i18n/locales/en/common.json +++ b/management-ui/src/i18n/locales/en/common.json @@ -416,7 +416,10 @@ "ok": "OK", "degraded": "degraded", "split-brain": "split-brain" - } + }, + "roleDbPrimary": "DB primary", + "rolePeer": "Peer", + "roleHint": "Database/cluster role: decides where writes go. It does NOT follow the VIP — a node can be DB primary while currently being keepalived BACKUP (see the VIP/VRRP card). It only changes via \"edgeguard-ctl promote\"." }, "routingCard": { "title": "Routing", diff --git a/management-ui/src/pages/Dashboard/index.tsx b/management-ui/src/pages/Dashboard/index.tsx index ea88823..2e0da67 100644 --- a/management-ui/src/pages/Dashboard/index.tsx +++ b/management-ui/src/pages/Dashboard/index.tsx @@ -677,7 +677,18 @@ function ClusterStatusCard({ nodes, status }: ClusterStatusCardProps) { padding: '4px 0', borderBottom: '1px solid #F1F5F9', fontSize: 12, }}> {n.fqdn} - {n.role} + {/* ha_nodes.role ist die DB-/Cluster-Rolle (wohin Schreibzugriffe + gehen) und wandert bewusst NICHT mit der VIP — sie aendert + sich nur durch `edgeguard-ctl promote`. Ein nacktes "primary" + hier las sich neben der VIP-Karte ("BACKUP") wie ein + Widerspruch, deshalb explizit als DB-Rolle beschriftet. */} + + + {n.role === 'primary' + ? t('dashboard.clusterCard.roleDbPrimary') + : t('dashboard.clusterCard.rolePeer')} + + ))}