Fehlgeschlagenes Holen klar benennen, Ausweg aus dem halben Zustand

Gemeldet war "CMK_IMAGE wird nicht aktualisiert". Nachgemessen: das
Neu-Einlesen funktioniert - ein Unterprozess schreibt, load_env liest,
der Wert kommt an. Die eigentliche Ursache war, dass der Pull gegen die
Registry fehlschlug und CMK_IMAGE deshalb zu Recht unveraendert blieb.
Nur sagte der Assistent das nicht, sondern zeigte die generische
Meldung "passt nicht zu den Vorgaben" - was wie ein Anzeigefehler
aussieht.

  - Der Assistent wertet den Rueckgabewert jetzt aus und meldet
    "Image wurde NICHT geholt", nennt CMK_IMAGE unveraendert und die
    naechsten Schritte (image repos, Tarball-Weg, Zugangsdaten).
  - Edition und Version werden bei einem Fehlschlag nicht halb
    uebernommen: --remember greift erst nach erfolgreichem Holen.

Damit man aus einem bereits bestehenden halben Zustand herauskommt,
gibt es jetzt den umgekehrten Weg:

  image use REF --remember

leitet CMK_EDITION und CMK_VERSION aus der Image-Referenz ab
(check-mk-<edition>:<tag>). Im Menue steht hinter den drei Werten
entsprechend eine Auswahl: Assistent starten, Vorgaben an das
verwendete Image angleichen, oder nichts aendern.

Geprueft: Schreiben im Unterprozess und Neu-Einlesen, Ableiten der
Vorgaben aus dem Image (Warnung verschwindet danach), Assistent mit
absichtlich falschen Zugangsdaten meldet den Fehlschlag und laesst
die .env unangetastet.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-20 17:24:04 +02:00
co-authored by Claude Opus 5
parent f8a8c7a2a6
commit c04b3171d9
3 changed files with 104 additions and 13 deletions
+69 -13
View File
@@ -139,7 +139,9 @@ 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 vorhandenes Image als CMK_IMAGE in die .env eintragen
image use REF [--remember] vorhandenes Image als CMK_IMAGE eintragen;
mit --remember auch CMK_EDITION und CMK_VERSION
daraus ableiten
KOMMANDOS - Konfiguration
config list [--category KAT] alle Einstellungen mit aktuellen Werten
@@ -743,11 +745,34 @@ image_cmd_load() {
# image use / list / status
# ---------------------------------------------------------------------
image_cmd_use() {
[ $# -ge 1 ] || die "Image-Referenz fehlt, z.B.:
local ref="" remember=""
while [ $# -gt 0 ]; do
case "$1" in
--remember) remember=1; shift ;;
*) [ -z "$ref" ] && { ref="$1"; shift; } || die "Unbekannte Option: $1" ;;
esac
done
[ -n "$ref" ] || die "Image-Referenz fehlt, z.B.:
$SELF image use localhost/checkmk/check-mk-enterprise:2.3.0p23"
local ref="$1"
image_exists_local "$ref" || warn "'$ref' ist lokal (noch) nicht vorhanden."
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
local tag repo name ed
tag="${ref##*:}"; repo="${ref%:*}"
case "$repo" in */*) name="${repo##*/}" ;; *) name="$repo" ;; esac
ed="${name#check-mk-}"
if [ "$ed" != "$name" ] && edition_known "$ed"; then
env_set CMK_EDITION "$ed"; ok "CMK_EDITION=$ed"
else
warn "Edition liess sich aus '$ref' nicht ableiten - CMK_EDITION bleibt."
fi
if [ "$tag" != "$ref" ] && [ -n "$tag" ]; then
env_set CMK_VERSION "$tag"; ok "CMK_VERSION=$tag"
fi
fi
}
image_cmd_list() {
@@ -3661,10 +3686,11 @@ Benutzer:" "")" || return 0
fi
# --- ausfuehren ----------------------------------------------------
local rc=0
case "$src" in
registry)
ui_run "Image holen: $ed $ver" bash -c \
"cd '$PROJECT_DIR' && '$SELF' -y image pull --edition '$ed' --version '$ver' --remember ${extra[*]+${extra[*]}}" ;;
"cd '$PROJECT_DIR' && '$SELF' -y image pull --edition '$ed' --version '$ver' --remember ${extra[*]+${extra[*]}}" || rc=1 ;;
download)
case "$ver" in
*-latest|latest|*-daily)
@@ -3674,14 +3700,14 @@ z.B. 2.3.0p23 - '$ver' gibt es dort nicht."
return 0 ;;
esac
ui_run "Tarball holen: $ed $ver" bash -c \
"cd '$PROJECT_DIR' && '$SELF' -y image download --edition '$ed' --version '$ver' --remember ${extra[*]+${extra[*]}}" ;;
"cd '$PROJECT_DIR' && '$SELF' -y image download --edition '$ed' --version '$ver' --remember ${extra[*]+${extra[*]}}" || rc=1 ;;
file)
local lf
lf="$(ui_pick_file "${IMAGE_DIR:-$PROJECT_DIR/images}" '*.tar.gz')" || return 0
[ -n "$lf" ] || return 0
ui_run "Image einspielen" bash -c \
"cd '$PROJECT_DIR' && '$SELF' -y image load --file '$lf'"
ui_run "Edition/Version eintragen" bash -c \
"cd '$PROJECT_DIR' && '$SELF' -y image load --file '$lf'" || rc=1
[ "$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)
ui_run "Eintragen" bash -c \
@@ -3691,6 +3717,22 @@ z.B. 2.3.0p23 - '$ver' gibt es dort nicht."
load_env "${ENV_FILE:-$PROJECT_DIR/.env}"
# --- Ergebnis ------------------------------------------------------
if [ "$rc" != 0 ]; then
ui_msg "Image wurde NICHT geholt" \
"Der Vorgang ist fehlgeschlagen - siehe die Ausgabe davor.
CMK_IMAGE ist deshalb unveraendert:
${CMK_IMAGE:-<nicht gesetzt>}
Naechste Schritte:
* Bei der Registry: 'image repos' zeigt, welche Pfade es dort
wirklich gibt. Der geratene Pfad ist die haeufigste Ursache.
* Sonst den Tarball-Weg nehmen - fuer Enterprise ist das der
von Checkmk dokumentierte Weg.
* Zugangsdaten pruefen: '>> Zugangsdaten jetzt pruefen'"
return 0
fi
local cm
if cm="$(image_consistency_check)"; then
ui_msg "Fertig" \
@@ -3799,15 +3841,29 @@ gui_settings_edit() {
cur="$(settings_value "$key")"
if [ "$typ" = info ]; then
if ui_yesno "$key" \
local cm sel2
if cm="$(image_consistency_check)"; then
cm="Edition, Version und Image passen zusammen."
fi
sel2="$(ui_menu "$key" \
"Aktuell: ${cur:-<leer>}
Dieser Wert wird vom Assistenten gesetzt, damit Edition,
Version und das tatsaechlich verwendete Image zusammenpassen.
$cm
Assistent jetzt starten?"; then
gui_image_wizard || true
fi
Diese drei Werte setzt der Assistent gemeinsam." \
wizard "Assistent starten (Image beschaffen)" \
angleichen "Vorgaben an das VERWENDETE Image angleichen" \
nichts "Nichts aendern")" || { load_env "${ENV_FILE:-$PROJECT_DIR/.env}"; return 0; }
case "$sel2" in
wizard) gui_image_wizard || true ;;
angleichen)
if [ -z "${CMK_IMAGE:-}" ]; then
ui_msg "Nicht moeglich" "CMK_IMAGE ist nicht gesetzt."
else
ui_run "Vorgaben angleichen" bash -c \
"cd '$PROJECT_DIR' && '$SELF' -y image use '$CMK_IMAGE' --remember"
fi ;;
esac
load_env "${ENV_FILE:-$PROJECT_DIR/.env}"
return 0
fi