2 Commits

Author SHA1 Message Date
noroot
2c72a82a91 chore(release): v1.3.28 stable 2026-09-11 10:24:22 +02:00
noroot
ed419c1f5f fix(ui): Cluster-Karte las sich als Widerspruch zur VIP-Karte
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 <noreply@anthropic.com>
2026-09-11 10:23:36 +02:00
4 changed files with 21 additions and 4 deletions

View File

@@ -1 +1 @@
1.3.27 1.3.28

View File

@@ -416,7 +416,10 @@
"ok": "OK", "ok": "OK",
"degraded": "degraded", "degraded": "degraded",
"split-brain": "split-brain" "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": { "routingCard": {
"title": "Routing", "title": "Routing",

View File

@@ -416,7 +416,10 @@
"ok": "OK", "ok": "OK",
"degraded": "degraded", "degraded": "degraded",
"split-brain": "split-brain" "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": { "routingCard": {
"title": "Routing", "title": "Routing",

View File

@@ -677,7 +677,18 @@ function ClusterStatusCard({ nodes, status }: ClusterStatusCardProps) {
padding: '4px 0', borderBottom: '1px solid #F1F5F9', fontSize: 12, padding: '4px 0', borderBottom: '1px solid #F1F5F9', fontSize: 12,
}}> }}>
<code style={{ color: '#334155' }}>{n.fqdn}</code> <code style={{ color: '#334155' }}>{n.fqdn}</code>
<Tag color={n.role === 'primary' ? 'green' : 'default'} style={{ margin: 0 }}>{n.role}</Tag> {/* 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. */}
<Tooltip title={t('dashboard.clusterCard.roleHint')}>
<Tag color={n.role === 'primary' ? 'green' : 'default'} style={{ margin: 0 }}>
{n.role === 'primary'
? t('dashboard.clusterCard.roleDbPrimary')
: t('dashboard.clusterCard.rolePeer')}
</Tag>
</Tooltip>
</div> </div>
))} ))}
</Space> </Space>