Dynamische Provisionierung von Enginsight Pulsar-Hosts basierend auf einem Master-Image

Diese Anleitung beschreibt, wie Sie Enginsight Pulsar auf einem Master-Image vorbereiten und anschließend dynamisch Konfigurationen für eine beliebige Anzahl von Hosts erstellen. Ziel ist es, flexibel und automatisiert Hosts (z. B. VDI-VMs, Server oder andere Systeme) bereitzustellen, ohne für jeden einzelnen Host eine manuelle Installation durchführen zu müssen.

In vielen Szenarien, etwa beim Einsatz virtueller Desktops (VDI) oder beim schnellen Ausrollen neuer Server, ist es notwendig, eine große Zahl an Hosts auf Basis eines Master-Images mit Pulsar auszustatten. Mit der hier beschriebenen Vorgehensweise können Sie Hosts dynamisch provisionieren. Die Konfiguration erfolgt dabei automatisch, sodass lediglich Hostnamen und Zugangsdaten benötigt werden.

Anleitung zur Provisionierung

  1. Pulsar auf dem Master-Image installieren
    Installieren Sie Enginsight Pulsar wie gewohnt auf Ihrem Master-Image.
  2. Dienste stoppen
    Stoppen Sie die Pulsar-Dienste, damit sie beim Erstellen des Images nicht automatisch starten:
    Stop-Service "Enginsight Pulsar"
    Stop-Service "Enginsight Supervisor"
  3. Starttyp der Dienste auf „Manuell“ setzen
    Stellen Sie sicher, dass die Dienste beim Image-Start nicht automatisch starten:
    Set-Service -Name "Enginsight Pulsar" -StartupType Manual

    Set-Service -Name "Enginsight Supervisor" -StartupType Manual
  4. Master-Host aus der Plattform löschen
    Der bei der Installation automatisch angelegte Host für das Master-Image muss in der Enginsight-Plattform gelöscht werden, damit keine doppelten Einträge entstehen.
  5. Konfigurationsdatei anpassen (optional)
    Falls erforderlich, nehmen Sie Anpassungen an der json vor, z. B. wie in der Knowledgebase unter Pulsar-Agent → Erweiterte Einstellungen beschrieben:
    C:\Programme\Enginsight\Pulsar\config.json
  6. Sicherungskopie der config.json erstellen
    Da die json später bei der Provisionierung überschrieben wird, speichern Sie im vorhinein  unbedingt eine Kopie ab!:
    Copy-Item "C:\Programme\Enginsight\Pulsar\config.json" `

    "C:\Programme\Enginsight\Pulsar\config.json.bak"

HINWEIS
Falls etwas schiefgeht, stellen Sie die Datei aus dieser Sicherung wieder her und starten Sie das Provisionierungsskript erneut.

7. Hostliste erstellen
Erstellen Sie eine Textdatei mit den gewünschten Hostnamen – ein Hostname pro Zeile.

Beispiel:

(C:\Hosts\hosts.txt):
VDI-Client-01
VDI-Client-02
VDI-Client-03

WICHTIG
Die Hostnamen müssen exakt den späteren VM-Namen entsprechen. Die Standardzuordnung erfolgt über $env:computername. 

8. Provisionierungsskript ablegen
Speichern Sie das im Folgenden bereitgestellte Skript als:

C:\Programme\Enginsight\Pulsar\provision.ps1
param ($hosts, $accessKeyId, $accessKeySecret, $outFolder=".")

if ($hosts -eq $null) {
throw "Must provide a file (-hosts) with line-by-line hostnames to create configs for"
}

if (($accessKeyId -eq $null) -or ($accessKeySecret -eq $null)) {
throw "Must provide credentials (-accessKeyId, -accessKeySecret) suitable for Pulsar installation"
}

Write-Host "Creating configs for hosts from ${hosts} in `"${outFolder}`", using existing config.json as template"

if (-not (Test-Path -Path $outFolder)) {
Write-Host "${outFolder} does not exist, creating it"
try {
New-Item -ItemType Directory -Path $outFolder | Out-Null
} catch {
throw "Failed to create output folder`n$_"
}
}

try {
$configTemplate = Get-Content -Raw -Path "C:\Program Files\Enginsight\Pulsar\config.json" | ConvertFrom-Json
} catch {
throw "Failed to read C:\Program Files\Enginsight\Pulsar\config.json - is Pulsar installed properly?`n$_"
}

$args = "-install","-accessKeyId",$accessKeyId,"-accessKeySecret",$accessKeySecret,"-license",$configTemplate.license,
"-api",$configTemplate.api.url
if ($configTemplate.api.proxy -ne "") {
$args += "-proxy",$configTemplate.api.proxy,"-noProxy",$configTemplate.api.noProxy
}

foreach($hostname in Get-Content $hosts) {
$hostname = $hostname.Trim()
if ($hostname -eq "") {
continue
}

$outFile = Join-Path -Path ${outFolder} -ChildPath "config_${hostname}.json"

if (Test-Path -Path $outFile) {
Write-Error "Configuration for host ${hostname} already exists at ${outFile}, skipping"
continue
}

$proxyParams = ""

Write-Host "Creating config for host ${hostname}"

& "C:\Program Files\Enginsight\Pulsar\ngs-pulsar-amd64.exe" @args
if (-not ($?)) {
throw "Failed to create config for ${hostname}"
}

try {
$config = Get-Content -Raw -Path "C:\Program Files\Enginsight\Pulsar\config.json" | ConvertFrom-Json
$config.override = $configTemplate.override
if ($configTemplate.tieredTransactionLog -ne $null) {
$config.tieredTransactionLog = $configTemplate.tieredTransactionLog
}
} catch {
throw "Failed to read newly created config file`n$_"
}

try {
       $config | ConvertTo-Json -Depth 4 | Set-Content -Path $outFile -Encoding UTF8NoBOM
Write-Host "Successfully created config for ${hostname} at ${outFile}"
} catch {
throw "Failed to write config for ${hostname} to ${outFile}`n$_"
}
}

9. Ausführung des Skripts

Führen Sie das Skript mit Ihren Parametern mit dem folgenden Befehl aus: 

& "C:\Program Files\Enginsight\Pulsar\provision.ps1" -hosts "<Pfad>\<zur>\<Datei>\<mit>\Hostnamen.txt" -accessKeyId "..." -accessKeySecret "..."

WARNUNG
Die Credentials können nicht aus der existierenden config.json übernommen werden. Diese gelten nur für den bereits erstellten Master-Image-Host und sind nicht berechtigt, weitere Hosts anzulegen! Credentials können aus dem Installationsskript aus der Plattform herauskopiert oder separat als „Installer Credentials“ in Einstellungen -> Access Keys angelegt werden.

Optional können Sie mit -outFolder <Pfad> einen Ausgabeordner angeben. 

10. Start der VMs
 Zum Abschluss benötigen die neuen VMs ein Startskript, das die korrekte config.json in das Pulsar-Verzeichnis kopiert und die Dienste wieder aktiviert. Dieses Skript kann z. B. per GPO verteilt werden:

cp "<Pfad>\<zu>\config_${env:computername}.json" "C:\Program Files\Enginsight\Pulsar\config.json"
Start-Service "Enginsight Pulsar"

Set-Service -Name "Enginsight Pulsar" -StartupType Automatic
Set-Service -Name "Enginsight Supervisor" -StartupType Automatic

 

Folgen Sie der Anleitung, damit jede VM automatisch eine individuelle Pulsar-Konfigurationerhält. Die Dienste werden korrekt gestartet und stehen dauerhaft bereit.