diff --git a/README.md b/README.md index edcc821..c197f2e 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/README_en.md b/README_en.md index 357d47b..e69e4f0 100644 --- a/README_en.md +++ b/README_en.md @@ -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 diff --git a/scripts/cmk-manage.sh b/scripts/cmk-manage.sh index ef54e7a..d8a7137 100755 --- a/scripts/cmk-manage.sh +++ b/scripts/cmk-manage.sh @@ -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:-} + +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:-} -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