From 322fd681cb4b2ec10ee3e0ede5cf2a43a7d445ba Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Wed, 17 Sep 2025 16:13:02 +0200 Subject: [PATCH] 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. --- misc/build.func | 81 +++++++++++++++---------------------------------- 1 file changed, 24 insertions(+), 57 deletions(-) diff --git a/misc/build.func b/misc/build.func index 4df11e11..cc850468 100644 --- a/misc/build.func +++ b/misc/build.func @@ -1519,97 +1519,62 @@ install_script() { timezone=$(cat /etc/timezone) header_info - # --- PRESET support --- - if [ -n "${PRESET:-}" ]; then - case "$PRESET" in - DEFAULT | default | 1) - CHOICE="1" - ;; - 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 + # --- Support CLI argument as direct preset (default, advanced, …) --- + CHOICE="${1:-}" + + # If no CLI argument → show whiptail menu + if [ -z "$CHOICE" ]; then local menu_items=( "1" "Default Install" - "2" "Default Install (Verbose)" - "3" "Advanced Settings" - "4" "My Defaults" + "2" "Advanced Install" + "3" "My Defaults" ) if [ -f "$(get_app_defaults_path)" ]; then - menu_items+=("5" "App Defaults for ${APP}") - menu_items+=("6" "Settings") - else + menu_items+=("4" "App Defaults for ${APP}") menu_items+=("5" "Settings") + else + menu_items+=("4" "Settings") fi TMP_CHOICE=$(whiptail --backtitle "[dev] Proxmox VE Helper Scripts" \ --title "SETTINGS" \ - --ok-button "OK" --cancel-button "Exit Script" \ + --ok-button "Select" --cancel-button "Exit Script" \ --menu "Choose an option:" 20 60 9 \ "${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" fi - case $CHOICE in - 1) + # --- Main case --- + case "$CHOICE" in + 1 | default | DEFAULT) header_info echo -e "${DEFAULT}${BOLD}${BL}Using Default Settings on node $PVEHOST_NAME${CL}" VERBOSE="no" METHOD="default" base_settings "$VERBOSE" echo_default - # Always ask storages for MyDefaults file (create if missing) ensure_storage_selection_for_vars_file "/usr/local/community-scripts/default.vars" ;; - 2) - 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) + 2 | advanced | ADVANCED) header_info echo -e "${ADVANCED}${BOLD}${RD}Using Advanced Install on node $PVEHOST_NAME${CL}" METHOD="advanced" base_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" maybe_offer_save_app_defaults ;; - 4) + 3 | mydefaults | MYDEFAULTS) default_var_settings || { msg_error "Failed to apply default.vars" exit 1 } - # Always let user pick storages again (unless only one exists) ensure_storage_selection_for_vars_file "/usr/local/community-scripts/default.vars" ;; - 5) + 4 | appdefaults | APPDEFAULTS) if [ -f "$(get_app_defaults_path)" ]; then header_info echo -e "${DEFAULT}${BOLD}${BL}Using App Defaults for ${APP} on node $PVEHOST_NAME${CL}" @@ -1617,16 +1582,18 @@ install_script() { base_settings _load_vars_file "$(get_app_defaults_path)" echo_default - # Always let user confirm/change storages for the app defaults ensure_storage_selection_for_vars_file "$(get_app_defaults_path)" + else + msg_error "No App Defaults available for ${APP}" + exit 1 fi ;; - 6) + 5 | settings | SETTINGS) 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 }