started setup_wizard
This commit is contained in:
103
scripts/setup_wizard.sh
Executable file
103
scripts/setup_wizard.sh
Executable file
@@ -0,0 +1,103 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Colors
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
RED='\033[0;31m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Input Framework
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Ensure we have a tty for input
|
||||||
|
if [ ! -e /dev/tty ]; then
|
||||||
|
echo "Error: Script must be run in an interactive terminal (cannot find /dev/tty)." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Function to prompt for user input
|
||||||
|
# Usage: get_input "VARIABLE_NAME" "Prompt Text" "Default Value" "is_secret(true/false)"
|
||||||
|
get_input() {
|
||||||
|
local var_name="$1"
|
||||||
|
local prompt_text="$2"
|
||||||
|
local default_value="$3"
|
||||||
|
local is_secret="$4"
|
||||||
|
|
||||||
|
local input_val=""
|
||||||
|
local prompt_full="${GREEN}${prompt_text}${NC}"
|
||||||
|
|
||||||
|
if [ -n "$default_value" ]; then
|
||||||
|
prompt_full+=" ${YELLOW}[$default_value]${NC}"
|
||||||
|
fi
|
||||||
|
prompt_full+=": "
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
# Print prompt to stderr so it shows up even if stdout is redirected
|
||||||
|
if [ "$is_secret" == "true" ]; then
|
||||||
|
echo -ne "$prompt_full" >&2
|
||||||
|
read -s input_val < /dev/tty
|
||||||
|
echo "" >&2 # Newline after secret input
|
||||||
|
else
|
||||||
|
echo -ne "$prompt_full" >&2
|
||||||
|
read input_val < /dev/tty
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Use default if input is empty
|
||||||
|
if [ -z "$input_val" ] && [ -n "$default_value" ]; then
|
||||||
|
input_val="$default_value"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Validation: Require input if no default exists
|
||||||
|
if [ -z "$input_val" ]; then
|
||||||
|
echo -e "${RED}Error: This value is required.${NC}" >&2
|
||||||
|
else
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Set the variable dynamically in the parent scope
|
||||||
|
printf -v "$var_name" "%s" "$input_val"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to confirm collected inputs
|
||||||
|
# Usage: confirm_inputs "VAR1" "VAR2" "VAR3" ...
|
||||||
|
confirm_inputs() {
|
||||||
|
echo "" >&2
|
||||||
|
echo -e "${GREEN}=== Configuration Summary ===${NC}" >&2
|
||||||
|
|
||||||
|
for var in "$@"; do
|
||||||
|
local val="${!var}"
|
||||||
|
# Mask secrets in summary if needed, or just show length
|
||||||
|
# For now, just printing value.
|
||||||
|
# To improve: pass a list of secret vars to mask them.
|
||||||
|
echo -e "${YELLOW}$var:${NC} $val" >&2
|
||||||
|
done
|
||||||
|
echo "" >&2
|
||||||
|
|
||||||
|
get_input "CONFIRM" "Is this correct? (y/n)" "y" "false"
|
||||||
|
if [[ "${CONFIRM,,}" != "y" ]]; then
|
||||||
|
echo -e "${RED}Aborted by user.${NC}" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Script Logic
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
echo "Starting Interactive Setup..."
|
||||||
|
echo "-----------------------------"
|
||||||
|
|
||||||
|
# 1. Collect Inputs
|
||||||
|
# Example:
|
||||||
|
get_input "HOST_NAME" "Enter Hostname" "$(hostname)" "false"
|
||||||
|
# get_input "ADMIN_PASS" "Enter Admin Password" "" "true"
|
||||||
|
|
||||||
|
# 2. Confirm
|
||||||
|
# confirm_inputs "HOST_NAME" "ADMIN_PASS"
|
||||||
|
|
||||||
|
# 3. Execute
|
||||||
|
# echo "Configuring $HOST_NAME..."
|
||||||
Reference in New Issue
Block a user