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')} + + ))}