CMK_IMAGE gegen CMK_EDITION/CMK_VERSION pruefen

Anlass war die Frage, wozu CMK_IMAGE neben Edition und Version
ueberhaupt noch noetig ist. Antwort: es ist der einzige Wert, den
compose und die systemd-Units lesen. Edition und Version sind reine
Vorgaben fuer den Downloader und wirken erst ueber "image pull".
Ableiten laesst sich CMK_IMAGE nicht, weil dieselbe Version je nach
Bezugsweg voellig anders heisst - docker.io/..., registry.checkmk.com/...
oder localhost/... bei einem aus dem Tarball geladenen Image.

Daraus folgt eine Falle, die bisher nirgends auffiel: wer Edition auf
"enterprise" stellt, CMK_IMAGE aber auf dem Raw-Image stehen laesst,
betreibt weiter Raw. Genau dieser Zustand kam in der Praxis vor.

image_consistency_check vergleicht deshalb Name und Tag von CMK_IMAGE
mit Edition und Version und meldet Abweichungen - in "image status",
im allgemeinen "status" und im Einstellungsmenue direkt nach dem
Aendern von Edition oder Version, dort gleich mit dem Angebot, das
Image zu holen. Aus Tarballs geladene Images (localhost/...) gelten
als stimmig, solange Name und Tag passen; die Editionsaliase werden
beruecksichtigt, "pro" passt also zu check-mk-enterprise.

Die Beschriftungen in den Einstellungen sagen jetzt, wer was tut:
  CMK_IMAGE    VERWENDETES Image - setzt "image pull"
  CMK_EDITION  Edition (nur Vorgabe, wirkt ueber "image pull")
  CMK_VERSION  Version (nur Vorgabe, wirkt ueber "image pull")

Vier Faelle geprueft: abweichende Edition, abweichende Version,
stimmiger Zustand und aus Tarball geladenes Image.

Dokumentiert als Abschnitt 8.7 in beiden Sprachfassungen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-20 15:58:39 +02:00
co-authored by Claude Opus 5
parent ed052cd62f
commit 7a93dd5dbf
3 changed files with 164 additions and 5 deletions
+69 -3
View File
@@ -745,7 +745,51 @@ image_cmd_list() {
return 0
}
# Passt CMK_IMAGE zu CMK_EDITION/CMK_VERSION?
#
# CMK_IMAGE ist der einzige Wert, den compose und die systemd-Units
# verwenden. CMK_EDITION und CMK_VERSION sind nur Eingaben fuer den
# Downloader. Wer sie aendert, ohne anschliessend ein Image zu holen,
# betreibt weiter das alte - das faellt sonst nirgends auf.
#
# Rueckgabe: 0 = stimmig (oder nicht beurteilbar), 1 = Abweichung.
# Die Erklaerung geht nach stdout.
image_consistency_check() {
local img="${CMK_IMAGE:-}" ed="${CMK_EDITION:-}" ver="${CMK_VERSION:-}"
[ -n "$img" ] && [ -n "$ed" ] || return 0
local repo tag name
tag="${img##*:}"
repo="${img%:*}"
case "$repo" in */*) name="${repo##*/}" ;; *) name="$repo" ;; esac
# kein Tag angegeben -> nicht beurteilbar
[ "$tag" = "$img" ] && tag=""
local ed_ok="" a
for a in $(edition_aliases "$ed"); do
[ "$name" = "check-mk-$a" ] && ed_ok=1
done
local ver_ok=1
[ -n "$ver" ] && [ -n "$tag" ] && [ "$tag" != "$ver" ] && ver_ok=""
[ -n "$ed_ok" ] && [ -n "$ver_ok" ] && return 0
printf 'CMK_IMAGE passt nicht zu den eingestellten Vorgaben.\n\n'
printf ' verwendet wird : %s\n' "$img"
[ -z "$ed_ok" ] && printf ' Edition : eingestellt "%s", im Image steckt "%s"\n' \
"$ed" "${name#check-mk-}"
[ -z "$ver_ok" ] && printf ' Version : eingestellt "%s", im Image steckt "%s"\n' "$ver" "$tag"
printf '\nCompose und die systemd-Units verwenden ausschliesslich CMK_IMAGE.\n'
printf 'Edition und Version sind nur Vorgaben fuer den Downloader - sie\n'
printf 'wirken erst, wenn daraus ein Image geholt wird:\n\n'
printf ' %s image pull --edition %s --version %s\n' "$SELF" "$ed" "${ver:-<version>}"
printf ' %s up\n' "$SELF"
return 1
}
image_cmd_status() {
local msg
printf '\n%sKonfiguriertes Image (.env: CMK_IMAGE)%s\n' "$C_BLD" "$C_RST"
printf ' %s\n' "${CMK_IMAGE:-<nicht gesetzt>}"
if [ -n "${CMK_IMAGE:-}" ]; then
@@ -758,6 +802,11 @@ image_cmd_status() {
printf ' %sACHTUNG%s: kurzer Name ohne Registry - unter Podman fehleranfaellig.\n' "$C_RED" "$C_RST"
fi
fi
if ! msg="$(image_consistency_check)"; then
printf '\n'
warn "$msg"
fi
printf '\n%sVorgaben fuer den Downloader%s\n' "$C_BLD" "$C_RST"
printf ' Edition : %s -> %s\n' "${CMK_EDITION:-raw}" "$(edition_repo "${CMK_EDITION:-raw}" 2>/dev/null || echo '?')"
printf ' Version : %s\n' "${CMK_VERSION:-<nicht gesetzt>}"
@@ -1314,10 +1363,16 @@ cmd_shell() { require_cmk_running; $RUNTIME exec -it "$CMK_CONTAINER_NAME" bas
cmd_omd() { require_cmk_running; $RUNTIME exec -it "$CMK_CONTAINER_NAME" omd "$@"; }
cmd_status() {
local cmsg
printf '\n%sImage%s\n' "$C_BLD" "$C_RST"
printf ' %-24s %s\n' "${CMK_IMAGE:-<nicht gesetzt>}" \
"$(image_exists_local "${CMK_IMAGE:-}" && echo "lokal vorhanden" || echo "${C_YEL}nicht lokal vorhanden${C_RST}")"
if ! cmsg="$(image_consistency_check)"; then
printf ' %sAchtung%s: CMK_IMAGE passt nicht zu CMK_EDITION/CMK_VERSION.\n' "$C_YEL" "$C_RST"
printf ' Einzelheiten: %s image status\n' "$SELF"
fi
printf '\n%sContainer%s\n' "$C_BLD" "$C_RST"
local c
for c in "$CMK_CONTAINER_NAME" "$NPM_CONTAINER_NAME"; do
@@ -2404,9 +2459,9 @@ settings_defs() {
cat <<'EOF'
runtime|CMK_RUNTIME|choice|Container-Runtime|auto:docker:podman|1
runtime|TZ|text|Zeitzone||
image|CMK_IMAGE|text|Checkmk-Image (vollqualifiziert)||
image|CMK_EDITION|choice|Edition fuer den Downloader|raw:community:free:cloud:managed:pro:ultimate:ultimatemt:enterprise|
image|CMK_VERSION|text|Version fuer den Downloader||
image|CMK_IMAGE|text|VERWENDETES Image - setzt "image pull"||
image|CMK_EDITION|choice|Edition (nur Vorgabe, wirkt ueber "image pull")|raw:community:free:cloud:managed:pro:ultimate:ultimatemt:enterprise|
image|CMK_VERSION|text|Version (nur Vorgabe, wirkt ueber "image pull")||
image|CMK_REGISTRY|text|Registry fuer Enterprise||1
image|CMK_REGISTRY_USER|text|Registry-Benutzer||1
image|CMK_REGISTRY_PASSWORD|password|Registry-Kennwort||1
@@ -3539,6 +3594,17 @@ gui_settings_edit() {
ui_msg "Gespeichert" "$key = $([ "$typ" = password ] && echo '********' || echo "${new:-<leer>}")$hint"
# Zugangsdaten lassen sich sofort pruefen - das erspart den Umweg
case "$key" in
CMK_EDITION|CMK_VERSION)
load_env "${ENV_FILE:-$PROJECT_DIR/.env}"
local cm
if ! cm="$(image_consistency_check)"; then
if ui_yesno "Image passt nicht" \
"$cm
Image jetzt holen?"; then
gui_image_pull || true
fi
fi ;;
CMK_REGISTRY_USER|CMK_REGISTRY_PASSWORD|CMK_DOWNLOAD_USER|CMK_DOWNLOAD_PASSWORD|CMK_REGISTRY|CMK_DOWNLOAD_BASEURL)
load_env "${ENV_FILE:-$PROJECT_DIR/.env}"
if ui_yesno "Zugangsdaten pruefen" \