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>
58 lines
1.8 KiB
C#
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()
|
|
{
|
|
}
|
|
}
|