Refactor install_script menu and preset handling

Simplifies the install_script function by replacing the PRESET environment variable logic with direct CLI argument support for preset selection. Updates the whiptail menu options, streamlines case handling, and improves error handling for invalid options. This refactor makes the script interface more intuitive and reduces code complexity.
This commit is contained in:
CanbiZ 2025-09-17 16:13:02 +02:00
parent b006376cf7
commit 322fd681cb

View File

@ -1519,97 +1519,62 @@ install_script() {
timezone=$(cat /etc/timezone) timezone=$(cat /etc/timezone)
header_info header_info
# --- PRESET support --- # --- Support CLI argument as direct preset (default, advanced, …) ---
if [ -n "${PRESET:-}" ]; then CHOICE="${1:-}"
case "$PRESET" in
DEFAULT | default | 1) # If no CLI argument → show whiptail menu
CHOICE="1" if [ -z "$CHOICE" ]; then
;;
VERBOSE | verbose | 2)
CHOICE="2"
;;
ADVANCED | advanced | 3)
CHOICE="3"
;;
MYDEFAULTS | mydefaults | 4)
CHOICE="4"
;;
APPDEFAULTS | appdefaults | 5)
CHOICE="5"
;;
*)
echo -e "\n${CROSS}${RD}Invalid PRESET value: ${PRESET}${CL}\n"
exit 1
;;
esac
else
# Build dynamic menu
local menu_items=( local menu_items=(
"1" "Default Install" "1" "Default Install"
"2" "Default Install (Verbose)" "2" "Advanced Install"
"3" "Advanced Settings" "3" "My Defaults"
"4" "My Defaults"
) )
if [ -f "$(get_app_defaults_path)" ]; then if [ -f "$(get_app_defaults_path)" ]; then
menu_items+=("5" "App Defaults for ${APP}") menu_items+=("4" "App Defaults for ${APP}")
menu_items+=("6" "Settings")
else
menu_items+=("5" "Settings") menu_items+=("5" "Settings")
else
menu_items+=("4" "Settings")
fi fi
TMP_CHOICE=$(whiptail --backtitle "[dev] Proxmox VE Helper Scripts" \ TMP_CHOICE=$(whiptail --backtitle "[dev] Proxmox VE Helper Scripts" \
--title "SETTINGS" \ --title "SETTINGS" \
--ok-button "OK" --cancel-button "Exit Script" \ --ok-button "Select" --cancel-button "Exit Script" \
--menu "Choose an option:" 20 60 9 \ --menu "Choose an option:" 20 60 9 \
"${menu_items[@]}" \ "${menu_items[@]}" \
--default-item "1" 3>&1 1>&2 2>&3) || true --default-item "1" 3>&1 1>&2 2>&3) || exit_script
if [ -z "$TMP_CHOICE" ]; then
exit_script
fi
CHOICE="$TMP_CHOICE" CHOICE="$TMP_CHOICE"
fi fi
case $CHOICE in # --- Main case ---
1) case "$CHOICE" in
1 | default | DEFAULT)
header_info header_info
echo -e "${DEFAULT}${BOLD}${BL}Using Default Settings on node $PVEHOST_NAME${CL}" echo -e "${DEFAULT}${BOLD}${BL}Using Default Settings on node $PVEHOST_NAME${CL}"
VERBOSE="no" VERBOSE="no"
METHOD="default" METHOD="default"
base_settings "$VERBOSE" base_settings "$VERBOSE"
echo_default echo_default
# Always ask storages for MyDefaults file (create if missing)
ensure_storage_selection_for_vars_file "/usr/local/community-scripts/default.vars" ensure_storage_selection_for_vars_file "/usr/local/community-scripts/default.vars"
;; ;;
2) 2 | advanced | ADVANCED)
header_info
echo -e "${DEFAULT}${BOLD}${BL}Using Default Settings on node $PVEHOST_NAME (Verbose)${CL}"
VERBOSE="yes"
METHOD="default"
base_settings "$VERBOSE"
echo_default
ensure_storage_selection_for_vars_file "/usr/local/community-scripts/default.vars"
;;
3)
header_info header_info
echo -e "${ADVANCED}${BOLD}${RD}Using Advanced Install on node $PVEHOST_NAME${CL}" echo -e "${ADVANCED}${BOLD}${RD}Using Advanced Install on node $PVEHOST_NAME${CL}"
METHOD="advanced" METHOD="advanced"
base_settings base_settings
advanced_settings advanced_settings
# Always ask storages (stored to env var_* so app-defaults will include them)
ensure_storage_selection_for_vars_file "/usr/local/community-scripts/default.vars" ensure_storage_selection_for_vars_file "/usr/local/community-scripts/default.vars"
maybe_offer_save_app_defaults maybe_offer_save_app_defaults
;; ;;
4) 3 | mydefaults | MYDEFAULTS)
default_var_settings || { default_var_settings || {
msg_error "Failed to apply default.vars" msg_error "Failed to apply default.vars"
exit 1 exit 1
} }
# Always let user pick storages again (unless only one exists)
ensure_storage_selection_for_vars_file "/usr/local/community-scripts/default.vars" ensure_storage_selection_for_vars_file "/usr/local/community-scripts/default.vars"
;; ;;
5) 4 | appdefaults | APPDEFAULTS)
if [ -f "$(get_app_defaults_path)" ]; then if [ -f "$(get_app_defaults_path)" ]; then
header_info header_info
echo -e "${DEFAULT}${BOLD}${BL}Using App Defaults for ${APP} on node $PVEHOST_NAME${CL}" echo -e "${DEFAULT}${BOLD}${BL}Using App Defaults for ${APP} on node $PVEHOST_NAME${CL}"
@ -1617,16 +1582,18 @@ install_script() {
base_settings base_settings
_load_vars_file "$(get_app_defaults_path)" _load_vars_file "$(get_app_defaults_path)"
echo_default echo_default
# Always let user confirm/change storages for the app defaults
ensure_storage_selection_for_vars_file "$(get_app_defaults_path)" ensure_storage_selection_for_vars_file "$(get_app_defaults_path)"
else
msg_error "No App Defaults available for ${APP}"
exit 1
fi fi
;; ;;
6) 5 | settings | SETTINGS)
settings_menu settings_menu
exit 0
;; ;;
*) *)
echo -e "${CROSS}${RD}Invalid option, please try again.${CL}" echo -e "${CROSS}${RD}Invalid option: $CHOICE${CL}"
exit 1
;; ;;
esac esac
} }