namespace ZA.CoreService.ESBCertificateManager.Models; /// /// Verbindungskonfiguration für eine Progress Sonic ESB Management Instanz. /// public sealed class SonicConnection { /// /// Eindeutiger Bezeichner; wird in referenziert. /// public required string Name { get; init; } /// Sonic-Domain-Name, z.B. "proalpha-test". public required string DomainName { get; init; } /// /// Sonic-Broker-/Management-URL im Sonic-Format, z.B. "tcp://dekun-painwbdet:13070". /// Der Hostname wird daraus extrahiert (für HTTP-Modus: Basis-URL, für WinRM-Modus: Zielrechner). /// public required string ConnectionUrl { get; init; } /// Benutzername für die Management-Konsole. public required string Username { get; init; } /// Passwort für die Management-Konsole. public required string Password { get; init; } /// /// Management-Modus: HttpApi (REST) oder WinRm (PowerShell Remoting). /// Standard: WinRm – da Sonic 10.x kein HTTP REST API bereitstellt. /// public SonicManagementMode ManagementMode { get; init; } = SonicManagementMode.WinRm; // --------------------------------------------------------------- // HTTP REST API (ManagementMode = HttpApi) // --------------------------------------------------------------- /// HTTP-Port der Sonic Management Console REST-API (Standard: 8080). public int ManagementHttpPort { get; init; } = 8080; /// Präfix für alle REST-API-Pfade (Standard: "/api/v1"). public string ApiBasePath { get; init; } = "/api/v1"; /// Konfigurierter Pfad zum Auflisten aller Container. Leer = automatische Erkennung. public string ContainerListPath { get; init; } = string.Empty; /// Konfigurierter Pfad zum Neustarten. Platzhalter: {domain}, {container}. public string ContainerRestartPath { get; init; } = string.Empty; /// Konfigurierter Pfad zum Stoppen. Platzhalter: {domain}, {container}. public string ContainerStopPath { get; init; } = string.Empty; /// Konfigurierter Pfad zum Starten. Platzhalter: {domain}, {container}. public string ContainerStartPath { get; init; } = string.Empty; // --------------------------------------------------------------- // WinRM / PowerShell Remoting (ManagementMode = WinRm) // --------------------------------------------------------------- /// /// WinRM-Port auf dem Zielrechner (Standard: 5985 = HTTP, 5986 = HTTPS). /// public int WinRmPort { get; init; } = 5985; /// /// PowerShell-Scriptblock zum Neustarten eines Containers. /// Platzhalter: {container} = Container-Name (nicht enkodiert), {domain} = Domain-Name. /// Beispiel für Windows-Service: "Restart-Service -Name 'CT-ZADBService' -Force" /// Beispiel für Sonic-Skript: "& 'C:\\Sonic\\bin\\stopContainer.bat' '{container}'; Start-Sleep 5; & 'C:\\Sonic\\bin\\startContainer.bat' '{container}'" /// public string WinRmRestartScript { get; init; } = string.Empty; /// /// PowerShell-Scriptblock zum Auflisten aller Container der Domain. /// Ausgabe: eine Zeile pro Container-Name. /// Beispiel: "Get-Service -DisplayName 'Sonic*' | Select-Object -ExpandProperty Name" /// public string WinRmContainerListScript { get; init; } = string.Empty; /// /// PowerShell-Scriptblock für XApi-Import. /// Platzhalter: {container}, {xapiPath}. /// public string WinRmXapiImportScript { get; init; } = string.Empty; // --------------------------------------------------------------- // Gemeinsame Einstellungen // --------------------------------------------------------------- /// Timeout in Sekunden für einzelne API-/Script-Aufrufe (Standard: 60). public int TimeoutSeconds { get; init; } = 60; /// Wartezeit in Sekunden nach einem Container-Neustart (Standard: 15). public int PostRestartDelaySeconds { get; init; } = 15; } public enum SonicManagementMode { /// HTTP REST API (wenn vom Sonic-Server bereitgestellt). HttpApi, /// /// PowerShell Remoting (WinRM) – Standard für Sonic 10.x auf Windows. /// Führt konfigurierte Scriptblöcke via Invoke-Command auf dem Sonic-Server aus. /// WinRm }