Switch default restart to Sonic MF Management API via Domain Manager.
Use ConnectionUrl and SMC credentials with IAgentProxy.restart; keep WinRM only as optional fallback. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -38,15 +38,104 @@ public sealed class SonicConnection
|
||||
public string WinRmPassword { get; init; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// WinRm = remote via PowerShell Remoting;
|
||||
/// LocalCmd = lokal auf dem Sonic-Server (kein WinRM, App muss dort laufen);
|
||||
/// HttpApi = REST.
|
||||
/// MfApi = Sonic MF Management Runtime API über ConnectionUrl + SMC-Logins (Standard);
|
||||
/// WinRm / LocalCmd = optionaler Fallback über stopcontainer/startcontainer;
|
||||
/// HttpApi = REST (falls vorhanden).
|
||||
/// </summary>
|
||||
public SonicManagementMode ManagementMode { get; init; } = SonicManagementMode.WinRm;
|
||||
public SonicManagementMode ManagementMode { get; init; } = SonicManagementMode.MfApi;
|
||||
|
||||
/// <summary>Sonic-Installationsroot, z.B. "C:\Sonic\MQ10.0".</summary>
|
||||
/// <summary>
|
||||
/// Effektiver Modus: bei WinRm und lokalem ConnectionUrl-Host wird LocalCmd erzwungen.
|
||||
/// MfApi bleibt unverändert (nutzt Domain-Manager-Verbindung).
|
||||
/// </summary>
|
||||
public SonicManagementMode EffectiveManagementMode
|
||||
=> ManagementMode == SonicManagementMode.WinRm && IsConnectionHostLocal(ConnectionUrl)
|
||||
? SonicManagementMode.LocalCmd
|
||||
: ManagementMode;
|
||||
|
||||
/// <summary>True wenn WinRm konfiguriert war, aber wegen lokalem Host auf LocalCmd umgestellt wurde.</summary>
|
||||
public bool IsLocalCmdAutoForced
|
||||
=> ManagementMode == SonicManagementMode.WinRm
|
||||
&& EffectiveManagementMode == SonicManagementMode.LocalCmd;
|
||||
|
||||
/// <summary>Anzeigetext für UI (inkl. Auto-Erkennung).</summary>
|
||||
public string ManagementModeDisplay
|
||||
=> IsLocalCmdAutoForced
|
||||
? "LocalCmd (Host lokal erkannt)"
|
||||
: EffectiveManagementMode switch
|
||||
{
|
||||
SonicManagementMode.MfApi => "MfApi (Sonic Domain Manager)",
|
||||
_ => EffectiveManagementMode.ToString()
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// True wenn der Host aus ConnectionUrl dieser Maschine entspricht
|
||||
/// (localhost / 127.0.0.1 / ::1 / Computername).
|
||||
/// </summary>
|
||||
public static bool IsConnectionHostLocal(string? connectionUrl)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(connectionUrl))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
string host;
|
||||
try
|
||||
{
|
||||
host = new Uri(connectionUrl).Host;
|
||||
}
|
||||
catch
|
||||
{
|
||||
host = connectionUrl.Trim();
|
||||
}
|
||||
|
||||
if (string.IsNullOrWhiteSpace(host))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (host.Equals("localhost", StringComparison.OrdinalIgnoreCase)
|
||||
|| host.Equals("127.0.0.1", StringComparison.OrdinalIgnoreCase)
|
||||
|| host.Equals("::1", StringComparison.OrdinalIgnoreCase)
|
||||
|| host.Equals("[::1]", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
string machine = Environment.MachineName;
|
||||
if (host.Equals(machine, StringComparison.OrdinalIgnoreCase)
|
||||
|| host.StartsWith(machine + ".", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
string dnsName = System.Net.Dns.GetHostName();
|
||||
if (!string.IsNullOrWhiteSpace(dnsName)
|
||||
&& (host.Equals(dnsName, StringComparison.OrdinalIgnoreCase)
|
||||
|| host.StartsWith(dnsName + ".", StringComparison.OrdinalIgnoreCase)))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
// DNS optional
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>Sonic-Installationsroot, z.B. "C:\Sonic\MQ10.0" (enthält lib\*.jar für MfApi).</summary>
|
||||
public string SonicHome { get; init; } = @"C:\Sonic\MQ10.0";
|
||||
|
||||
/// <summary>
|
||||
/// Optionaler Pfad zu Sonic-Client-JARs für MfApi (mgmt_client.jar etc.).
|
||||
/// Leer = SonicHome\lib.
|
||||
/// </summary>
|
||||
public string MfClientLibPath { get; init; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Container-Namen (kurz), z.B. ["DE-Test"]. Nicht die Domain.
|
||||
/// </summary>
|
||||
@@ -281,5 +370,7 @@ public enum SonicManagementMode
|
||||
{
|
||||
HttpApi = 0,
|
||||
WinRm = 1,
|
||||
LocalCmd = 2
|
||||
LocalCmd = 2,
|
||||
/// <summary>Sonic MF Management API über Domain-Manager (ConnectionUrl + SMC-Credentials).</summary>
|
||||
MfApi = 3
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user