Files
123123/ZA.CoreService.ESBCertificateManager/Services/SonicManagementClient.cs
GizzlerandCursor 58b7826162 Add live TLS certificate probing and improve restart error handling.
Configure CertificateCheckUrl per container for curl-like TLS checks, classify Sonic permission errors, and extend setup wizard for container management.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-03 13:16:21 +02:00

58 lines
1.8 KiB
C#

using ZA.CoreService.ESBCertificateManager.Models;
namespace ZA.CoreService.ESBCertificateManager.Services;
/// <summary>
/// Schlanke Fassade: nur Container-Neustart über MfApi.
/// </summary>
public sealed class SonicManagementClient : IDisposable
{
private readonly SonicConnection _connection;
private readonly SonicMfApiExecutor _mfApi;
public SonicManagementClient(
SonicConnection connection)
{
_connection = connection;
_mfApi = new SonicMfApiExecutor(connection);
}
public async Task<(bool Success, string Status, string? Detail)> RestartContainerAsync(
string containerName,
CancellationToken cancellationToken = default)
{
(bool ok, string? output, string? error) =
await _mfApi.RestartAsync(containerName, cancellationToken);
if (ok)
{
await Task.Delay(
TimeSpan.FromSeconds(Math.Clamp(_connection.PostRestartDelaySeconds, 0, 120)),
cancellationToken);
return (true, $"Container '{containerName}' neugestartet (MfApi)",
$"Domain={_connection.DomainName}; URL={_connection.ConnectionUrl}\n{output}");
}
string technical =
$"Container '{containerName}', Domain '{_connection.DomainName}', URL {_connection.ConnectionUrl}\n"
+ $"Fehler: {error}\n\n{output}";
if (SonicErrorClassifier.LooksLikeMissingPermission(technical))
{
return (
false,
"Keine Rechte für den Neustart",
SonicErrorClassifier.FormatRestartFailure(
"Keine Rechte für den Neustart",
technical));
}
return (false, "Neustart fehlgeschlagen (MfApi)", technical);
}
public void Dispose()
{
}
}