No description
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Lars Oste a55d5fe821
All checks were successful
CI / build (push) Successful in 53s
Release / release (push) Successful in 37s
Die Forge heisst git.flexfamily.de
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>
2026-10-28 14:30:27 +01:00
.forgejo/workflows Die Forge heisst git.flexfamily.de 2026-10-28 14:30:27 +01:00
.github feat: initiales Plugin fuer vSphere-Baseimage-Agent-Update 2026-07-21 21:46:25 +02:00
CheckmkPlugin.VSphereBaseImage Update-Kanal zeigt auf die eigene Forge 2026-10-28 14:13:13 +01:00
deps chore: Umzug nach github.com/LHP542, Arbeitsgruppe 5424 IT-Basis-Dienste 2026-08-22 17:54:43 +02:00
RELEASE_NOTES docs: Release-Notes zum Umzug 2026-08-22 17:55:52 +02:00
.gitignore feat: initiales Plugin fuer vSphere-Baseimage-Agent-Update 2026-07-21 21:46:25 +02:00
Checkmk-Plugin-VSphereBaseImage.slnx feat: initiales Plugin fuer vSphere-Baseimage-Agent-Update 2026-07-21 21:46:25 +02:00
CLAUDE.md chore: Umzug nach github.com/LHP542, Arbeitsgruppe 5424 IT-Basis-Dienste 2026-08-22 17:54:43 +02:00
Directory.Build.props chore: Umzug nach github.com/LHP542, Arbeitsgruppe 5424 IT-Basis-Dienste 2026-08-22 17:54:43 +02:00
Directory.Packages.props build: Pakete auf den aktuellen Stand 2026-08-26 00:16:09 +02:00
README.md chore: Umzug nach github.com/LHP542, Arbeitsgruppe 5424 IT-Basis-Dienste 2026-08-22 17:54:43 +02:00

Checkmk-Plugin-VSphereBaseImage

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 automatische Aktualisierung des Checkmk-Agents in vSphere-CTX-Baseimages übernimmt.

Problem

In der Arbeitsgruppe werden VMs wie CTX??..??00 (Baseimages) in der Nacht per vSphere neu ausgerollt — die abgeleiteten 01-VMs bekommen einen frischen Zustand aus dem Baseimage. Updates, die tagsüber im 01 durchgeführt werden, gehen dabei verloren. Der Checkmk-Agent muss also im Baseimage selbst aktualisiert werden, und das Baseimage ist normalerweise ausgeschaltet.

Manuell heißt das: pro Baseimage einloggen ins vSphere, Power-On, warten, RDP/Remote-Update, Shutdown — 5 Minuten Klickerei pro VM, mal 20+ Baseimages.

Lösung

Plugin blendet einen eigenen Tab „vSphere Baseimages" im Cockpit ein:

  1. Verbindet sich per REST-API mit dem vCenter (v7+, Session-Auth).
  2. Listet alle VMs mit Filter (Regex oder Include-Liste).
  3. Batch-Button startet für jede sichtbare VM sequenziell:
    • Power-On
    • Warten bis VMware-Tools „Running"
    • Warten bis Guest per Ping erreichbar
    • Agent-Update via IAgentUpdater (aus dem AgentUpdater-Plugin)
    • Guest-Shutdown
    • Warten bis Power-Off
    • → nächste VM
  4. Fehler bei einer VM brechen die Batch nicht ab.

Voraussetzungen

  • Windows (DPAPI, Ping, Remote-PowerShell via Plugin 1).
  • Checkmk Cockpit ≥ v1.7.0 (Plugin-System).
  • Checkmk-Plugin-AgentUpdater im gleichen plugins/-Ordner — Plugin 2 nutzt dessen IAgentUpdater für das eigentliche Update. Ohne Plugin 1: Tab lädt nicht (Log-Meldung).
  • vCenter-Konto mit Berechtigungen für VM-Power-Ops und Guest-Ops.
  • Admin-Konto auf den Baseimage-VMs mit WinRM-Rechten.

Installation

  1. ZIP des neuesten Releases herunterladen und entpacken.
  2. CheckmkPlugin.VSphereBaseImage.dll in plugins/ neben deiner Checkmk.App.exe legen (Ordner ggf. anlegen).
  3. Cockpit starten. Neuer Tab „vSphere Baseimages" erscheint rechts.

Einrichtung

vCenter-Einstellungen (Button im Tab):

  • URL: z. B. https://vc.lhp.intern
  • Anmeldename: dein vCenter-Konto (user@vsphere.local oder DOMAENE\User). Weicht typischerweise vom Windows-Login ab — deshalb keine Vorbelegung.
  • Passwort: DPAPI-verschlüsselt user-lokal gespeichert.
  • Zertifikatsfehler ignorieren: nur bei self-signed vCenter-Cert.

Batch-Skript & Agent-Share (Button im Tab): Analog zum AgentUpdater-Plugin — Share mit dem aktuellen MSI, PowerShell-Skript-Vorlage. Wird auf jeder Baseimage-VM während des Batch ausgeführt.

VM-Filter verwalten: Klick auf „Filter verwalten…" öffnet die filter.json im OS-Editor (ein GUI-Editor kommt in einer späteren Version). Struktur:

{
  "Filters": [
    {
      "Name": "Alle Baseimages",
      "NameRegex": "^CTX\\d+.*00$",
      "IncludeNames": []
    }
  ],
  "ActiveFilterName": "Alle Baseimages"
}

Ablauf beim Batch-Start

  1. Klick auf „Batch starten (N VMs im Filter …)".
  2. Admin-Anmeldung-Dialog: der Nutzer für die Remote-PowerShell-Sessions auf den Baseimage-Guest-VMs. Nur im Prozess-Memory, nicht gespeichert.
  3. Fortschritt im Log-Panel unten: pro VM detailliert (Power-On → Tools → Ping → Update → Shutdown).
  4. Ergebnis-Summe: „Batch beendet: 18/20 erfolgreich."
  5. Fehler stehen im Log — meist Timeout beim Tools-Start oder WinRM-Problem.

Wo liegen meine Daten

Was Wo
vCenter-URL/User (Passwort DPAPI-verschlüsselt) %APPDATA%\Kroste\Checkmk\plugins\kroste.checkmk.vsphere-baseimage\credentials.json
Agent-Share + Skript .../batch-settings.json
VM-Filter .../filter.json

Sicherheit

  • vCenter-Passwort: DPAPI (CurrentUser), user-lokal — nur du kannst es entschlüsseln, nicht andere User am gleichen Rechner.
  • Admin-Passwort für Remote-PowerShell: NICHT persistent, nur pro Batch-Lauf im Memory.
  • Skript-Vorlage/Passwörter werden nie ins Log geschrieben.

Arbeitsgruppe

5424 IT-Basis-Dienste (LHP)