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
+18
View File
@@ -943,6 +943,24 @@ Compose und die systemd-Units verwenden ausschliesslich CMK_IMAGE.
Aus einem Tarball geladene Images (`localhost/…`) gelten dabei als stimmig,
solange Name und Tag passen.
**Wenn das Holen fehlschlägt**, bleibt `CMK_IMAGE` unverändert – das ist
Absicht, denn das alte Image läuft ja weiter. Der Assistent sagt das dann auch
ausdrücklich („Image wurde NICHT geholt") statt nur auf die Abweichung
hinzuweisen. Es bleibt trotzdem ein Zustand, in dem Edition und Version etwas
anderes behaupten als das benutzte Image. Dafür gibt es zwei Auswege – beide
im Menü unter den drei Werten:
| Weg | Wirkung |
|---|---|
| **Assistent starten** | holt das gewünschte Image; danach passt alles |
| **Vorgaben an das verwendete Image angleichen** | schreibt Edition und Version aus `CMK_IMAGE` zurück – die Warnung verschwindet, es ändert sich nichts am Betrieb |
Auf der Kommandozeile ist das zweite:
```bash
./scripts/cmk-manage.sh image use "$CMK_IMAGE" --remember
```
### 8.8 Registry-Pfad herausfinden
„Login Succeeded" heisst noch nicht, dass der Pfad stimmt. Meldet der Pull
+17
View File
@@ -947,6 +947,23 @@ the edition or version is changed:
the image contains …".) Images loaded from a tarball (`localhost/…`) count as
consistent as long as name and tag match.
**If fetching fails**, `CMK_IMAGE` stays unchanged – deliberately, because the
old image keeps running. The wizard then says so explicitly ("Image wurde NICHT
geholt") instead of merely pointing at the mismatch. It still leaves a state in
which edition and version claim something different from the image in use.
There are two ways out, both in the menu underneath the three values:
| Route | Effect |
|---|---|
| **Assistent starten** (run the wizard) | fetches the wanted image; everything matches afterwards |
| **Vorgaben an das verwendete Image angleichen** (align the defaults) | writes edition and version back from `CMK_IMAGE` – the warning disappears, nothing about the running setup changes |
On the command line the second one is:
```bash
./scripts/cmk-manage.sh image use "$CMK_IMAGE" --remember
```
### 8.8 Finding the registry path
"Login Succeeded" does not yet mean the path is right. If the pull reports
+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