- C# 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Lars am 28.10.2026: "ab jetzt git.flexfamily.de gehoeren die repos". Grund, und das ist der eigentliche Punkt: **git.flexfamily.cloud ist in Lars' Firmennetz gesperrt**, .de nicht. Beide Namen zeigen auf dieselbe Instanz und haben ein Zertifikat -- vom Arbeitsplatz aus waere die Forge unter dem alten Namen aber nicht erreichbar. Umgestellt sind damit: ROOT_URL, DOMAIN und SSH_DOMAIN der Instanz, alle Git-Remotes, die Workflows und jedes Programm, das dort etwas abholt. Ohne den Grund wirkt das wie Geschmack, und der naechste, der eine Adresse schreibt, nimmt wieder die falsche. Er steht im allgemeinen Skill und in RUNNER.md. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> |
||
| .forgejo/workflows | ||
| .github | ||
| CheckmkPlugin.AgentUpdater | ||
| deps | ||
| RELEASE_NOTES | ||
| .gitignore | ||
| Checkmk-Plugin-AgentUpdater.slnx | ||
| Directory.Build.props | ||
| Directory.Packages.props | ||
| README.md | ||
Checkmk-Plugin-AgentUpdater
Projekt der Arbeitsgruppe 5424 IT-Basis-Dienste der Landeshauptstadt Potsdam. Alle dienstlichen Repos liegen in der GitHub-Organisation LHP542.
Plugin für das Checkmk Cockpit, das die Client-Aktualisierung (Checkmk-Agent-Update auf entfernten Windows-Hosts per Remote-PowerShell) als Kontextmenü-Eintrag bereitstellt.
Ohne dieses Plugin gibt es im Cockpit ab v1.7.0 den Menüpunkt „Client aktualisieren…" nicht mehr — nur wer das Plugin installiert hat, sieht ihn.
Installation
- Neuestes ZIP von den Releases
herunterladen (
Checkmk-Plugin-AgentUpdater-x.y.z.zip). - Entpacken. Die enthaltene
CheckmkPlugin.AgentUpdater.dllin den Ordnerplugins/neben deinerCheckmk.App.exelegen. Ordner ggf. anlegen. - Cockpit starten. Im Log siehst du unter Info:
Plugin registriert: Client-Aktualisierung 1.0.0 (kroste.checkmk.agent-updater).
Der Menüpunkt „Client aktualisieren…" erscheint jetzt im Rechtsklick-Menü der Service-Grid, der Baumansicht und der Hosts-Liste.
Konfiguration
Beim ersten Aufruf verwendet das Plugin Defaults:
- Agent-Share:
\\samba01\542$\5424_IT-Basis-Dienste\CheckMK— muss das aktuelle MSI enthalten. Das Plugin nimmt automatisch die zuletzt geänderte*.msiaus dem Ordner. - PowerShell-Skript-Vorlage: läuft auf dem Zielhost, macht Deinstall →
Install → Register. Enthält den Register-Befehl inkl.
--trust-certund Passwort (Klartext).
Beide Werte werden nach dem ersten Start unter
%APPDATA%\Kroste\Checkmk\plugins\kroste.checkmk.agent-updater\settings.json
abgelegt und können dort per Editor geändert werden. (Eine In-App-Settings-UI
gibt's noch nicht — kommt in einer späteren Version.)
Ablauf beim Update
- Rechtsklick auf einen Service oder Host → „Client aktualisieren…".
- Credential-Dialog: Admin-Anmeldedaten (
DOMAENE\Benutzer+ Passwort) für die Remote-Session. WinRM am Zielhost muss aktiv sein — in der DMZ typischerweise geblockt. - Fortschritts-Fenster: das Plugin öffnet eine PSSession zum Host, kopiert
den Installer per
Copy-Item -ToSession(umgeht Double-Hop), führt die Skript-Vorlage aus (Deinstall/Install/Register), meldet Zeile für Zeile die PowerShell-Ausgabe. - Erfolg wird am Exit-Code festgemacht, nicht an stderr — native Tools wie
msiexecodercmk-agent-ctlschreiben Infos manchmal nach stderr.
Wichtige Details (aus schmerzhaften Live-Tests gelernt)
- Der Register-Befehl braucht
--trust-cert, sonst hängt sichcmk-agent-ctl registerin einer interaktiven Zertifikatsabfrage auf. Start-Process msiexec.exe -Waitmeldet Nicht-Null-ExitCodes nicht als Fehler. Die Default-Vorlage nutzt-PassThru+$proc.ExitCode-Prüfung.
Sicherheit
- Admin-Passwort wird nur im Prozess-Memory gehalten, niemals ins Log geschrieben.
- Das temporäre
.ps1-Skript wird nach der Ausführung gelöscht. - Die Skript-Vorlage enthält im Register-Befehl das Agent-Register-Passwort im Klartext (typischer Automation-User) — das ist bewusst so, weil der User die Vorlage sowieso lokal editiert.
Contract für andere Plugins
Das Plugin exportiert IAgentUpdater (aus Checkmk.PluginContracts.Services)
in den DI-Container. Andere Plugins können es via
context.Services.GetRequiredService<IAgentUpdater>() konsumieren — z. B. das
vSphere-Baseimage-Plugin, das das Update in einer Batch-Schleife über mehrere
Baseimage-VMs fährt.
Voraussetzungen
- Windows (WinRM/PowerShell-Remoting ist Windows-only).
- Cockpit ≥ v1.7.0 (ab da ist das Plugin-System im Cockpit-Kern).
- WinRM am Zielhost aktiv (
winrm quickconfig). - Admin-Rechte auf dem Zielhost.
Repo-Layout
Checkmk-Plugin-AgentUpdater/
├── CheckmkPlugin.AgentUpdater/
│ ├── Contributions/ # IContextMenuContribution
│ ├── Services/ # AgentUpdaterService + PluginSettings
│ ├── UI/ # ChromeWindow + TitleBar (dupliziert aus Cockpit)
│ ├── Views/ # AgentUpdateWindow + CredentialDialog
│ ├── Plugin.cs # IPlugin-Entry-Point
│ └── CheckmkPlugin.AgentUpdater.csproj
├── deps/
│ └── Checkmk.PluginContracts.dll # committed, siehe deps/README.md
├── .github/workflows/ # CI + Release
├── Directory.Build.props
├── Directory.Packages.props
└── Checkmk-Plugin-AgentUpdater.slnx
Arbeitsgruppe
5424 IT-Basis-Dienste (LHP)