163 lines
3.7 KiB
Bash
163 lines
3.7 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
menu_modules_by_prefix() {
|
|
local prefix="$1"
|
|
local title="$2"
|
|
local matching_modules=()
|
|
local module_id=""
|
|
local selection=""
|
|
local index=1
|
|
|
|
while IFS= read -r module_id; do
|
|
[[ "$module_id" == "$prefix"/* ]] || continue
|
|
matching_modules+=("$module_id")
|
|
done < <(registry_list)
|
|
|
|
if [[ "${#matching_modules[@]}" -eq 0 ]]; then
|
|
ui_warn "Aucun module disponible pour $title"
|
|
ui_pause
|
|
return 0
|
|
fi
|
|
|
|
ui_section "$title"
|
|
for module_id in "${matching_modules[@]}"; do
|
|
printf ' %d. %s\n' "$index" "$module_id"
|
|
index=$((index + 1))
|
|
done
|
|
printf ' 0. Retour\n'
|
|
|
|
selection="$(prompt_select_number "Selectionner un module" 0 "${#matching_modules[@]}")"
|
|
if [[ "$selection" == "0" ]]; then
|
|
return 0
|
|
fi
|
|
|
|
dispatcher_prompt_and_run_module "${matching_modules[$((selection - 1))]}"
|
|
ui_pause
|
|
}
|
|
|
|
menu_category_selection() {
|
|
local categories=("network" "containers" "boot" "hardware")
|
|
local selection=""
|
|
|
|
ui_section "Installation par categorie"
|
|
printf ' 1. network\n'
|
|
printf ' 2. containers\n'
|
|
printf ' 3. boot\n'
|
|
printf ' 4. hardware\n'
|
|
printf ' 0. Retour\n'
|
|
|
|
selection="$(prompt_select_number "Selectionner une categorie" 0 4)"
|
|
case "$selection" in
|
|
0) return 0 ;;
|
|
1) menu_modules_by_prefix "network" "Configuration reseau" ;;
|
|
2) menu_modules_by_prefix "containers" "Conteneurs" ;;
|
|
3) menu_modules_by_prefix "boot" "Configuration du boot" ;;
|
|
4) menu_modules_by_prefix "hardware" "Materiel" ;;
|
|
esac
|
|
}
|
|
|
|
menu_system_configuration() {
|
|
menu_modules_by_prefix "system" "Configuration systeme"
|
|
}
|
|
|
|
menu_tests() {
|
|
local selection=""
|
|
local modules=()
|
|
local module_id=""
|
|
local index=1
|
|
|
|
while true; do
|
|
ui_section "Tests"
|
|
printf ' 1. Smoke test\n'
|
|
printf ' 2. Tous les modules\n'
|
|
printf ' 3. Un module\n'
|
|
printf ' 0. Retour\n'
|
|
|
|
selection="$(prompt_select_number "Selectionner un test" 0 3)"
|
|
|
|
case "$selection" in
|
|
0)
|
|
return 0
|
|
;;
|
|
1)
|
|
test_runner_smoke
|
|
ui_pause
|
|
;;
|
|
2)
|
|
test_runner_all_modules
|
|
ui_pause
|
|
;;
|
|
3)
|
|
modules=()
|
|
index=1
|
|
while IFS= read -r module_id; do
|
|
[[ -n "$module_id" ]] || continue
|
|
modules+=("$module_id")
|
|
done < <(registry_list)
|
|
|
|
if [[ "${#modules[@]}" -eq 0 ]]; then
|
|
ui_warn "Aucun module disponible"
|
|
ui_pause
|
|
continue
|
|
fi
|
|
|
|
ui_section "Selection du module a tester"
|
|
for module_id in "${modules[@]}"; do
|
|
printf ' %d. %s\n' "$index" "$module_id"
|
|
index=$((index + 1))
|
|
done
|
|
printf ' 0. Retour\n'
|
|
|
|
selection="$(prompt_select_number "Selectionner un module" 0 "${#modules[@]}")"
|
|
if [[ "$selection" != "0" ]]; then
|
|
test_runner_module "${modules[$((selection - 1))]}"
|
|
ui_pause
|
|
fi
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
menu_main() {
|
|
local selection=""
|
|
|
|
while true; do
|
|
ui_menu \
|
|
"Menu principal" \
|
|
"1. Installation par categorie" \
|
|
"2. Installation par profil" \
|
|
"3. Installation par materiel" \
|
|
"4. Configuration systeme" \
|
|
"5. Tests" \
|
|
"0. Quitter"
|
|
|
|
ui_info "Modules detectes : $(registry_summary)"
|
|
ui_info "Log : $RUNTIME_LOG_FILE"
|
|
|
|
selection="$(prompt_select_number "Choisir une action" 0 5)"
|
|
|
|
case "$selection" in
|
|
0)
|
|
ui_info "Sortie du programme"
|
|
return 0
|
|
;;
|
|
1)
|
|
menu_category_selection
|
|
;;
|
|
3)
|
|
menu_modules_by_prefix "hardware" "Materiel"
|
|
;;
|
|
4)
|
|
menu_system_configuration
|
|
;;
|
|
5)
|
|
menu_tests
|
|
;;
|
|
*)
|
|
dispatcher_not_implemented "menu $selection"
|
|
ui_pause
|
|
;;
|
|
esac
|
|
done
|
|
}
|