Assistent statt doppelter Abfragen beim Image-Beschaffen
Der bisherige Ablauf war umstaendlich: Version in den Einstellungen aendern -> Warnung, dass CMK_IMAGE nicht passt -> "Image holen?" -> und dann erneut nach Edition, Version UND Zugangsdaten fragen, obwohl alles schon dastand. Jetzt ein Menuepunkt "Image beschaffen" (im Image-Menue und unter Einstellungen -> Checkmk-Image und Zugangsdaten), der in einem Durchgang durch Edition, Version und Bezugsweg fuehrt: Registry holen | Tarball herunterladen | vorhandene Datei einspielen | nichts holen, nur eintragen Danach stehen CMK_EDITION, CMK_VERSION und CMK_IMAGE gemeinsam richtig. Nach Zugangsdaten wird nur noch gefragt, wenn sie fuer den gewaehlten Weg tatsaechlich fehlen - hinterlegte werden verwendet. Wer sie neu eingibt, kann sie gleich in der .env speichern lassen. Die drei Werte sind in der Oberflaeche nicht mehr einzeln editierbar (neuer Feldtyp "info"): ein Klick darauf bietet den Assistenten an. Damit koennen sie nicht mehr auseinanderlaufen. Auf der Kommandozeile bleibt alles wie bisher einzeln setzbar; "image pull" und "image download" haben dafuer neu --remember, das Edition und Version mit in die .env schreibt. Das Image-Menue wird dadurch kuerzer: status, versions, holen, test, use. Die frueheren Einzelpunkte pull/download/load stecken im Assistenten. Geprueft: mit hinterlegten Zugangsdaten vier Dialoge und keine Nachfrage; ohne Zugangsdaten und Bezugsweg Registry wird genau einmal nach Benutzer, Kennwort und Speichern gefragt; der Weg "nur eintragen" fragt gar nicht. Alle Menues kehren sauber zurueck. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -818,6 +818,16 @@ abgetippt werden – dort erscheint eine Auswahlliste.
|
||||
|
||||
### 8.6 Image holen – drei Wege
|
||||
|
||||
> **In der Oberfläche geht das als Assistent:** **image → „Image beschaffen"**
|
||||
> führt in einem Durchgang durch Edition, Version und Bezugsweg, setzt danach
|
||||
> `CMK_EDITION`, `CMK_VERSION` **und** `CMK_IMAGE` und fragt **nicht** erneut
|
||||
> nach Zugangsdaten, die schon in der `.env` stehen. Nur wenn sie für den
|
||||
> gewählten Weg fehlen, werden sie erfragt – auf Wunsch gleich gespeichert.
|
||||
> Derselbe Assistent liegt auch unter **Einstellungen → Checkmk-Image und
|
||||
> Zugangsdaten → „>> Image beschaffen"**.
|
||||
|
||||
Auf der Kommandozeile bleiben die Einzelschritte:
|
||||
|
||||
**a) Aus einer Registry (empfohlen)**
|
||||
|
||||
Für die Enterprise-Edition entspricht das genau diesen beiden Schritten – das
|
||||
@@ -898,7 +908,17 @@ 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.
|
||||
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
|
||||
bleiben sie einzeln setzbar (`config set …`).
|
||||
|
||||
Auf der Kommandozeile übernehmen `image pull` und `image download` mit
|
||||
`--remember` die Edition und Version gleich mit in die `.env`:
|
||||
|
||||
```bash
|
||||
./scripts/cmk-manage.sh image pull --edition enterprise --version 2.3.0p9 --remember
|
||||
```
|
||||
|
||||
> **Daraus folgt:** Edition oder Version zu ändern, startet **keine** andere
|
||||
> Ausgabe. Erst `image pull` (bzw. `download`/`load`) schreibt das Ergebnis
|
||||
|
||||
+20
-1
@@ -824,6 +824,15 @@ selection list appears instead.
|
||||
|
||||
### 8.6 Fetching the image – three ways
|
||||
|
||||
> **In the interface this is a wizard:** **image → "Image beschaffen"** walks
|
||||
> through edition, version and source in one go, then sets `CMK_EDITION`,
|
||||
> `CMK_VERSION` **and** `CMK_IMAGE`, and does **not** ask again for credentials
|
||||
> already stored in `.env`. It only asks if they are missing for the chosen
|
||||
> route – and offers to save them. The same wizard is also available under
|
||||
> **Einstellungen → Checkmk-Image und Zugangsdaten → ">> Image beschaffen"**.
|
||||
|
||||
On the command line the individual steps remain:
|
||||
|
||||
**a) From a registry (recommended)**
|
||||
|
||||
For the Enterprise edition this is exactly the following two steps – the script
|
||||
@@ -904,7 +913,17 @@ localhost/checkmk/check-mk-enterprise:2.3.0p9 (loaded from a tarba
|
||||
|
||||
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.
|
||||
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 …`).
|
||||
|
||||
On the command line, `image pull` and `image download` take `--remember` to
|
||||
store the edition and version in `.env` as well:
|
||||
|
||||
```bash
|
||||
./scripts/cmk-manage.sh image pull --edition enterprise --version 2.3.0p9 --remember
|
||||
```
|
||||
|
||||
> **Consequence:** changing the edition or version does **not** start a
|
||||
> different release. Only `image pull` (or `download`/`load`) writes the result
|
||||
|
||||
+151
-26
@@ -128,12 +128,14 @@ KOMMANDOS - Checkmk-Image beschaffen
|
||||
--registry R abweichende Registry
|
||||
--user U --password P Zugangsdaten (Enterprise: Kundenportal)
|
||||
--image REF fertige Referenz statt Edition/Version
|
||||
--remember CMK_EDITION und CMK_VERSION mit in die .env schreiben
|
||||
--no-set .env nicht veraendern
|
||||
image download [Opt.] Image-Tarball vom Downloadportal holen und einspielen
|
||||
--edition/--version/--user/--password wie oben
|
||||
--url URL vollstaendige URL fest vorgeben
|
||||
--dir VERZ Ablage (Vorgabe: $IMAGE_DIR)
|
||||
--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
|
||||
|
||||
@@ -569,6 +571,7 @@ image_cmd_pull() {
|
||||
--password) pass="$2"; shift 2 ;;
|
||||
--image) ref="$2"; shift 2 ;;
|
||||
--no-set) setenv=""; shift ;;
|
||||
--remember) remember=1; shift ;;
|
||||
*) die "Unbekannte Option fuer 'image pull': $1" ;;
|
||||
esac
|
||||
done
|
||||
@@ -622,6 +625,10 @@ EOF
|
||||
return 1
|
||||
fi
|
||||
ok "Image vorhanden: $ref"
|
||||
if [ -n "$remember" ]; then
|
||||
env_set CMK_EDITION "$edition"; env_set CMK_VERSION "$version"
|
||||
log "CMK_EDITION=$edition und CMK_VERSION=$version uebernommen."
|
||||
fi
|
||||
[ -n "$setenv" ] && image_set_env "$ref"
|
||||
return 0
|
||||
}
|
||||
@@ -632,7 +639,7 @@ EOF
|
||||
image_cmd_download() {
|
||||
local edition="${CMK_EDITION:-raw}" version="${CMK_VERSION:-}"
|
||||
local user="${CMK_DOWNLOAD_USER:-}" pass="${CMK_DOWNLOAD_PASSWORD:-}"
|
||||
local url="${CMK_DOWNLOAD_URL:-}" dir="" keep="" setenv=1
|
||||
local url="${CMK_DOWNLOAD_URL:-}" dir="" keep="" setenv=1 remember=""
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
--edition) edition="$2"; shift 2 ;;
|
||||
@@ -643,6 +650,7 @@ image_cmd_download() {
|
||||
--dir) dir="$2"; shift 2 ;;
|
||||
--keep) keep=1; shift ;;
|
||||
--no-set) setenv=""; shift ;;
|
||||
--remember) remember=1; shift ;;
|
||||
*) die "Unbekannte Option fuer 'image download': $1" ;;
|
||||
esac
|
||||
done
|
||||
@@ -694,6 +702,10 @@ EOF
|
||||
local loaded
|
||||
loaded="$(image_load_file "$target")" || return 1
|
||||
ok "Image eingespielt: $loaded"
|
||||
if [ -n "$remember" ]; then
|
||||
env_set CMK_EDITION "$edition"; env_set CMK_VERSION "$version"
|
||||
log "CMK_EDITION=$edition und CMK_VERSION=$version uebernommen."
|
||||
fi
|
||||
[ -z "$keep" ] && { rm -f "$target"; log "Tarball entfernt (mit --keep behalten)."; }
|
||||
[ -n "$setenv" ] && image_set_env "$loaded"
|
||||
return 0
|
||||
@@ -2459,9 +2471,9 @@ settings_defs() {
|
||||
cat <<'EOF'
|
||||
runtime|CMK_RUNTIME|choice|Container-Runtime|auto:docker:podman|1
|
||||
runtime|TZ|text|Zeitzone||
|
||||
image|CMK_IMAGE|text|VERWENDETES Image - setzt "image pull"||
|
||||
image|CMK_EDITION|choice|Edition (nur Vorgabe, wirkt ueber "image pull")|raw:community:free:cloud:managed:pro:ultimate:ultimatemt:enterprise|
|
||||
image|CMK_VERSION|text|Version (nur Vorgabe, wirkt ueber "image pull")||
|
||||
image|CMK_IMAGE|info|VERWENDETES Image (setzt der Assistent)||1
|
||||
image|CMK_EDITION|info|Edition (setzt der Assistent)||1
|
||||
image|CMK_VERSION|info|Version (setzt der Assistent)||1
|
||||
image|CMK_REGISTRY|text|Registry fuer Enterprise||1
|
||||
image|CMK_REGISTRY_USER|text|Registry-Benutzer||1
|
||||
image|CMK_REGISTRY_PASSWORD|password|Registry-Kennwort||1
|
||||
@@ -3379,23 +3391,16 @@ gui_image_menu() {
|
||||
Edition/Version: ${CMK_EDITION:-raw} / ${CMK_VERSION:-?}" \
|
||||
status "Status und lokale Images anzeigen" \
|
||||
versions "Verfuegbare Versionen auflisten" \
|
||||
holen "Image beschaffen (Assistent: Edition, Version, Bezugsweg)" \
|
||||
test "Zugangsdaten pruefen (Registry und Downloadportal)" \
|
||||
pull "Aus Registry holen (Docker Hub / registry.checkmk.com)" \
|
||||
download "Tarball vom Downloadportal holen (mit Zugangsdaten)" \
|
||||
load "Heruntergeladenen Tarball einspielen (load)" \
|
||||
use "Vorhandenes Image auswaehlen" \
|
||||
use "Vorhandenes lokales Image auswaehlen" \
|
||||
back "zurueck")" || return 0
|
||||
case "$sel" in
|
||||
status) local f; f="$(mktemp)"; NO_COLOR=1 cmd_image status >"$f" 2>&1 || true
|
||||
ui_text "Image-Status" "$f"; rm -f "$f" ;;
|
||||
versions) gui_image_versions || true ;;
|
||||
holen) gui_image_wizard || true ;;
|
||||
test) gui_image_test || true ;;
|
||||
pull) gui_image_pull || true ;;
|
||||
download) gui_image_download || true ;;
|
||||
load) local lf; lf="$(ui_pick_file "${IMAGE_DIR:-$PROJECT_DIR/images}" '*.tar.gz')" || continue
|
||||
[ -n "$lf" ] || continue
|
||||
ui_run "Image einspielen" bash -c "cd '$PROJECT_DIR' && '$SELF' -y image load --file '$lf'"
|
||||
load_env "${ENV_FILE:-$PROJECT_DIR/.env}" ;;
|
||||
use) gui_image_use || true ;;
|
||||
back) return 0 ;;
|
||||
esac
|
||||
@@ -3458,6 +3463,121 @@ Quelle: oeffentliches Versionsarchiv von checkmk.com" "${items[@]}")" || return
|
||||
fi
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------------
|
||||
# Assistent: Image beschaffen
|
||||
#
|
||||
# Fuehrt in einem Durchgang durch Edition, Version und Bezugsweg und
|
||||
# schreibt anschliessend CMK_EDITION, CMK_VERSION und CMK_IMAGE.
|
||||
# Bereits hinterlegte Zugangsdaten werden verwendet - danach wird nur
|
||||
# gefragt, wenn sie fuer den gewaehlten Weg fehlen.
|
||||
# ---------------------------------------------------------------------
|
||||
gui_image_wizard() {
|
||||
local ed ver src
|
||||
local cur_img="${CMK_IMAGE:-<nicht gesetzt>}"
|
||||
|
||||
ed="$(ui_menu "Image beschaffen (1/3) - Edition" \
|
||||
"Derzeit verwendet: $cur_img
|
||||
Eingestellt : ${CMK_EDITION:-?} / ${CMK_VERSION:-?}
|
||||
|
||||
Links der Name, den dieses Werkzeug verwendet,
|
||||
rechts der Name auf checkmk.com." \
|
||||
raw "= Community auf der Website (frei, bis 2.4)" \
|
||||
community "= Community (frei, ab 2.5)" \
|
||||
enterprise "= Pro auf der Website (Login noetig, bis 2.4)" \
|
||||
pro "= Pro (ab 2.5)" \
|
||||
cloud "= Ultimate auf der Website (bis 2.4)" \
|
||||
ultimate "= Ultimate (ab 2.5)" \
|
||||
managed "= Ultimate MT auf der Website (bis 2.4)" \
|
||||
ultimatemt "= Ultimate MT (ab 2.5)")" || return 0
|
||||
|
||||
ver="$(gui_image_pick_version "$ed" "${CMK_VERSION:-}")" || return 0
|
||||
[ -n "$ver" ] || return 0
|
||||
|
||||
# --- Bezugsweg -----------------------------------------------------
|
||||
local reg_state dl_state
|
||||
reg_state="$([ -n "${CMK_REGISTRY_USER:-}" ] && echo "Zugangsdaten hinterlegt" || echo "ohne Anmeldung")"
|
||||
dl_state="$([ -n "${CMK_DOWNLOAD_USER:-}" ] && echo "Zugangsdaten hinterlegt" || echo "ohne Anmeldung")"
|
||||
src="$(ui_menu "Image beschaffen (3/3) - Bezugsweg" \
|
||||
"$ed $ver
|
||||
|
||||
Woher soll das Image kommen?" \
|
||||
registry "Registry holen ($reg_state)" \
|
||||
download "Tarball herunterladen ($dl_state)" \
|
||||
file "Vorhandene Tarball-Datei einspielen" \
|
||||
setonly "Nichts holen, nur Edition/Version eintragen")" || return 0
|
||||
|
||||
# --- Zugangsdaten nur erfragen, wenn sie wirklich fehlen -----------
|
||||
local -a extra=()
|
||||
local need_user="" u p
|
||||
case "$src" in
|
||||
registry) edition_needs_login "$ed" && [ -z "${CMK_REGISTRY_USER:-}" ] && need_user=registry ;;
|
||||
download) case "$ed" in raw|community|free) : ;; *) [ -z "${CMK_DOWNLOAD_USER:-}" ] && need_user=download ;; esac ;;
|
||||
esac
|
||||
if [ -n "$need_user" ]; then
|
||||
u="$(ui_input "Zugangsdaten fehlen" \
|
||||
"Fuer diesen Weg werden Zugangsdaten des Checkmk-Kundenportals
|
||||
gebraucht. Sie sind noch nicht hinterlegt.
|
||||
|
||||
Benutzer:" "")" || return 0
|
||||
[ -n "$u" ] || { ui_msg "Abgebrochen" "Ohne Benutzer geht es nicht weiter."; return 0; }
|
||||
p="$(ui_password "Zugangsdaten fehlen" "Kennwort:")" || return 0
|
||||
extra+=(--user "$u" --password "$p")
|
||||
if ui_yesno "Merken?" "Die Zugangsdaten fuer kuenftige Aufrufe in der .env speichern?"; then
|
||||
if [ "$need_user" = registry ]; then
|
||||
env_set CMK_REGISTRY_USER "$u"; env_set CMK_REGISTRY_PASSWORD "$p"
|
||||
else
|
||||
env_set CMK_DOWNLOAD_USER "$u"; env_set CMK_DOWNLOAD_PASSWORD "$p"
|
||||
fi
|
||||
load_env "${ENV_FILE:-$PROJECT_DIR/.env}"
|
||||
fi
|
||||
fi
|
||||
|
||||
# --- ausfuehren ----------------------------------------------------
|
||||
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[*]}}" ;;
|
||||
download)
|
||||
case "$ver" in
|
||||
*-latest|latest|*-daily)
|
||||
ui_msg "Nicht moeglich" \
|
||||
"Fuer den Tarball-Download wird eine exakte Version gebraucht,
|
||||
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[*]}}" ;;
|
||||
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 config set CMK_EDITION '$ed' && '$SELF' -y config set CMK_VERSION '$ver'" ;;
|
||||
setonly)
|
||||
ui_run "Eintragen" bash -c \
|
||||
"cd '$PROJECT_DIR' && '$SELF' -y config set CMK_EDITION '$ed' && '$SELF' -y config set CMK_VERSION '$ver'" ;;
|
||||
esac
|
||||
|
||||
load_env "${ENV_FILE:-$PROJECT_DIR/.env}"
|
||||
|
||||
# --- Ergebnis ------------------------------------------------------
|
||||
local cm
|
||||
if cm="$(image_consistency_check)"; then
|
||||
ui_msg "Fertig" \
|
||||
"Verwendet wird jetzt:
|
||||
${CMK_IMAGE:-<nicht gesetzt>}
|
||||
|
||||
Eingestellt: ${CMK_EDITION:-?} / ${CMK_VERSION:-?}
|
||||
|
||||
Wirksam wird das mit 'Stack steuern -> Stack starten'
|
||||
(die Container werden dabei neu erstellt)."
|
||||
else
|
||||
ui_msg "Hinweis" "$cm"
|
||||
fi
|
||||
}
|
||||
|
||||
gui_image_versions() {
|
||||
local ed
|
||||
ed="$(gui_image_pick_edition)" || return 0
|
||||
@@ -3550,6 +3670,20 @@ gui_settings_edit() {
|
||||
opt="$(printf '%s' "$def" | cut -d'|' -f6)"
|
||||
cur="$(settings_value "$key")"
|
||||
|
||||
if [ "$typ" = info ]; then
|
||||
if ui_yesno "$key" \
|
||||
"Aktuell: ${cur:-<leer>}
|
||||
|
||||
Dieser Wert wird vom Assistenten gesetzt, damit Edition,
|
||||
Version und das tatsaechlich verwendete Image zusammenpassen.
|
||||
|
||||
Assistent jetzt starten?"; then
|
||||
gui_image_wizard || true
|
||||
fi
|
||||
load_env "${ENV_FILE:-$PROJECT_DIR/.env}"
|
||||
return 0
|
||||
fi
|
||||
|
||||
while :; do
|
||||
case "$typ" in
|
||||
choice)
|
||||
@@ -3594,17 +3728,6 @@ gui_settings_edit() {
|
||||
ui_msg "Gespeichert" "$key = $([ "$typ" = password ] && echo '********' || echo "${new:-<leer>}")$hint"
|
||||
# Zugangsdaten lassen sich sofort pruefen - das erspart den Umweg
|
||||
case "$key" in
|
||||
CMK_EDITION|CMK_VERSION)
|
||||
load_env "${ENV_FILE:-$PROJECT_DIR/.env}"
|
||||
local cm
|
||||
if ! cm="$(image_consistency_check)"; then
|
||||
if ui_yesno "Image passt nicht" \
|
||||
"$cm
|
||||
|
||||
Image jetzt holen?"; then
|
||||
gui_image_pull || true
|
||||
fi
|
||||
fi ;;
|
||||
CMK_REGISTRY_USER|CMK_REGISTRY_PASSWORD|CMK_DOWNLOAD_USER|CMK_DOWNLOAD_PASSWORD|CMK_REGISTRY|CMK_DOWNLOAD_BASEURL)
|
||||
load_env "${ENV_FILE:-$PROJECT_DIR/.env}"
|
||||
if ui_yesno "Zugangsdaten pruefen" \
|
||||
@@ -3630,7 +3753,8 @@ gui_settings_category() {
|
||||
done < <(settings_defs)
|
||||
# Zusatzaktionen, die inhaltlich zur Kategorie gehoeren
|
||||
case "$cat" in
|
||||
image) items+=("__test__" ">> Zugangsdaten jetzt pruefen (Registry + Downloadportal)") ;;
|
||||
image) items+=("__wizard__" ">> Image beschaffen (Edition, Version, Bezugsweg)")
|
||||
items+=("__test__" ">> Zugangsdaten jetzt pruefen (Registry + Downloadportal)") ;;
|
||||
npm) items+=("__npm__" ">> Proxy Manager: Stand und Admin-Port anzeigen") ;;
|
||||
backup) items+=("__jobs__" ">> Backup-Jobs verwalten") ;;
|
||||
esac
|
||||
@@ -3639,6 +3763,7 @@ gui_settings_category() {
|
||||
sel="$(ui_menu "$title" "Eintrag waehlen und mit ENTER aendern:" "${items[@]}")" || return 0
|
||||
case "$sel" in
|
||||
back) return 0 ;;
|
||||
__wizard__) gui_image_wizard || true; continue ;;
|
||||
__test__) gui_image_test || true; continue ;;
|
||||
__jobs__) gui_jobs_menu || true; continue ;;
|
||||
__npm__) local f; f="$(mktemp)"
|
||||
|
||||
Reference in New Issue
Block a user