fix: harden checklist selection parsing and clarify -f help text
This commit is contained in:
+31
-5
@@ -4,7 +4,7 @@ showHelp() {
|
||||
echo "netupgrade [--help] [-f] [-y] [configfilename]"
|
||||
echo ""
|
||||
echo " --help Show this help message"
|
||||
echo " -f Select all nodes"
|
||||
echo " -f Preselect all nodes in the checklist"
|
||||
echo " -y No confirmation for supported package managers"
|
||||
echo " configfilename Path to a cfg file"
|
||||
}
|
||||
@@ -64,6 +64,20 @@ parseNode() {
|
||||
IFS=';' read -r -a NODE_FIELDS_REF <<< "${NODE_VALUE}"
|
||||
}
|
||||
|
||||
parseSelection() {
|
||||
local SELECTION_RAW="${1}"
|
||||
local -n SELECTION_REF="${2}"
|
||||
local ITEM_INDEX=0
|
||||
|
||||
SELECTION_REF=()
|
||||
read -r -a SELECTION_REF <<< "${SELECTION_RAW}"
|
||||
|
||||
for ITEM_INDEX in "${!SELECTION_REF[@]}"; do
|
||||
SELECTION_REF[ITEM_INDEX]="${SELECTION_REF[ITEM_INDEX]%\"}"
|
||||
SELECTION_REF[ITEM_INDEX]="${SELECTION_REF[ITEM_INDEX]#\"}"
|
||||
done
|
||||
}
|
||||
|
||||
runSSH() {
|
||||
local HOST="${1}"
|
||||
shift
|
||||
@@ -72,11 +86,18 @@ runSSH() {
|
||||
|
||||
selectNodes(){
|
||||
local -a OPTIONS=()
|
||||
local -a SELECTED_ITEMS=()
|
||||
local -i INDEX=1
|
||||
local -i I=0
|
||||
local -a FIELDS=()
|
||||
local DESC=""
|
||||
local FIELD=""
|
||||
local SEL=""
|
||||
local DEFAULT_STATE="OFF"
|
||||
|
||||
if [ "${FULL}" -eq 1 ]; then
|
||||
DEFAULT_STATE="ON"
|
||||
fi
|
||||
|
||||
for NODE in "${NODES[@]}"; do
|
||||
FIELDS=()
|
||||
@@ -90,7 +111,7 @@ selectNodes(){
|
||||
DESC="${DESC}|${FIELD%%:*}"
|
||||
fi
|
||||
done
|
||||
OPTIONS+=("${INDEX}:${FIELDS[0]}" "${FIELDS[1]} [${DESC}]" "${FULL}")
|
||||
OPTIONS+=("${INDEX}:${FIELDS[0]}" "${FIELDS[1]} [${DESC}]" "${DEFAULT_STATE}")
|
||||
INDEX+=1
|
||||
done
|
||||
if ! SEL=$(whiptail --title "NetUpgrade" --checklist "" 0 0 0 \
|
||||
@@ -98,7 +119,12 @@ selectNodes(){
|
||||
3>&1 1>&2 2>&3); then
|
||||
exit 0
|
||||
fi
|
||||
if [ ${#SEL} == 0 ]; then
|
||||
if [ -z "${SEL}" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
parseSelection "${SEL}" SELECTED_ITEMS
|
||||
if [ ${#SELECTED_ITEMS[@]} -eq 0 ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
@@ -108,12 +134,12 @@ selectNodes(){
|
||||
touch "${LOGFILENAME}"
|
||||
local RESULT="\n"
|
||||
|
||||
for ITM in ${SEL}; do
|
||||
for ITM in "${SELECTED_ITEMS[@]}"; do
|
||||
INDEX=1
|
||||
for NODE in "${NODES[@]}"; do
|
||||
FIELDS=()
|
||||
parseNode "${NODE}" FIELDS
|
||||
if [ "${ITM}" = "\"${INDEX}:${FIELDS[0]}\"" ]; then
|
||||
if [ "${ITM}" = "${INDEX}:${FIELDS[0]}" ]; then
|
||||
for ((I = 2; I < ${#FIELDS[@]}; ++I)); do
|
||||
if runCmd "${FIELDS[0]}" "${FIELDS[1]}" "${FIELDS[I]}"; then
|
||||
RESULT+="Ok: ${FIELDS[1]} @ ${FIELDS[0]} : ${FIELDS[I]}\n"
|
||||
|
||||
Reference in New Issue
Block a user