fix(system): render-configs rendert jetzt ALLE Dienste, nicht nur HAProxy

- SystemHandler.ExtraReloaders: neues Feld für nftables, wireguard,
  squid, unbound, chrony Reloader
- WithAllReloaders(): Wire-Methode; main.go bindet alle Reloader nach
  Initialisierung ein
- RenderConfigs: läuft alle Reloader durch, sammelt Fehler, antwortet
  mit {ok, rendered[], errors{}} — partiell OK wird als warning gemeldet
- UI: Settings-Button-Label "Re-render all configs"; partial-error
  Toast zeigt welche Dienste fehlschlugen
- Timeout: 30s statt 10s (alle Dienste brauchen mehr Zeit)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Debian
2026-05-24 22:29:00 +02:00
parent 8d7a43bc8c
commit 73619c17f8
8 changed files with 71 additions and 24 deletions

View File

@@ -531,9 +531,10 @@
"haproxyReloadBtn": "HAProxy reload",
"haproxyReloadOk": "HAProxy neu geladen.",
"haproxyReloadFailed": "HAProxy-Reload fehlgeschlagen",
"renderConfigsBtn": "Configs neu rendern (HAProxy)",
"renderConfigsOk": "Configs neu gerendert + reloaded.",
"renderConfigsBtn": "Alle Configs neu rendern",
"renderConfigsOk": "Alle Configs neu gerendert und reloaded.",
"renderConfigsFailed": "Config-Render fehlgeschlagen",
"renderConfigsPartial": "Partieller Render — einige Dienste fehlgeschlagen: {{failed}}",
"backupNowBtn": "Backup jetzt erstellen",
"backupNowOk": "Backup ausgelöst — Status in der Backups-Seite verfolgen.",
"backupNowFailed": "Backup-Trigger fehlgeschlagen",

View File

@@ -531,9 +531,10 @@
"haproxyReloadBtn": "HAProxy reload",
"haproxyReloadOk": "HAProxy reloaded.",
"haproxyReloadFailed": "HAProxy reload failed",
"renderConfigsBtn": "Re-render configs (HAProxy)",
"renderConfigsOk": "Configs re-rendered + reloaded.",
"renderConfigsBtn": "Re-render all configs",
"renderConfigsOk": "All configs re-rendered and reloaded.",
"renderConfigsFailed": "Config render failed",
"renderConfigsPartial": "Partial render — some services failed: {{failed}}",
"backupNowBtn": "Backup now",
"serviceRestartCardTitle": "Restart services",
"serviceRestartBtn": "Restart",

View File

@@ -125,7 +125,15 @@ export default function SettingsPage() {
})
const renderConfigs = useMutation({
mutationFn: async () => apiClient.post('/system/render-configs'),
onSuccess: () => msg.success(t('settings.renderConfigsOk')),
onSuccess: (r) => {
const d = r.data?.data as { ok: boolean; rendered: string[]; errors: Record<string, string> } | undefined
if (d && !d.ok && d.errors && Object.keys(d.errors).length > 0) {
const failed = Object.entries(d.errors).map(([k, v]) => `${k}: ${v}`).join('; ')
msg.warning(t('settings.renderConfigsPartial', { failed }))
} else {
msg.success(t('settings.renderConfigsOk'))
}
},
onError: (e: Error) => msg.error(t('settings.renderConfigsFailed') + ': ' + e.message),
})
const triggerBackup = useMutation({