From 9d8a9ecf7169eebd4c142567f2e35b3c0d5d7dd2 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Sun, 20 Sep 2026 18:13:57 +0200 Subject: [PATCH] "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) --- README.md | 30 +++++++++++++++--- README_en.md | 30 ++++++++++++++---- scripts/cmk-manage.sh | 71 ++++++++++++++++++++++++++++++------------- 3 files changed, 99 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index a81703d..a3e618e 100644 --- a/README.md +++ b/README.md @@ -913,13 +913,33 @@ registry.checkmk.com/enterprise/check-mk-enterprise:2.3.0p9 (Registry) localhost/checkmk/check-mk-enterprise:2.3.0p9 (aus Tarball geladen) ``` -Deshalb hält `CMK_IMAGE` fest, was **wirklich vorhanden ist**, und wird von -`image pull`, `image download`, `image load` und `image use` gesetzt – von Hand -muss man dort normalerweise nichts eintragen. In der Oberfläche sind die drei -Werte deshalb gar nicht einzeln editierbar: sie werden vom Assistenten -gemeinsam gesetzt, damit sie nicht auseinanderlaufen. Auf der Kommandozeile +Deshalb hält `CMK_IMAGE` fest, was **wirklich gilt**. Gesetzt wird der Wert von +`image pull`, `image download`, `image load` und `image use` – von Hand muss man +dort nichts eintragen. In der Oberfläche sind die drei Werte deshalb nicht +einzeln editierbar: der Assistent setzt sie gemeinsam. Auf der Kommandozeile bleiben sie einzeln setzbar (`config set …`). +**Nur eintragen, ohne etwas herunterzuladen.** Aus Edition und Version lässt +sich die Referenz bilden – ein Download ist dafür nicht nötig: + +```bash +./scripts/cmk-manage.sh image use --edition enterprise --version 2.4.0p9 +# -> CMK_IMAGE=registry.checkmk.com/enterprise/check-mk-enterprise:2.4.0p9 +# CMK_EDITION=enterprise +# CMK_VERSION=2.4.0p9 +``` + +Das Image selbst holt die Runtime beim nächsten `up`. Im Assistenten heißt +dieser Weg **„Nur eintragen – geholt wird beim nächsten Start"**. Braucht die +Registry eine Anmeldung (Enterprise), muss die einmal erfolgt sein – entweder +über den Weg „Registry holen" oder mit +`podman login registry.checkmk.com`. + +> **Alle vier Wege des Assistenten setzen `CMK_IMAGE`** – sie unterscheiden +> sich nur darin, ob dabei schon etwas geholt wird. Deshalb bleiben die drei +> Werte von selbst stimmig, und die Abweichungswarnung tritt im normalen +> Betrieb gar nicht mehr auf. + Auf der Kommandozeile übernehmen `image pull` und `image download` mit `--remember` die Edition und Version gleich mit in die `.env`: diff --git a/README_en.md b/README_en.md index 19a5d02..183cc6e 100644 --- a/README_en.md +++ b/README_en.md @@ -918,12 +918,30 @@ registry.checkmk.com/enterprise/check-mk-enterprise:2.3.0p9 (registry) localhost/checkmk/check-mk-enterprise:2.3.0p9 (loaded from a tarball) ``` -So `CMK_IMAGE` records what is **actually there**, and it is written by -`image pull`, `image download`, `image load` and `image use` – you normally -never have to type anything there by hand. In the interface the three values -are therefore not editable individually: the wizard sets them together so they -cannot drift apart. On the command line they remain individually settable -(`config set …`). +So `CMK_IMAGE` records what **actually applies**. It is written by +`image pull`, `image download`, `image load` and `image use` – you never have to +type anything there by hand. In the interface the three values are therefore not +editable individually: the wizard sets them together. On the command line they +remain individually settable (`config set …`). + +**Recording it without downloading anything.** The reference can be built from +edition and version – no download required: + +```bash +./scripts/cmk-manage.sh image use --edition enterprise --version 2.4.0p9 +# -> CMK_IMAGE=registry.checkmk.com/enterprise/check-mk-enterprise:2.4.0p9 +# CMK_EDITION=enterprise +# CMK_VERSION=2.4.0p9 +``` + +The image itself is fetched by the runtime on the next `up`. In the wizard this +route is called **"Nur eintragen – geholt wird beim naechsten Start"**. If the +registry needs a login (Enterprise), that has to have happened once – either via +the "Registry holen" route or with `podman login registry.checkmk.com`. + +> **All four wizard routes set `CMK_IMAGE`** – they only differ in whether +> something is fetched right away. The three values therefore stay consistent by +> themselves, and the mismatch warning no longer appears in normal operation. On the command line, `image pull` and `image download` take `--remember` to store the edition and version in `.env` as well: diff --git a/scripts/cmk-manage.sh b/scripts/cmk-manage.sh index 1129879..9a720d8 100755 --- a/scripts/cmk-manage.sh +++ b/scripts/cmk-manage.sh @@ -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:-} -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