"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
+25 -5
View File
@@ -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) localhost/checkmk/check-mk-enterprise:2.3.0p9 (aus Tarball geladen)
``` ```
Deshalb hält `CMK_IMAGE` fest, was **wirklich vorhanden ist**, und wird von Deshalb hält `CMK_IMAGE` fest, was **wirklich gilt**. Gesetzt wird der Wert von
`image pull`, `image download`, `image load` und `image use` gesetzt – von Hand `image pull`, `image download`, `image load` und `image use` – von Hand muss man
muss man dort normalerweise nichts eintragen. In der Oberfläche sind die drei dort nichts eintragen. In der Oberfläche sind die drei Werte deshalb nicht
Werte deshalb gar nicht einzeln editierbar: sie werden vom Assistenten einzeln editierbar: der Assistent setzt sie gemeinsam. Auf der Kommandozeile
gemeinsam gesetzt, damit sie nicht auseinanderlaufen. Auf der Kommandozeile
bleiben sie einzeln setzbar (`config set …`). 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 Auf der Kommandozeile übernehmen `image pull` und `image download` mit
`--remember` die Edition und Version gleich mit in die `.env`: `--remember` die Edition und Version gleich mit in die `.env`:
+24 -6
View File
@@ -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) 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 So `CMK_IMAGE` records what **actually applies**. It is written by
`image pull`, `image download`, `image load` and `image use` – you normally `image pull`, `image download`, `image load` and `image use` – you never have to
never have to type anything there by hand. In the interface the three values type anything there by hand. In the interface the three values are therefore not
are therefore not editable individually: the wizard sets them together so they editable individually: the wizard sets them together. On the command line they
cannot drift apart. On the command line they remain individually settable remain individually settable (`config set …`).
(`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 On the command line, `image pull` and `image download` take `--remember` to
store the edition and version in `.env` as well: store the edition and version in `.env` as well:
+50 -21
View File
@@ -140,9 +140,13 @@ KOMMANDOS - Checkmk-Image beschaffen
--keep Tarball nach dem Einspielen behalten --keep Tarball nach dem Einspielen behalten
--remember CMK_EDITION und CMK_VERSION mit in die .env schreiben --remember CMK_EDITION und CMK_VERSION mit in die .env schreiben
image load --file F bereits heruntergeladenen Tarball einspielen image load --file F bereits heruntergeladenen Tarball einspielen
image use REF [--remember] vorhandenes Image als CMK_IMAGE eintragen; image use REF [--remember] Image als CMK_IMAGE eintragen; mit
mit --remember auch CMK_EDITION und CMK_VERSION --remember auch CMK_EDITION und CMK_VERSION daraus
daraus ableiten 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 KOMMANDOS - Konfiguration
config list [--category KAT] alle Einstellungen mit aktuellen Werten config list [--category KAT] alle Einstellungen mit aktuellen Werten
@@ -775,21 +779,39 @@ image_cmd_load() {
# image use / list / status # image use / list / status
# --------------------------------------------------------------------- # ---------------------------------------------------------------------
image_cmd_use() { image_cmd_use() {
local ref="" remember="" local ref="" remember="" edition="" version=""
while [ $# -gt 0 ]; do while [ $# -gt 0 ]; do
case "$1" in case "$1" in
--remember) remember=1; shift ;; --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 esac
done done
[ -n "$ref" ] || die "Image-Referenz fehlt, z.B.:
$SELF image use localhost/checkmk/check-mk-enterprise:2.3.0p23" # Ohne fertige Referenz laesst sie sich aus Edition und Version
image_exists_local "$ref" || warn "'$ref' ist lokal (noch) nicht vorhanden." # 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" image_set_env "$ref"
# Edition und Version aus der Referenz ableiten, damit die Vorgaben # Edition und Version mitfuehren, damit die Vorgaben nicht dauerhaft
# nicht dauerhaft etwas anderes behaupten als das benutzte Image. # etwas anderes behaupten als das benutzte Image.
if [ -n "$remember" ]; then 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 local tag repo name ed
tag="${ref##*:}"; repo="${ref%:*}" tag="${ref##*:}"; repo="${ref%:*}"
case "$repo" in */*) name="${repo##*/}" ;; *) name="$repo" ;; esac 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" \ src="$(ui_menu "Image beschaffen (3/3) - Bezugsweg" \
"$ed $ver "$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)" \ registry "Registry holen ($reg_state)" \
download "Tarball herunterladen ($dl_state)" \ download "Tarball herunterladen ($dl_state)" \
file "Vorhandene Tarball-Datei einspielen" \ 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 ----------- # --- Zugangsdaten nur erfragen, wenn sie wirklich fehlen -----------
local -a extra=() 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 \ [ "$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'" ;; "cd '$PROJECT_DIR' && '$SELF' -y config set CMK_EDITION '$ed' && '$SELF' -y config set CMK_VERSION '$ver'" ;;
setonly) setonly)
# Setzt Edition, Version UND das daraus gebildete Image.
# Heruntergeladen wird nichts - das erledigt "up" bei Bedarf.
ui_run "Eintragen" bash -c \ 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 esac
load_env "${ENV_FILE:-$PROJECT_DIR/.env}" load_env "${ENV_FILE:-$PROJECT_DIR/.env}"
@@ -4119,16 +4146,18 @@ Naechste Schritte:
return 0 return 0
fi fi
if [ "$src" = setonly ]; then if [ "$src" = setonly ] && [ "$rc" = 0 ]; then
ui_msg "Eingetragen" \ ui_msg "Eingetragen" \
"Edition und Version sind gespeichert: "Verwendet wird jetzt:
${CMK_EDITION:-?} / ${CMK_VERSION:-?}
Es wurde KEIN Image geholt - verwendet wird weiterhin:
${CMK_IMAGE:-<nicht gesetzt>} ${CMK_IMAGE:-<nicht gesetzt>}
Zum Holen den Assistenten erneut starten und dort Heruntergeladen wurde nichts - das holt die Runtime beim
'Registry holen' oder 'Tarball herunterladen' waehlen." 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 return 0
fi fi