"Nur eintragen" setzt jetzt auch CMK_IMAGE

Berechtigter Einwand: wer Edition und Version waehlt und "nichts holen"
sagt, will das Image SETZEN, nicht bloss zwei Vorgaben notieren. Mein
Entwurf trennte das kuenstlich - und hinterliess genau dadurch den
Zustand, den die Abweichungswarnung dann anmahnte. Das war die Ursache
des Hin und Her.

Die Referenz laesst sich aus Edition und Version bilden:
    enterprise 2.4.0p9 -> registry.checkmk.com/enterprise/check-mk-enterprise:2.4.0p9
    raw        2.4.0p9 -> docker.io/checkmk/check-mk-raw:2.4.0p9
Nur bei einem aus dem Tarball geladenen Image geht das nicht, da kommt
der Name aus dem Archiv.

Deshalb:
  image use --edition E --version V
bildet die Referenz und traegt CMK_IMAGE, CMK_EDITION und CMK_VERSION
ein, ohne irgendetwas herunterzuladen. Geholt wird beim naechsten "up"
durch die Runtime selbst.

Im Assistenten heisst der Weg jetzt "Nur eintragen - geholt wird beim
naechsten Start" und nutzt genau das. Damit setzen ALLE vier Wege
CMK_IMAGE; sie unterscheiden sich nur darin, ob dabei schon etwas
geholt wird. Die drei Werte bleiben dadurch von selbst stimmig, und die
Abweichungswarnung tritt im normalen Betrieb nicht mehr auf.

Geprueft: das Kommando und der Assistentenweg setzen alle drei Werte,
danach meldet "image status" keine Abweichung mehr.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-20 18:13:57 +02:00
co-authored by Claude Opus 5
parent c1371da7aa
commit 9d8a9ecf71
3 changed files with 99 additions and 32 deletions
+50 -21
View File
@@ -140,9 +140,13 @@ KOMMANDOS - Checkmk-Image beschaffen
--keep Tarball nach dem Einspielen behalten
--remember CMK_EDITION und CMK_VERSION mit in die .env schreiben
image load --file F bereits heruntergeladenen Tarball einspielen
image use REF [--remember] vorhandenes Image als CMK_IMAGE eintragen;
mit --remember auch CMK_EDITION und CMK_VERSION
daraus ableiten
image use REF [--remember] Image als CMK_IMAGE eintragen; mit
--remember auch CMK_EDITION und CMK_VERSION daraus
ableiten
image use --edition E --version V
umgekehrt: die Referenz aus Edition und Version
bilden und eintragen, OHNE etwas herunterzuladen.
Geholt wird sie beim naechsten "up".
KOMMANDOS - Konfiguration
config list [--category KAT] alle Einstellungen mit aktuellen Werten
@@ -775,21 +779,39 @@ image_cmd_load() {
# image use / list / status
# ---------------------------------------------------------------------
image_cmd_use() {
local ref="" remember=""
local ref="" remember="" edition="" version=""
while [ $# -gt 0 ]; do
case "$1" in
--remember) remember=1; shift ;;
*) [ -z "$ref" ] && { ref="$1"; shift; } || die "Unbekannte Option: $1" ;;
--edition) edition="$2"; shift 2 ;;
--version) version="$2"; shift 2 ;;
*) if [ -z "$ref" ]; then ref="$1"; shift; else die "Unbekannte Option: $1"; fi ;;
esac
done
[ -n "$ref" ] || die "Image-Referenz fehlt, z.B.:
$SELF image use localhost/checkmk/check-mk-enterprise:2.3.0p23"
image_exists_local "$ref" || warn "'$ref' ist lokal (noch) nicht vorhanden."
# Ohne fertige Referenz laesst sie sich aus Edition und Version
# bilden. Dafuer muss nichts heruntergeladen werden - die Runtime
# holt das Image beim naechsten Start selbst.
if [ -z "$ref" ] && [ -n "$edition" ]; then
edition_known "$edition" || die "Unbekannte Edition '$edition'."
[ -n "$version" ] || die "--version fehlt."
ref="$(edition_repo "$edition"):$version"
fi
[ -n "$ref" ] || die "Image-Referenz fehlt. Entweder direkt:
$SELF image use localhost/checkmk/check-mk-enterprise:2.3.0p23
oder aus Edition und Version gebildet:
$SELF image use --edition enterprise --version 2.4.0p9"
image_exists_local "$ref" || log "'$ref' ist lokal noch nicht vorhanden - wird beim naechsten '$SELF up' geholt."
image_set_env "$ref"
# Edition und Version aus der Referenz ableiten, damit die Vorgaben
# nicht dauerhaft etwas anderes behaupten als das benutzte Image.
if [ -n "$remember" ]; then
# Edition und Version mitfuehren, damit die Vorgaben nicht dauerhaft
# etwas anderes behaupten als das benutzte Image.
if [ -n "$edition" ]; then
env_set CMK_EDITION "$edition"; ok "CMK_EDITION=$edition"
env_set CMK_VERSION "$version"; ok "CMK_VERSION=$version"
elif [ -n "$remember" ]; then
local tag repo name ed
tag="${ref##*:}"; repo="${ref%:*}"
case "$repo" in */*) name="${repo##*/}" ;; *) name="$repo" ;; esac
@@ -4039,11 +4061,14 @@ rechts der Name auf checkmk.com." \
src="$(ui_menu "Image beschaffen (3/3) - Bezugsweg" \
"$ed $ver
Woher soll das Image kommen?" \
Woher soll das Image kommen?
Alle vier Wege tragen CMK_IMAGE ein. Nur der letzte
laedt dabei nichts herunter." \
registry "Registry holen ($reg_state)" \
download "Tarball herunterladen ($dl_state)" \
file "Vorhandene Tarball-Datei einspielen" \
setonly "Nichts holen, nur Edition/Version eintragen")" || return 0
setonly "Nur eintragen - geholt wird beim naechsten Start")" || return 0
# --- Zugangsdaten nur erfragen, wenn sie wirklich fehlen -----------
local -a extra=()
@@ -4096,8 +4121,10 @@ z.B. 2.3.0p23 - '$ver' gibt es dort nicht."
[ "$rc" = 0 ] && ui_run "Edition/Version eintragen" bash -c \
"cd '$PROJECT_DIR' && '$SELF' -y config set CMK_EDITION '$ed' && '$SELF' -y config set CMK_VERSION '$ver'" ;;
setonly)
# Setzt Edition, Version UND das daraus gebildete Image.
# Heruntergeladen wird nichts - das erledigt "up" bei Bedarf.
ui_run "Eintragen" bash -c \
"cd '$PROJECT_DIR' && '$SELF' -y config set CMK_EDITION '$ed' && '$SELF' -y config set CMK_VERSION '$ver'" ;;
"cd '$PROJECT_DIR' && '$SELF' -y image use --edition '$ed' --version '$ver'" || rc=1 ;;
esac
load_env "${ENV_FILE:-$PROJECT_DIR/.env}"
@@ -4119,16 +4146,18 @@ Naechste Schritte:
return 0
fi
if [ "$src" = setonly ]; then
if [ "$src" = setonly ] && [ "$rc" = 0 ]; then
ui_msg "Eingetragen" \
"Edition und Version sind gespeichert:
${CMK_EDITION:-?} / ${CMK_VERSION:-?}
Es wurde KEIN Image geholt - verwendet wird weiterhin:
"Verwendet wird jetzt:
${CMK_IMAGE:-<nicht gesetzt>}
Zum Holen den Assistenten erneut starten und dort
'Registry holen' oder 'Tarball herunterladen' waehlen."
Heruntergeladen wurde nichts - das holt die Runtime beim
naechsten 'Stack steuern -> Stack starten' selbst nach.
Braucht die Registry eine Anmeldung (Enterprise), muss die
einmal erfolgt sein:
podman login ${CMK_REGISTRY:-registry.checkmk.com}
Das erledigt auch der Weg 'Registry holen'."
return 0
fi