Merge pull request #279 from truecharts/heavyport
Move some features to use HeavyScript library instead + general improvements
This commit is contained in:
commit
7ced4301fc
@ -5,8 +5,8 @@ backup(){
|
|||||||
echo_backup+=("🄱 🄰 🄲 🄺 🅄 🄿 🅂")
|
echo_backup+=("🄱 🄰 🄲 🄺 🅄 🄿 🅂")
|
||||||
echo_backup+=("Number of backups was set to $number_of_backups")
|
echo_backup+=("Number of backups was set to $number_of_backups")
|
||||||
date=$(date '+%Y_%m_%d_%H_%M_%S')
|
date=$(date '+%Y_%m_%d_%H_%M_%S')
|
||||||
[[ "$verbose" == "true" ]] && cli -c 'app kubernetes backup_chart_releases backup_name=''"'HeavyScript_"$date"'"' &> /dev/null && echo_backup+=(HeavyScript_"$date")
|
[[ "$verbose" == "true" ]] && cli -c 'app kubernetes backup_chart_releases backup_name=''"'TrueTool_"$date"'"' &> /dev/null && echo_backup+=(TrueTool_"$date")
|
||||||
[[ -z "$verbose" ]] && echo_backup+=("\nNew Backup Name:") && cli -c 'app kubernetes backup_chart_releases backup_name=''"'HeavyScript_"$date"'"' | tail -n 1 &> /dev/null && echo_backup+=(HeavyScript_"$date")
|
[[ -z "$verbose" ]] && echo_backup+=("\nNew Backup Name:") && cli -c 'app kubernetes backup_chart_releases backup_name=''"'TrueTool_"$date"'"' | tail -n 1 &> /dev/null && echo_backup+=(TrueTool_"$date")
|
||||||
mapfile -t list_backups < <(cli -c 'app kubernetes list_backups' | grep -E "HeavyScript_|TrueTool_" | sort -t '_' -Vr -k2,7 | awk -F '|' '{print $2}'| tr -d " \t\r")
|
mapfile -t list_backups < <(cli -c 'app kubernetes list_backups' | grep -E "HeavyScript_|TrueTool_" | sort -t '_' -Vr -k2,7 | awk -F '|' '{print $2}'| tr -d " \t\r")
|
||||||
if [[ ${#list_backups[@]} -gt "$number_of_backups" ]]; then
|
if [[ ${#list_backups[@]} -gt "$number_of_backups" ]]; then
|
||||||
echo_backup+=("\nDeleted the oldest backup(s) for exceeding limit:")
|
echo_backup+=("\nDeleted the oldest backup(s) for exceeding limit:")
|
||||||
@ -45,7 +45,7 @@ while true
|
|||||||
do
|
do
|
||||||
clear -x
|
clear -x
|
||||||
title
|
title
|
||||||
echo -e "Choose a Restore Point to Delete\nThese may be out of order if they are not HeavyScript backups"
|
echo -e "Choose a Restore Point to Delete\nThese may be out of order if they are not TrueTool backups"
|
||||||
echo "$list_backups"
|
echo "$list_backups"
|
||||||
echo
|
echo
|
||||||
echo "0) Exit"
|
echo "0) Exit"
|
||||||
@ -120,7 +120,7 @@ restore(){
|
|||||||
clear -x && echo "pulling restore points.."
|
clear -x && echo "pulling restore points.."
|
||||||
list_backups=$(cli -c 'app kubernetes list_backups' | grep -E "HeavyScript_|TrueTool_" | sort -t '_' -Vr -k2,7 | tr -d " \t\r" | awk -F '|' '{print $2}' | nl -s ") " | column -t)
|
list_backups=$(cli -c 'app kubernetes list_backups' | grep -E "HeavyScript_|TrueTool_" | sort -t '_' -Vr -k2,7 | tr -d " \t\r" | awk -F '|' '{print $2}' | nl -s ") " | column -t)
|
||||||
if [[ -z "$list_backups" ]]; then
|
if [[ -z "$list_backups" ]]; then
|
||||||
echo "No HeavyScript restore points available"
|
echo "No TrueTool restore points available"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -198,7 +198,7 @@ if [[ $borked == True ]]; then
|
|||||||
echo "If you were to restore, you would lose all of your application data"
|
echo "If you were to restore, you would lose all of your application data"
|
||||||
echo "If you are on Bluefin version: 22.12.0, and have not yet ran the patch, you will need to run it"
|
echo "If you are on Bluefin version: 22.12.0, and have not yet ran the patch, you will need to run it"
|
||||||
echo "Afterwards you will be able to create backups and restore them"
|
echo "Afterwards you will be able to create backups and restore them"
|
||||||
echo "This is a known ix-systems bug, and has nothing to do with HeavyScript"
|
echo "This is a known ix-systems bug and has nothing to do with TrueTool"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -1,96 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
|
|
||||||
menu(){
|
|
||||||
clear -x
|
|
||||||
title
|
|
||||||
echo "Available Utilities"
|
|
||||||
echo "-------------------"
|
|
||||||
echo "1) Help"
|
|
||||||
echo "2) List DNS Names"
|
|
||||||
echo "3) Mount and Unmount PVC storage"
|
|
||||||
echo "4) Backup Options"
|
|
||||||
echo "5) Update HeavyScript"
|
|
||||||
echo "6) Update Applications"
|
|
||||||
echo "7) Command to Container"
|
|
||||||
echo "8) Patch 22.12.0"
|
|
||||||
echo "9) Patch 22.12.0 (2)"
|
|
||||||
echo
|
|
||||||
echo "0) Exit"
|
|
||||||
read -rt 120 -p "Please select an option by number: " selection || { echo -e "\nFailed to make a selection in time" ; exit; }
|
|
||||||
|
|
||||||
case $selection in
|
|
||||||
0)
|
|
||||||
echo "Exiting.."
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
1)
|
|
||||||
help
|
|
||||||
;;
|
|
||||||
2)
|
|
||||||
dns
|
|
||||||
;;
|
|
||||||
3)
|
|
||||||
mount
|
|
||||||
;;
|
|
||||||
4)
|
|
||||||
while [[ $backup_selection != true ]]
|
|
||||||
do
|
|
||||||
clear -x
|
|
||||||
title
|
|
||||||
echo "Backup Menu"
|
|
||||||
echo "-----------"
|
|
||||||
echo "1) Create Backup"
|
|
||||||
echo "2) Delete Backup"
|
|
||||||
echo "3) Restore Backup"
|
|
||||||
echo
|
|
||||||
echo "0) Exit"
|
|
||||||
read -rt 120 -p "Please select an option by number: " backup_selection || { echo -e "\nFailed to make a selection in time" ; exit; }
|
|
||||||
case $backup_selection in
|
|
||||||
0)
|
|
||||||
echo "Exiting.."
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
1)
|
|
||||||
read -rt 120 -p "What is the maximun number of backups you would like?: " number_of_backups || { echo -e "\nFailed to make a selection in time" ; exit; }
|
|
||||||
! [[ $number_of_backups =~ ^[0-9]+$ ]] && echo -e "Error: The input must be an interger\n\"""$number_of_backups""\" is not an interger" >&2 && exit
|
|
||||||
[[ "$number_of_backups" -le 0 ]] && echo "Error: Number of backups is required to be at least 1" && exit
|
|
||||||
backup_selection=true
|
|
||||||
;;
|
|
||||||
2)
|
|
||||||
backup_selection=true
|
|
||||||
deleteBackup
|
|
||||||
;;
|
|
||||||
3)
|
|
||||||
backup_selection=true
|
|
||||||
restore
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "\"$selection\" was not an option, please try agian" && sleep 3 && continue
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
;;
|
|
||||||
|
|
||||||
5)
|
|
||||||
self_update
|
|
||||||
;;
|
|
||||||
6)
|
|
||||||
script_create
|
|
||||||
;;
|
|
||||||
7)
|
|
||||||
cmd_to_container
|
|
||||||
;;
|
|
||||||
8)
|
|
||||||
patch_2212_backups
|
|
||||||
;;
|
|
||||||
9)
|
|
||||||
patch_2212_backups2
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "\"$selection\" was not an option, please try agian" && sleep 3 && menu
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
echo
|
|
||||||
}
|
|
||||||
export -f menu
|
|
@ -14,219 +14,3 @@ echo
|
|||||||
echo
|
echo
|
||||||
}
|
}
|
||||||
export -f sync
|
export -f sync
|
||||||
|
|
||||||
|
|
||||||
prune(){
|
|
||||||
echo -e "🄿 🅁 🅄 🄽 🄴"
|
|
||||||
version="$(cli -c 'system version' | awk -F '-' '{print $3}' | awk -F '.' '{print $1 $2}' | tr -d " \t\r\.")"
|
|
||||||
if (( "$version" >= 2212 )); then
|
|
||||||
if ! cli -c 'app container config prune prune_options={"remove_unused_images": true, "remove_stopped_containers": true}' | head -n -4; then
|
|
||||||
echo "Failed to Prune Docker Images"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
if ! docker image prune -af | grep "^Total"; then
|
|
||||||
echo "Failed to Prune Docker Images"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
export -f prune
|
|
||||||
|
|
||||||
|
|
||||||
title(){
|
|
||||||
echo ' _ _ _____ _ _ '
|
|
||||||
echo '| | | | / ___| (_) | | '
|
|
||||||
echo '| |_| | ___ __ ___ ___ _\ `--. ___ _ __ _ _ __ | |_'
|
|
||||||
echo "| _ |/ _ \/ _\` \ \ / / | | |\`--. \/ __| '__| | '_ \| __|"
|
|
||||||
echo '| | | | __/ (_| |\ V /| |_| /\__/ / (__| | | | |_) | |_ '
|
|
||||||
echo '\_| |_/\___|\__,_| \_/ \__, \____/ \___|_| |_| .__/ \__|'
|
|
||||||
echo ' __/ | | | '
|
|
||||||
echo ' |___/ |_| '
|
|
||||||
echo "$hs_version"
|
|
||||||
echo
|
|
||||||
}
|
|
||||||
export -f title
|
|
||||||
|
|
||||||
|
|
||||||
help(){
|
|
||||||
[[ $help == "true" ]] && clear -x
|
|
||||||
|
|
||||||
echo "Access the HeavyScript Menu"
|
|
||||||
echo "---------------------------"
|
|
||||||
echo "bash heavy_script.sh"
|
|
||||||
echo
|
|
||||||
echo "Utilities"
|
|
||||||
echo "---------"
|
|
||||||
echo "--mount | Initiates mounting feature, choose between unmounting and mounting PVC data"
|
|
||||||
echo "--restore | Opens a menu to restore a \"heavy_script\" backup that was taken on your \"ix-applications\" dataset"
|
|
||||||
echo "--delete-backup | Opens a menu to delete backups on your system"
|
|
||||||
echo "--dns | list all of your applications DNS names and their web ports"
|
|
||||||
echo "--cmd | Open a shell for one of your applications"
|
|
||||||
echo
|
|
||||||
echo "Update Types"
|
|
||||||
echo "------------"
|
|
||||||
echo "-U | Update all applications, ignores versions"
|
|
||||||
echo "-U 5 | Same as above, but updates 5 applications at one time"
|
|
||||||
echo "-u | Update all applications, does not update Major releases"
|
|
||||||
echo "-u 5 | Same as above, but updates 5 applications at one time"
|
|
||||||
echo
|
|
||||||
echo "Update Options"
|
|
||||||
echo "--------------"
|
|
||||||
echo "-r | Roll-back applications if they fail to update"
|
|
||||||
echo "-i | Add application to ignore list, one by one, see example below."
|
|
||||||
echo "-S | Shutdown applications prior to updating"
|
|
||||||
echo "-v | verbose output"
|
|
||||||
echo "-t 500| The amount of time HS will wait for an application to be ACTIVE. Defaults to 500 seconds"
|
|
||||||
echo
|
|
||||||
echo "Additional Options"
|
|
||||||
echo "------------------"
|
|
||||||
echo "-b 14 | Back-up your ix-applications dataset, specify a number after -b"
|
|
||||||
echo "-s | sync catalog"
|
|
||||||
echo "-p | Prune unused/old docker images"
|
|
||||||
echo "--ignore-img | Ignore container image updates"
|
|
||||||
echo "--self-update | Updates HeavyScript prior to running any other commands"
|
|
||||||
echo
|
|
||||||
echo "Examples"
|
|
||||||
echo "--------"
|
|
||||||
echo "bash heavy_script.sh"
|
|
||||||
echo "bash heavy_script.sh -b 14 -i portainer -i arch -i sonarr -t 600 -vrsUp --self-update"
|
|
||||||
echo "bash heavy_script.sh -b 14 -i portainer -i arch -i sonarr -t 600 -vrsp -U 10 --self-update"
|
|
||||||
echo "bash /mnt/tank/scripts/heavy_script.sh -t 150 --mount"
|
|
||||||
echo "bash /mnt/tank/scripts/heavy_script.sh --dns"
|
|
||||||
echo "bash heavy_script.sh --restore"
|
|
||||||
echo "bash /mnt/tank/scripts/heavy_script.sh --delete-backup"
|
|
||||||
echo
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
export -f help
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
patch_2212_backups(){
|
|
||||||
clear -x
|
|
||||||
#Check TrueNAS version, skip if not 22.12.0
|
|
||||||
if ! [ "$(cli -m csv -c 'system version' | awk -F '-' '{print $3}')" == "22.12.0" ]; then
|
|
||||||
echo "This patch does not apply to your version of TrueNAS"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
#Description
|
|
||||||
echo "This patch will fix the issue with backups not restoring properly"
|
|
||||||
echo "Due to Ix-Systems not saving PVC in backups, this patch will fix that"
|
|
||||||
echo "Otherwise backups will not restore properly"
|
|
||||||
echo "You only need to run this patch once, it will not run again"
|
|
||||||
echo
|
|
||||||
|
|
||||||
|
|
||||||
#Download patch
|
|
||||||
echo "Downloading Backup Patch"
|
|
||||||
if ! wget -q https://github.com/truecharts/truetool/raw/main/hotpatch/2212/HP1.patch; then
|
|
||||||
echo "Failed to download Backup Patch"
|
|
||||||
exit
|
|
||||||
else
|
|
||||||
echo "Downloaded Backup Patch"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo
|
|
||||||
|
|
||||||
# Apply patch
|
|
||||||
echo "Applying Backup Patch"
|
|
||||||
if patch -N --reject-file=/dev/null -s -p0 -d /usr/lib/python3/dist-packages/middlewared/ < HP1.patch &>/dev/null; then
|
|
||||||
echo "Backup Patch applied"
|
|
||||||
rm -rf HP1.patch
|
|
||||||
else
|
|
||||||
echo "Backup Patch already applied"
|
|
||||||
rm -rf HP1.patch
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo
|
|
||||||
|
|
||||||
#Restart middlewared
|
|
||||||
while true
|
|
||||||
do
|
|
||||||
echo "We need to restart middlewared to finish the patch"
|
|
||||||
echo "This will cause a short downtime for some minor services approximately 10-30 seconds"
|
|
||||||
echo "Applications should not be affected"
|
|
||||||
read -rt 120 -p "Would you like to proceed? (y/N): " yesno || { echo -e "\nFailed to make a selection in time" ; exit; }
|
|
||||||
case $yesno in
|
|
||||||
[Yy] | [Yy][Ee][Ss])
|
|
||||||
echo "Restarting middlewared"
|
|
||||||
service middlewared restart &
|
|
||||||
wait $!
|
|
||||||
echo "Restarted middlewared"
|
|
||||||
echo "You are set, there is no need to run this patch again"
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
[Nn] | [Nn][Oo])
|
|
||||||
echo "Exiting"
|
|
||||||
echo "Please restart middlewared manually"
|
|
||||||
echo "You can do: service middlewared restart"
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "That was not an option, try again"
|
|
||||||
sleep 3
|
|
||||||
continue
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
patch_2212_backups2(){
|
|
||||||
clear -x
|
|
||||||
#Check TrueNAS version, skip if not 22.12.0
|
|
||||||
if ! [ "$(cli -m csv -c 'system version' | awk -F '-' '{print $3}')" == "22.12.0" ]; then
|
|
||||||
echo "This patch does not apply to your version of TrueNAS"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
#Description
|
|
||||||
echo "This patch will fix the issue certain applicattions breaking backups"
|
|
||||||
echo "You only need to run this patch once, it will not run again"
|
|
||||||
echo
|
|
||||||
|
|
||||||
|
|
||||||
# Apply patch
|
|
||||||
echo "Applying Backup Patch"
|
|
||||||
if patch -N --reject-file=/dev/null -s -p0 /usr/lib/python3/dist-packages/middlewared/plugins/kubernetes_linux/backup.py < patches/backups.patch &>/dev/null; then
|
|
||||||
echo "Backup Patch applied"
|
|
||||||
else
|
|
||||||
echo "Backup Patch already applied"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo
|
|
||||||
|
|
||||||
#Restart middlewared
|
|
||||||
while true
|
|
||||||
do
|
|
||||||
echo "We need to restart middlewared to finish the patch"
|
|
||||||
echo "This will cause a short downtime for some minor services approximately 10-30 seconds"
|
|
||||||
echo "Applications should not be affected"
|
|
||||||
read -rt 120 -p "Would you like to proceed? (y/N): " yesno || { echo -e "\nFailed to make a selection in time" ; exit; }
|
|
||||||
case $yesno in
|
|
||||||
[Yy] | [Yy][Ee][Ss])
|
|
||||||
echo "Restarting middlewared"
|
|
||||||
service middlewared restart &
|
|
||||||
wait $!
|
|
||||||
echo "Restarted middlewared"
|
|
||||||
echo "You are set, there is no need to run this patch again"
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
[Nn] | [Nn][Oo])
|
|
||||||
echo "Exiting"
|
|
||||||
echo "Please restart middlewared manually"
|
|
||||||
echo "You can do: service middlewared restart"
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "That was not an option, try again"
|
|
||||||
sleep 3
|
|
||||||
continue
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
@ -63,7 +63,7 @@ do
|
|||||||
else
|
else
|
||||||
echo -e "\nMounted\n$data_name"
|
echo -e "\nMounted\n$data_name"
|
||||||
fi
|
fi
|
||||||
echo -e "\nUnmount with:\nzfs set mountpoint=legacy $full_path && rmdir /mnt/heavyscript/$data_name\n\nOr use the Unmount All option\n"
|
echo -e "\nUnmount with:\nzfs set mountpoint=legacy $full_path && rmdir /mnt/truetool/$data_name\n\nOr use the Unmount All option\n"
|
||||||
|
|
||||||
#Ask if user would like to mount something else
|
#Ask if user would like to mount something else
|
||||||
while true
|
while true
|
||||||
@ -89,7 +89,7 @@ do
|
|||||||
done
|
done
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
mapfile -t unmount_array < <(basename -a /mnt/heavyscript/* | sed "s/*//")
|
mapfile -t unmount_array < <(basename -a /mnt/truetool/* | sed "s/*//")
|
||||||
[[ -z ${unmount_array[*]} ]] && echo "Theres nothing to unmount" && sleep 3 && continue
|
[[ -z ${unmount_array[*]} ]] && echo "Theres nothing to unmount" && sleep 3 && continue
|
||||||
for i in "${unmount_array[@]}"
|
for i in "${unmount_array[@]}"
|
||||||
do
|
do
|
||||||
@ -98,9 +98,9 @@ do
|
|||||||
pvc=$(echo "$main" | awk '{print $3}')
|
pvc=$(echo "$main" | awk '{print $3}')
|
||||||
full_path=$(find /mnt/"$pool"/ix-applications/releases/"$app"/volumes/ -maxdepth 0 | cut -c 6-)
|
full_path=$(find /mnt/"$pool"/ix-applications/releases/"$app"/volumes/ -maxdepth 0 | cut -c 6-)
|
||||||
zfs set mountpoint=legacy "$full_path""$pvc"
|
zfs set mountpoint=legacy "$full_path""$pvc"
|
||||||
echo "$i unmounted" && rmdir /mnt/heavyscript/"$i" || echo "failed to unmount $i"
|
echo "$i unmounted" && rmdir /mnt/truetool/"$i" || echo "failed to unmount $i"
|
||||||
done
|
done
|
||||||
rmdir /mnt/heavyscript
|
rmdir /mnt/truetool
|
||||||
sleep 3
|
sleep 3
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
|
@ -1,180 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
|
|
||||||
script_create(){
|
|
||||||
while true
|
|
||||||
do
|
|
||||||
clear -x
|
|
||||||
title
|
|
||||||
echo "Choose Your Update Type"
|
|
||||||
echo "-----------------------"
|
|
||||||
echo "1) -U | Update all applications, ignores versions"
|
|
||||||
echo "2) -u | Update all applications, does not update Major releases"
|
|
||||||
echo
|
|
||||||
echo "0) Exit"
|
|
||||||
echo
|
|
||||||
read -rt 120 -p "Type the Number or Flag: " current_selection || { echo -e "\nFailed to make a selection in time" ; exit; }
|
|
||||||
case $current_selection in
|
|
||||||
0 | [Ee][Xx][Ii][Tt])
|
|
||||||
echo "Exiting.."
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
1 | -U)
|
|
||||||
while true
|
|
||||||
do
|
|
||||||
echo -e "\nHow many applications do you want updating at the same time?"
|
|
||||||
read -rt 120 -p "Please type an integer greater than 0: " up_async || { echo -e "\nFailed to make a selection in time" ; exit; }
|
|
||||||
if [[ $up_async == 0 ]]; then
|
|
||||||
echo "Error: \"$up_async\" is less than 1"
|
|
||||||
echo "NOT adding it to the list"
|
|
||||||
sleep 3
|
|
||||||
continue
|
|
||||||
elif ! [[ $up_async =~ ^[0-9]+$ ]]; then
|
|
||||||
echo "Error: \"$up_async\" is invalid, it needs to be an integer"
|
|
||||||
echo "NOT adding it to the list"
|
|
||||||
sleep 3
|
|
||||||
continue
|
|
||||||
else
|
|
||||||
update_selection+=("-U" "$up_async")
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
2 | -u)
|
|
||||||
while true
|
|
||||||
do
|
|
||||||
echo -e "\nHow many applications do you want updating at the same time?"
|
|
||||||
read -rt 120 -p "Please type an integer greater than 0: " up_async || { echo -e "\nFailed to make a selection in time" ; exit; }
|
|
||||||
if [[ $up_async == 0 ]]; then
|
|
||||||
echo "Error: \"$up_async\" is less than 1"
|
|
||||||
echo "NOT adding it to the list"
|
|
||||||
sleep 3
|
|
||||||
continue
|
|
||||||
elif ! [[ $up_async =~ ^[0-9]+$ ]]; then
|
|
||||||
echo "Error: \"$up_async\" is invalid, it needs to be an integer"
|
|
||||||
echo "NOT adding it to the list"
|
|
||||||
sleep 3
|
|
||||||
continue
|
|
||||||
else
|
|
||||||
update_selection+=("-u" "$up_async")
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "$current_selection was not an option, try again" && sleep 3
|
|
||||||
continue
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
while true
|
|
||||||
do
|
|
||||||
clear -x
|
|
||||||
title
|
|
||||||
echo "Update Options"
|
|
||||||
echo "--------------"
|
|
||||||
echo "1) -r | Roll-back applications if they fail to update"
|
|
||||||
echo "2) -i | Add application to ignore list"
|
|
||||||
echo "3) -S | Shutdown applications prior to updating"
|
|
||||||
echo "4) -v | verbose output"
|
|
||||||
echo "5) -t | Set a custom timeout in seconds when checking if either an App or Mountpoint correctly Started, Stopped or (un)Mounted. Defaults to 500 seconds"
|
|
||||||
echo
|
|
||||||
echo "Additional Options"
|
|
||||||
echo "------------------"
|
|
||||||
echo "6) -b | Back-up your ix-applications dataset"
|
|
||||||
echo "7) -s | sync catalog"
|
|
||||||
echo "8) -p | Prune unused/old docker images"
|
|
||||||
echo "9) --ignore-img | Ignore container image updates"
|
|
||||||
echo "10) --self-update | Updates HeavyScript prior to running any other commands"
|
|
||||||
echo
|
|
||||||
echo "99) Remove Update Options, Restart"
|
|
||||||
echo "00) Done making selections, proceed with update"
|
|
||||||
echo
|
|
||||||
echo "0) Exit"
|
|
||||||
echo
|
|
||||||
echo "Current Choices"
|
|
||||||
echo "---------------"
|
|
||||||
echo "bash heavy_script.sh ${update_selection[*]}"
|
|
||||||
echo
|
|
||||||
read -rt 600 -p "Type the Number or Flag: " current_selection || { echo -e "\nFailed to make a selection in time" ; exit; }
|
|
||||||
case $current_selection in
|
|
||||||
0 | [Ee][Xx][Ii][Tt])
|
|
||||||
echo "Exiting.."
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
00)
|
|
||||||
clear -x
|
|
||||||
echo "Running \"bash heavy_script.sh ${update_selection[*]}\""
|
|
||||||
echo
|
|
||||||
exec bash "$script_name" "${update_selection[@]}"
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
1 | -r)
|
|
||||||
printf '%s\0' "${update_selection[@]}" | grep -Fxqz -- "-r" && echo -e "\"-r\" is already on here, skipping" && sleep 3 && continue #If option is already on there, skip it
|
|
||||||
update_selection+=("-r")
|
|
||||||
;;
|
|
||||||
2 | -i)
|
|
||||||
read -rt 120 -p "What is the name of the application we should ignore?: " up_ignore || { echo -e "\nFailed to make a selection in time" ; exit; }
|
|
||||||
! [[ $up_ignore =~ ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$ ]] && echo -e "Error: \"$up_ignore\" is not a possible option for an application name" && sleep 3 && continue
|
|
||||||
update_selection+=("-i" "$up_ignore")
|
|
||||||
;;
|
|
||||||
3 | -S)
|
|
||||||
printf '%s\0' "${update_selection[@]}" | grep -Fxqz -- "-S" && echo -e "\"-S\" is already on here, skipping" && sleep 3 && continue #If option is already on there, skip it
|
|
||||||
update_selection+=("-S")
|
|
||||||
;;
|
|
||||||
4 | -v)
|
|
||||||
printf '%s\0' "${update_selection[@]}" | grep -Fxqz -- "-v" && echo -e "\"-v\" is already on here, skipping" && sleep 3 && continue #If option is already on there, skip it
|
|
||||||
update_selection+=("-v")
|
|
||||||
;;
|
|
||||||
5 | -t)
|
|
||||||
printf '%s\0' "${update_selection[@]}" | grep -Fxqz -- "-t" && echo -e "\"-t\" is already on here, skipping" && sleep 3 && continue #If option is already on there, skip it
|
|
||||||
echo "What do you want your timeout to be?"
|
|
||||||
read -rt 120 -p "Please type an integer: " up_timeout || { echo -e "\nFailed to make a selection in time" ; exit; }
|
|
||||||
! [[ $up_timeout =~ ^[0-9]+$ ]] && echo -e "Error: \"$up_timeout\" is invalid, it needs to be an integer\nNOT adding it to the list" && sleep 3 && continue
|
|
||||||
update_selection+=("-t" "$up_timeout")
|
|
||||||
;;
|
|
||||||
6 | -b)
|
|
||||||
printf '%s\0' "${update_selection[@]}" | grep -Fxqz -- "-b" && echo -e "\"-b\" is already on here, skipping" && sleep 3 && continue #If option is already on there, skip it
|
|
||||||
echo "Up to how many backups should we keep?"
|
|
||||||
read -rt 120 -p "Please type an integer: " up_backups || { echo -e "\nFailed to make a selection in time" ; exit; }
|
|
||||||
! [[ $up_backups =~ ^[0-9]+$ ]] && echo -e "Error: \"$up_backups\" is invalid, it needs to be an integer\nNOT adding it to the list" && sleep 3 && continue
|
|
||||||
[[ $up_backups == 0 ]] && echo -e "Error: Number of backups cannot be 0\nNOT adding it to the list" && sleep 3 && continue
|
|
||||||
update_selection+=("-b" "$up_backups")
|
|
||||||
;;
|
|
||||||
7 | -s)
|
|
||||||
printf '%s\0' "${update_selection[@]}" | grep -Fxqz -- "-s" && echo -e "\"-s\" is already on here, skipping" && sleep 3 && continue #If option is already on there, skip it
|
|
||||||
update_selection+=("-s")
|
|
||||||
;;
|
|
||||||
8 | -p)
|
|
||||||
printf '%s\0' "${update_selection[@]}" | grep -Fxqz -- "-p" && echo -e "\"-p\" is already on here, skipping" && sleep 3 && continue #If option is already on there, skip it
|
|
||||||
update_selection+=("-p")
|
|
||||||
;;
|
|
||||||
9 | --ignore-img )
|
|
||||||
printf '%s\0' "${update_selection[@]}" | grep -Fxqz -- "--ignore-img" && echo -e "\"--ignore-img\" is already on here, skipping" && sleep 3 && continue #If option is already on there, skip it
|
|
||||||
update_selection+=("--ignore-img")
|
|
||||||
;;
|
|
||||||
10 | --self-update )
|
|
||||||
printf '%s\0' "${update_selection[@]}" | grep -Fxqz -- "--self-update" && echo -e "\"--self-update\" is already on here, skipping" && sleep 3 && continue #If option is already on there, skip it
|
|
||||||
update_selection+=("--self-update")
|
|
||||||
;;
|
|
||||||
99)
|
|
||||||
count=2
|
|
||||||
echo "restarting"
|
|
||||||
for i in "${update_selection[@]:2}"
|
|
||||||
do
|
|
||||||
unset "update_selection[$count]"
|
|
||||||
echo "$i removed"
|
|
||||||
((count++))
|
|
||||||
done
|
|
||||||
sleep 3
|
|
||||||
continue
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "\"$current_selection\" was not an option, try again" && sleep 3 && continue
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
}
|
|
||||||
export -f script_create
|
|
@ -1,37 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
|
|
||||||
args=("$@")
|
|
||||||
self_update() {
|
|
||||||
|
|
||||||
git fetch --tags &>/dev/null
|
|
||||||
git reset --hard &>/dev/null
|
|
||||||
latest_ver=$(git describe --tags "$(git rev-list --tags --max-count=1)")
|
|
||||||
echo "🅂 🄴 🄻 🄵"
|
|
||||||
echo "🅄 🄿 🄳 🄰 🅃 🄴"
|
|
||||||
if [[ "$hs_version" != "$latest_ver" ]] ; then
|
|
||||||
echo "Found a new version of HeavyScript, updating myself..."
|
|
||||||
git checkout "$latest_ver" &>/dev/null
|
|
||||||
count=0
|
|
||||||
for i in "${args[@]}"
|
|
||||||
do
|
|
||||||
[[ "$i" == "--self-update" ]] && unset "args[$count]" && break
|
|
||||||
((count++))
|
|
||||||
done
|
|
||||||
echo "Updating from: $hs_version"
|
|
||||||
echo "Updating To: $latest_ver"
|
|
||||||
echo "Changelog:"
|
|
||||||
curl --silent "https://api.github.com/repos/HeavyBullets8/heavy_script/releases/latest" | jq -r .body
|
|
||||||
echo
|
|
||||||
[[ -z ${args[*]} ]] && echo -e "No more arguments, exiting..\n\n" && exit
|
|
||||||
echo -e "Running the new version...\n\n"
|
|
||||||
sleep 5
|
|
||||||
exec bash "$script_name" "${args[@]}"
|
|
||||||
# Now exit this old instance
|
|
||||||
exit
|
|
||||||
else
|
|
||||||
echo "HeavyScript is already the latest version:"
|
|
||||||
echo -e "$hs_version\n\n"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
export -f self_update
|
|
161
heavy_script.sh
161
heavy_script.sh
@ -1,161 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
|
|
||||||
# cd to script, this ensures the script can find the source scripts below, even when ran from a seperate directory
|
|
||||||
script=$(readlink -f "$0")
|
|
||||||
script_path=$(dirname "$script")
|
|
||||||
script_name="heavy_script.sh"
|
|
||||||
cd "$script_path" || { echo "Error: Failed to change to script directory" ; exit ; }
|
|
||||||
|
|
||||||
#Version
|
|
||||||
hs_version=$(git describe --tags)
|
|
||||||
|
|
||||||
source functions/backup.sh
|
|
||||||
source functions/dns.sh
|
|
||||||
source functions/menu.sh
|
|
||||||
source functions/misc.sh
|
|
||||||
source functions/mount.sh
|
|
||||||
source functions/self_update.sh
|
|
||||||
source functions/update_apps.sh
|
|
||||||
source functions/cmd_to_container.sh
|
|
||||||
source functions/script_create.sh
|
|
||||||
|
|
||||||
|
|
||||||
#If no argument is passed, kill the script.
|
|
||||||
[[ -z "$*" || "-" == "$*" || "--" == "$*" ]] && menu
|
|
||||||
|
|
||||||
|
|
||||||
# Parse script options
|
|
||||||
while getopts ":si:rb:t:uUpSRv-:" opt
|
|
||||||
do
|
|
||||||
case $opt in
|
|
||||||
-)
|
|
||||||
case "${OPTARG}" in
|
|
||||||
help)
|
|
||||||
help="true"
|
|
||||||
;;
|
|
||||||
self-update)
|
|
||||||
self_update="true"
|
|
||||||
;;
|
|
||||||
dns)
|
|
||||||
dns="true"
|
|
||||||
;;
|
|
||||||
cmd)
|
|
||||||
cmd="true"
|
|
||||||
;;
|
|
||||||
restore)
|
|
||||||
restore="true"
|
|
||||||
;;
|
|
||||||
mount)
|
|
||||||
mount="true"
|
|
||||||
;;
|
|
||||||
delete-backup)
|
|
||||||
deleteBackup="true"
|
|
||||||
;;
|
|
||||||
ignore-img)
|
|
||||||
ignore_image_update="true"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo -e "Invalid Option \"--$OPTARG\"\n"
|
|
||||||
help
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
:)
|
|
||||||
echo -e "Option: \"-$OPTARG\" requires an argument\n"
|
|
||||||
help
|
|
||||||
;;
|
|
||||||
b)
|
|
||||||
number_of_backups=$OPTARG
|
|
||||||
! [[ $OPTARG =~ ^[0-9]+$ ]] && echo -e "Error: -b needs to be assigned an interger\n\"""$number_of_backups""\" is not an interger" >&2 && exit
|
|
||||||
[[ "$number_of_backups" -le 0 ]] && echo "Error: Number of backups is required to be at least 1" && exit
|
|
||||||
;;
|
|
||||||
r)
|
|
||||||
rollback="true"
|
|
||||||
;;
|
|
||||||
i)
|
|
||||||
if ! [[ $OPTARG =~ ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$ ]]; then # Using case insensitive version of the regex used by Truenas Scale
|
|
||||||
echo -e "Error: \"$OPTARG\" is not a possible option for an application name"
|
|
||||||
exit
|
|
||||||
else
|
|
||||||
ignore+=("$OPTARG")
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
t)
|
|
||||||
timeout=$OPTARG
|
|
||||||
! [[ $timeout =~ ^[0-9]+$ ]] && echo -e "Error: -t needs to be assigned an interger\n\"""$timeout""\" is not an interger" >&2 && exit
|
|
||||||
;;
|
|
||||||
s)
|
|
||||||
sync="true"
|
|
||||||
;;
|
|
||||||
U)
|
|
||||||
update_all_apps="true"
|
|
||||||
# Check next positional parameter
|
|
||||||
eval nextopt=${!OPTIND}
|
|
||||||
# existing or starting with dash?
|
|
||||||
if [[ -n $nextopt && $nextopt != -* ]] ; then
|
|
||||||
OPTIND=$((OPTIND + 1))
|
|
||||||
update_limit="$nextopt"
|
|
||||||
else
|
|
||||||
update_limit=1
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
u)
|
|
||||||
update_apps="true"
|
|
||||||
# Check next positional parameter
|
|
||||||
eval nextopt=${!OPTIND}
|
|
||||||
# existing or starting with dash?
|
|
||||||
if [[ -n $nextopt && $nextopt != -* ]] ; then
|
|
||||||
OPTIND=$((OPTIND + 1))
|
|
||||||
update_limit="$nextopt"
|
|
||||||
else
|
|
||||||
update_limit=1
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
S)
|
|
||||||
stop_before_update="true"
|
|
||||||
;;
|
|
||||||
p)
|
|
||||||
prune="true"
|
|
||||||
;;
|
|
||||||
v)
|
|
||||||
verbose="true"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo -e "Invalid Option \"-$OPTARG\"\n"
|
|
||||||
help
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
|
|
||||||
#exit if incompatable functions are called
|
|
||||||
[[ "$update_all_apps" == "true" && "$update_apps" == "true" ]] && echo -e "-U and -u cannot BOTH be called" && exit
|
|
||||||
|
|
||||||
#Continue to call functions in specific order
|
|
||||||
[[ "$self_update" == "true" ]] && self_update
|
|
||||||
[[ "$help" == "true" ]] && help
|
|
||||||
[[ "$cmd" == "true" ]] && cmd_to_container && exit
|
|
||||||
[[ "$deleteBackup" == "true" ]] && deleteBackup && exit
|
|
||||||
[[ "$dns" == "true" ]] && dns && exit
|
|
||||||
[[ "$restore" == "true" ]] && restore && exit
|
|
||||||
[[ "$mount" == "true" ]] && mount && exit
|
|
||||||
if [[ "$number_of_backups" -gt 1 && "$sync" == "true" ]]; then # Run backup and sync at the same time
|
|
||||||
echo "🅃 🄰 🅂 🄺 🅂 :"
|
|
||||||
echo -e "-Backing up ix-applications Dataset\n-Syncing catalog(s)"
|
|
||||||
echo -e "This can take a LONG time, Please Wait For Both Output..\n\n"
|
|
||||||
backup &
|
|
||||||
sync &
|
|
||||||
wait
|
|
||||||
elif [[ "$number_of_backups" -gt 1 && -z "$sync" ]]; then # If only backup is true, run it
|
|
||||||
echo "🅃 🄰 🅂 🄺 :"
|
|
||||||
echo -e "-Backing up \"ix-applications\" Dataset\nPlease Wait..\n\n"
|
|
||||||
backup
|
|
||||||
elif [[ "$sync" == "true" && -z "$number_of_backups" ]]; then # If only sync is true, run it
|
|
||||||
echo "🅃 🄰 🅂 🄺 :"
|
|
||||||
echo -e "Syncing Catalog(s)\nThis Takes a LONG Time, Please Wait..\n\n"
|
|
||||||
sync
|
|
||||||
fi
|
|
||||||
[[ "$update_all_apps" == "true" || "$update_apps" == "true" ]] && commander
|
|
||||||
[[ "$prune" == "true" ]] && prune
|
|
||||||
exit 0
|
|
@ -1,96 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
## Simple shortcut to just list the backups without promts and such
|
|
||||||
listBackups(){
|
|
||||||
echo -e "${BWhite}Backup Listing Tool${Color_Off}"
|
|
||||||
clear -x && echo "pulling all restore points.."
|
|
||||||
list_backups=$(cli -c 'app kubernetes list_backups' | grep -v system-update | sort -t '_' -Vr -k2,7 | tr -d " \t\r" | awk -F '|' '{print $2}' | nl | column -t)
|
|
||||||
[[ -z "$list_backups" ]] && echo -e "${IRed}No restore points available${Color_Off}" && exit || echo "Detected Backups:" && echo "$list_backups"
|
|
||||||
}
|
|
||||||
export -f listBackups
|
|
||||||
|
|
||||||
## Lists backups, except system-created backups, and promts which one to delete
|
|
||||||
deleteBackup(){
|
|
||||||
echo -e "${BWhite}Backup Deletion Tool${Color_Off}"
|
|
||||||
clear -x && echo "pulling all restore points.."
|
|
||||||
list_delete_backups=$(cli -c 'app kubernetes list_backups' | grep -v system-update | sort -t '_' -Vr -k2,7 | tr -d " \t\r" | awk -F '|' '{print $2}' | nl | column -t)
|
|
||||||
clear -x
|
|
||||||
# shellcheck disable=SC2015
|
|
||||||
[[ -z "$list_delete_backups" ]] && echo -e "${IRed}No restore points available${Color_Off}" && exit || { title; echo -e "Choose a restore point to delete\nThese may be out of order if they are not TrueTool backups" ; }
|
|
||||||
# shellcheck disable=SC2015
|
|
||||||
echo "$list_delete_backups" && read -rt 600 -p "Please type a number: " selection && restore_point=$(echo "$list_delete_backups" | grep ^"$selection " | awk '{print $2}')
|
|
||||||
[[ -z "$selection" ]] && echo "${IRed}Your selection cannot be empty${Color_Off}" && exit #Check for valid selection. If none, kill script
|
|
||||||
[[ -z "$restore_point" ]] && echo "Invalid Selection: $selection, was not an option" && exit #Check for valid selection. If none, kill script
|
|
||||||
echo -e "\nWARNING:\nYou CANNOT go back after deleting your restore point" || { echo "${IRed}FAILED${Color_Off}"; exit; }
|
|
||||||
# shellcheck disable=SC2015
|
|
||||||
echo -e "\n\nYou have chosen:\n$restore_point\n\nWould you like to continue?" && echo -e "1 Yes\n2 No" && read -rt 120 -p "Please type a number: " yesno || { echo "${IRed}FAILED${Color_Off}"; exit; }
|
|
||||||
if [[ $yesno == "1" ]]; then
|
|
||||||
echo -e "\nDeleting $restore_point" && cli -c 'app kubernetes delete_backup backup_name=''"'"$restore_point"'"' &>/dev/null && echo -e "${IGreen}Sucessfully deleted${Color_Off}" || echo -e "${IRed}Deletion FAILED${Color_Off}"
|
|
||||||
elif [[ $yesno == "2" ]]; then
|
|
||||||
echo "You've chosen NO, killing script."
|
|
||||||
else
|
|
||||||
echo -e "${IRed}Invalid Selection${Color_Off}"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
export -f deleteBackup
|
|
||||||
|
|
||||||
## Creates backups and deletes backups if a "backups to keep"-count is exceeded.
|
|
||||||
# backups-to-keep takes only heavyscript and truetool created backups into account, as other backups aren't guaranteed to be sorted correctly
|
|
||||||
backup(){
|
|
||||||
echo -e "${BWhite}Backup Tool${Color_Off}"
|
|
||||||
echo -e "\nNumber of backups was set to $number_of_backups"
|
|
||||||
date=$(date '+%Y_%m_%d_%H_%M_%S')
|
|
||||||
[[ "$verbose" == "true" ]] && cli -c 'app kubernetes backup_chart_releases backup_name=''"'TrueTool_"$date"'"'
|
|
||||||
[[ -z "$verbose" ]] && echo -e "\nNew Backup Name:" && cli -c 'app kubernetes backup_chart_releases backup_name=''"'TrueTool_"$date"'"' | tail -n 1
|
|
||||||
mapfile -t list_create_backups < <(cli -c 'app kubernetes list_backups' | grep 'HeavyScript\|TrueTool_' | sort -t '_' -Vr -k2,7 | awk -F '|' '{print $2}'| tr -d " \t\r")
|
|
||||||
# shellcheck disable=SC2309
|
|
||||||
if [[ ${#list_create_backups[@]} -gt "number_of_backups" ]]; then
|
|
||||||
echo -e "\nDeleting the oldest backup(s) for exceeding limit:"
|
|
||||||
overflow=$(( ${#list_create_backups[@]} - "$number_of_backups" ))
|
|
||||||
mapfile -t list_overflow < <(cli -c 'app kubernetes list_backups' | grep "TrueTool_" | sort -t '_' -V -k2,7 | awk -F '|' '{print $2}'| tr -d " \t\r" | head -n "$overflow")
|
|
||||||
for i in "${list_overflow[@]}"
|
|
||||||
do
|
|
||||||
cli -c 'app kubernetes delete_backup backup_name=''"'"$i"'"' &> /dev/null || echo "${IRed}FAILED${Color_Off} to delete $i"
|
|
||||||
echo "$i"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
export -f backup
|
|
||||||
|
|
||||||
## Lists available backup and prompts the users to select a backup to restore
|
|
||||||
restore(){
|
|
||||||
echo -e "${BWhite}Backup Restoration Tool${Color_Off}"
|
|
||||||
clear -x && echo "pulling restore points.."
|
|
||||||
list_restore_backups=$(cli -c 'app kubernetes list_backups' | grep "TrueTool_" | sort -t '_' -Vr -k2,7 | tr -d " \t\r" | awk -F '|' '{print $2}' | nl | column -t)
|
|
||||||
clear -x
|
|
||||||
# shellcheck disable=SC2015
|
|
||||||
[[ -z "$list_restore_backups" ]] && echo "No TrueTool restore points available" && exit || { title; echo "Choose a restore point" ; }
|
|
||||||
echo "$list_restore_backups" && read -rt 600 -p "Please type a number: " selection && restore_point=$(echo "$list_restore_backups" | grep ^"$selection " | awk '{print $2}')
|
|
||||||
[[ -z "$selection" ]] && echo "Your selection cannot be empty" && exit #Check for valid selection. If none, kill script
|
|
||||||
[[ -z "$restore_point" ]] && echo "Invalid Selection: $selection, was not an option" && exit #Check for valid selection. If none, kill script
|
|
||||||
echo -e "\nWARNING:\nThis is NOT guranteed to work\nThis is ONLY supposed to be used as a LAST RESORT\nConsider rolling back your applications instead if possible" || { echo "${IRed}FAILED${Color_Off}"; exit; }
|
|
||||||
# shellcheck disable=SC2015
|
|
||||||
echo -e "\n\nYou have chosen:\n$restore_point\n\nWould you like to continue?" && echo -e "1 Yes\n2 No" && read -rt 120 -p "Please type a number: " yesno || { echo "${IRed}FAILED${Color_Off}"; exit; }
|
|
||||||
if [[ $yesno == "1" ]]; then
|
|
||||||
echo -e "\nStarting Restore, this will take a ${BWhite}LONG${Color_Off} time."
|
|
||||||
pool=$(cli -c 'app kubernetes config' | grep -E "pool\s\|" | awk -F '|' '{print $3}' | tr -d " \t\n\r")
|
|
||||||
echo "Correcting PVC mountpoints..."
|
|
||||||
for pvc in $(zfs list -t filesystem -r "$pool"/ix-applications -o name -H | grep "/ix-applications/" | grep "volumes/pvc")
|
|
||||||
do
|
|
||||||
zfs set mountpoint=legacy "${pvc}" || echo "Fixing PVC mountpoints Failed for ${pvc}... Continuing..."
|
|
||||||
done
|
|
||||||
# Ensure readonly is turned off
|
|
||||||
if ! zfs set readonly=off "$pool"/ix-applications;then
|
|
||||||
echo -e "Error: Failed to set ZFS ReadOnly to \"off\""
|
|
||||||
echo -e "After the restore, attempt to run the following command manually:"
|
|
||||||
echo "zfs set readonly=off $pool/ix-applications"
|
|
||||||
fi
|
|
||||||
echo "Triggering restore process..."
|
|
||||||
cli -c 'app kubernetes restore_backup backup_name=''"'"$restore_point"'"' || echo "Restore ${IRed}FAILED${Color_Off}"
|
|
||||||
elif [[ $yesno == "2" ]]; then
|
|
||||||
echo "You've chosen NO, killing script. Good luck."
|
|
||||||
else
|
|
||||||
echo -e "${IRed}Invalid Selection${Color_Off}"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
export -f restore
|
|
@ -25,18 +25,21 @@ export -f kubeapiEnable
|
|||||||
|
|
||||||
# Prune unused docker images to prevent dataset/snapshot bloat related slowdowns on SCALE
|
# Prune unused docker images to prevent dataset/snapshot bloat related slowdowns on SCALE
|
||||||
prune(){
|
prune(){
|
||||||
echo -e "${BWhite}Docker Prune${Color_Off}"
|
echo -e "🄿 🅁 🅄 🄽 🄴"
|
||||||
echo "Pruning Docker Images..."
|
if (( "$scaleVersion" >= 22120 )); then
|
||||||
docker image prune -af | grep "^Total" && echo -e "${IGreen}Docker Prune Successfull${Color_Off}" || echo "Docker Prune ${IRed}FAILED${Color_Off}"
|
cli -c 'app container config prune prune_options={"remove_unused_images": true, "remove_stopped_containers": true}' | head -n -4 || echo "Failed to Prune Docker Images"
|
||||||
|
else
|
||||||
# TODO Switch to middleware prune on next release
|
docker image prune -af | grep "^Total" || echo "Failed to Prune Docker Images"
|
||||||
# midclt call container.prune '{"remove_unused_images": true, "remove_stopped_containers": true}' &> /dev/null && echo "Docker Prune completed"|| echo "Docker Prune ${IRed}FAILED${Color_Off}"
|
fi
|
||||||
}
|
}
|
||||||
export -f prune
|
export -f prune
|
||||||
|
|
||||||
#
|
middlewareRestart() {
|
||||||
sync(){
|
echo "We need to restart middlewared."
|
||||||
echo -e "${BWhite}Starting Catalog Sync...${Color_Off}"
|
echo "This will cause a short downtime for the webui approximately 10-30 seconds"
|
||||||
cli -c 'app catalog sync_all' &> /dev/null && echo -e "${IGreen}Catalog sync complete${Color_Off}" || echo -e "${IRed}Catalog Sync Failed${Color_Off}"
|
echo "Restarting middlewared"
|
||||||
|
service middlewared restart &
|
||||||
|
wait $!
|
||||||
|
echo "Restarted middlewared"
|
||||||
}
|
}
|
||||||
export -f sync
|
export -f middlewareRestart
|
||||||
|
@ -1,113 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# shellcheck disable=SC2034
|
|
||||||
|
|
||||||
# Reset
|
|
||||||
Color_Off='\033[0m' # Text Reset
|
|
||||||
|
|
||||||
# Regular Colors
|
|
||||||
Black='\033[0;30m' # Black
|
|
||||||
Red='\033[0;31m' # Red
|
|
||||||
Green='\033[0;32m' # Green
|
|
||||||
Yellow='\033[0;33m' # Yellow
|
|
||||||
Blue='\033[0;34m' # Blue
|
|
||||||
Purple='\033[0;35m' # Purple
|
|
||||||
Cyan='\033[0;36m' # Cyan
|
|
||||||
White='\033[0;37m' # White
|
|
||||||
|
|
||||||
# Bold
|
|
||||||
BBlack='\033[1;30m' # Black
|
|
||||||
BRed='\033[1;31m' # Red
|
|
||||||
BGreen='\033[1;32m' # Green
|
|
||||||
BYellow='\033[1;33m' # Yellow
|
|
||||||
BBlue='\033[1;34m' # Blue
|
|
||||||
BPurple='\033[1;35m' # Purple
|
|
||||||
BCyan='\033[1;36m' # Cyan
|
|
||||||
BWhite='\033[1;37m' # White
|
|
||||||
|
|
||||||
# Underline
|
|
||||||
UBlack='\033[4;30m' # Black
|
|
||||||
URed='\033[4;31m' # Red
|
|
||||||
UGreen='\033[4;32m' # Green
|
|
||||||
UYellow='\033[4;33m' # Yellow
|
|
||||||
UBlue='\033[4;34m' # Blue
|
|
||||||
UPurple='\033[4;35m' # Purple
|
|
||||||
UCyan='\033[4;36m' # Cyan
|
|
||||||
UWhite='\033[4;37m' # White
|
|
||||||
|
|
||||||
# High Intensity
|
|
||||||
IBlack='\033[0;90m' # Black
|
|
||||||
IRed='\033[0;91m' # Red
|
|
||||||
IGreen='\033[0;92m' # Green
|
|
||||||
IYellow='\033[0;93m' # Yellow
|
|
||||||
IBlue='\033[0;94m' # Blue
|
|
||||||
IPurple='\033[0;95m' # Purple
|
|
||||||
ICyan='\033[0;96m' # Cyan
|
|
||||||
IWhite='\033[0;97m' # White
|
|
||||||
|
|
||||||
|
|
||||||
# Bold High Intensity
|
|
||||||
BIBlack='\033[1;90m' # Black
|
|
||||||
BIRed='\033[1;91m' # Red
|
|
||||||
BIGreen='\033[1;92m' # Green
|
|
||||||
BIYellow='\033[1;93m' # Yellow
|
|
||||||
BIBlue='\033[1;94m' # Blue
|
|
||||||
BIPurple='\033[1;95m' # Purple
|
|
||||||
BICyan='\033[1;96m' # Cyan
|
|
||||||
BIWhite='\033[1;97m' # White
|
|
||||||
|
|
||||||
noColor(){
|
|
||||||
# Reset
|
|
||||||
Color_Off=""
|
|
||||||
|
|
||||||
# Regular Colors
|
|
||||||
Black=""
|
|
||||||
Red=""
|
|
||||||
Green=""
|
|
||||||
Yellow=""
|
|
||||||
Blue=""
|
|
||||||
Purple=""
|
|
||||||
Cyan=""
|
|
||||||
White=""
|
|
||||||
|
|
||||||
# Bold
|
|
||||||
BBlack=""
|
|
||||||
BRed=""
|
|
||||||
BGreen=""
|
|
||||||
BYellow=""
|
|
||||||
BBlue=""
|
|
||||||
BPurple=""
|
|
||||||
BCyan=""
|
|
||||||
BWhite=""
|
|
||||||
|
|
||||||
# Underline
|
|
||||||
UBlack=""
|
|
||||||
URed=""
|
|
||||||
UGreen=""
|
|
||||||
UYellow=""
|
|
||||||
UBlue=""
|
|
||||||
UPurple=""
|
|
||||||
UCyan=""
|
|
||||||
UWhite=""
|
|
||||||
|
|
||||||
# High Intensity
|
|
||||||
IBlack=""
|
|
||||||
IRed=""
|
|
||||||
IGreen=""
|
|
||||||
IYellow=""
|
|
||||||
IBlue=""
|
|
||||||
IPurple=""
|
|
||||||
ICyan=""
|
|
||||||
IWhite=""
|
|
||||||
|
|
||||||
|
|
||||||
# Bold High Intensity
|
|
||||||
BIBlack=""
|
|
||||||
BIRed=""
|
|
||||||
BIGreen=""
|
|
||||||
BIYellow=""
|
|
||||||
BIBlue=""
|
|
||||||
BIPurple=""
|
|
||||||
BICyan=""
|
|
||||||
BIWhite=""
|
|
||||||
}
|
|
||||||
export -f noColor
|
|
@ -1,27 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
dns(){
|
|
||||||
echo -e "${BWhite}Service DNS Names Tool${Color_Off}"
|
|
||||||
clear -x
|
|
||||||
echo "Generating Internal Service DNS Names..."
|
|
||||||
#ignored dependency pods, may need to add more in the future.
|
|
||||||
dep_ignore="\-cronjob\-|^kube-system|\ssvclb|NAME|\-memcached\-.[^custom\-app]|\-postgresql\-.[^custom\-app]|\-redis\-.[^custom\-app]|\-mariadb\-.[^custom\-app]|\-promtail\-.[^custom\-app]"
|
|
||||||
|
|
||||||
# Pulling pod names
|
|
||||||
mapfile -t main < <(k3s kubectl get pods -A | grep -Ev "$dep_ignore" | sort)
|
|
||||||
|
|
||||||
# Pulling all ports
|
|
||||||
all_ports=$(k3s kubectl get service -A)
|
|
||||||
|
|
||||||
clear -x
|
|
||||||
count=0
|
|
||||||
for i in "${main[@]}"
|
|
||||||
do
|
|
||||||
[[ count -le 0 ]] && echo -e "\n" && ((count++))
|
|
||||||
appName=$(echo "$i" | awk '{print $2}' | sed 's/-[^-]*-[^-]*$//' | sed 's/-0//')
|
|
||||||
ixName=$(echo "$i" | awk '{print $1}')
|
|
||||||
port=$(echo "$all_ports" | grep -E "\s$appName\s" | awk '{print $6}' | grep -Eo "^[[:digit:]]+{1}")
|
|
||||||
[[ -n "$port" ]] && echo -e "$appName.$ixName.svc.cluster.local $port"
|
|
||||||
done | uniq | nl -b t | sed 's/\s\s\s$/- -------- ----/' | column -t -R 1 -N "#,DNS_Name,Port" -L
|
|
||||||
}
|
|
||||||
export -f dns
|
|
@ -2,17 +2,29 @@
|
|||||||
|
|
||||||
patchv22120(){
|
patchv22120(){
|
||||||
echo "Applying 22.12 HotPatch 1"
|
echo "Applying 22.12 HotPatch 1"
|
||||||
( wget -q -P /tmp https://github.com/truecharts/truetool/raw/main/hotpatch/2212/HP1.patch && echo "download completed" || echo "download failed" ) && ( patch -N -s -p0 -d /usr/lib/python3/dist-packages/middlewared/ < /tmp/HP1.patch && service middlewared restart && echo "waiting 20 seconds for middleware restart..." && sleep 20 && echo "patch completed" || echo "patch failed or skipped, not critical" ) && rm -rf /tmp/HP1.patch
|
|
||||||
|
( wget -q -P /tmp https://github.com/truecharts/truetool/raw/main/hotpatch/2212/HP1.patch && echo "download completed" || echo "download failed" ) && ( patch -N -s -p0 -d /usr/lib/python3/dist-packages/middlewared/ &>/dev/null < /tmp/HP1.patch && echo "patch completed" || echo "Patch Already Applied" ) && rm -rf /tmp/HP1.patch
|
||||||
|
|
||||||
echo "Applying 22.12 HotPatch 2"
|
echo "Applying 22.12 HotPatch 2"
|
||||||
( wget -q -P /tmp https://github.com/truecharts/truetool/raw/main/hotpatch/2212/HP2.patch && echo "download completed" || echo "download failed" ) && ( patch -N -s -p0 -d /usr/lib/python3/dist-packages/middlewared/ < /tmp/HP2.patch && service middlewared restart && echo "waiting 20 seconds for middleware restart..." && sleep 20 && echo "patch completed" || echo "patch failed or skipped, not critical" ) && rm -rf /tmp/HP2.patch
|
( wget -q -P /tmp https://github.com/truecharts/truetool/raw/main/hotpatch/2212/HP2.patch && echo "download completed" || echo "download failed" ) && ( patch -N -s -p0 -d /usr/lib/python3/dist-packages/middlewared/ &>/dev/null < /tmp/HP2.patch && echo "patch completed" || echo "Patch Already Applied" ) && rm -rf /tmp/HP2.patch
|
||||||
}
|
}
|
||||||
export -f patchv22120
|
export -f patchv22120
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
hotpatch(){
|
hotpatch(){
|
||||||
echo "Starting hotpatcher..."
|
echo "Starting hotpatcher..."
|
||||||
if [ "$(cli -m csv -c 'system version' | awk -F '-' '{print $3}')" == "22.12.0" ]; then
|
restartmiddleware=no
|
||||||
|
if (( "$scaleVersion" == 22120 )); then
|
||||||
patchv22120
|
patchv22120
|
||||||
|
restartmiddleware=yes
|
||||||
|
else
|
||||||
|
echo "No hotpatch available for your version, congratulations!"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if (( "$restartmiddleware" == "yes" )); then
|
||||||
|
middlewareRestart
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
export -f hotpatch
|
export -f hotpatch
|
||||||
|
@ -1,123 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
update_apps(){
|
|
||||||
echo -e "${BWhite}App Updater${Color_Off}"
|
|
||||||
[[ -z $timeout ]] && echo -e "Default Timeout: 500" && timeout=500 || echo -e "\nCustom Timeout: $timeout"
|
|
||||||
[[ "$timeout" -le 120 ]] && echo "Warning: Your timeout is set low and may lead to premature rollbacks or skips"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "Creating list of Apps to update..."
|
|
||||||
|
|
||||||
# Render a list of ignored applications, so users can verify their ignores got parsed correctly.
|
|
||||||
if [[ -z ${ignore[*]} ]]; then
|
|
||||||
echo "No apps added to ignore list, continuing..."
|
|
||||||
else
|
|
||||||
echo "ignored applications:"
|
|
||||||
for ignored in "${ignore[@]}"
|
|
||||||
do
|
|
||||||
echo "${ignored}"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
mapfile -t array < <(cli -m csv -c 'app chart_release query name,update_available,human_version,human_latest_version,container_images_update_available,status' | grep -E ",true(,|$)" | sort)
|
|
||||||
[[ -z ${array[*]} ]] && echo -e "\nThere are no updates available or middleware timed out" && return 0 || echo -e "\n${#array[@]} update(s) available:"
|
|
||||||
PIDlist=()
|
|
||||||
|
|
||||||
# Draft a list of app names, seperate from actuall execution
|
|
||||||
# This prevents outputs getting mixed together
|
|
||||||
for i in "${array[@]}"
|
|
||||||
do
|
|
||||||
app_name=$(echo "$i" | awk -F ',' '{print $1}') #print out first catagory, name.
|
|
||||||
echo "$app_name"
|
|
||||||
done
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "Updating Apps..."
|
|
||||||
|
|
||||||
# Create a background task for each update as async solution
|
|
||||||
for i in "${array[@]}"
|
|
||||||
do
|
|
||||||
executeUpdate "${i}" &
|
|
||||||
PIDlist+=($!)
|
|
||||||
done
|
|
||||||
echo ""
|
|
||||||
echo "Waiting for update results..."
|
|
||||||
|
|
||||||
# Wait for all the async updates to complete
|
|
||||||
for p in "${PIDlist[@]}"
|
|
||||||
do
|
|
||||||
wait "${p}" ||:
|
|
||||||
done
|
|
||||||
|
|
||||||
}
|
|
||||||
export -f update_apps
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# This is a combination of stopping previously-stopped apps and apps stuck Deploying after update
|
|
||||||
after_update_actions(){
|
|
||||||
SECONDS=0
|
|
||||||
count=0
|
|
||||||
sleep 15
|
|
||||||
|
|
||||||
# Keep this running and exit the endless-loop based on a timer, instead of a countered-while-loop
|
|
||||||
# shellcheck disable=SC2050
|
|
||||||
while [[ "0" != "1" ]]
|
|
||||||
do
|
|
||||||
(( count++ ))
|
|
||||||
status=$(cli -m csv -c 'app chart_release query name,update_available,human_version,human_latest_version,status' | grep "^$app_name," | awk -F ',' '{print $2}')
|
|
||||||
if [[ "$status" == "ACTIVE" && "$startstatus" == "STOPPED" ]]; then
|
|
||||||
[[ "$verbose" == "true" ]] && echo "Returing to STOPPED state.."
|
|
||||||
midclt call chart.release.scale "$app_name" '{"replica_count": 0}' &> /dev/null && echo "Stopped"|| echo "FAILED"
|
|
||||||
break
|
|
||||||
elif [[ "$SECONDS" -ge "$timeout" && "$status" == "DEPLOYING" && "$failed" != "true" ]]; then
|
|
||||||
echo -e "Error: Run Time($SECONDS) for $app_name has exceeded Timeout($timeout)\nIf this is a slow starting application, set a higher timeout with -t\nIf this applicaion is always DEPLOYING, you can disable all probes under the Healthcheck Probes Liveness section in the edit configuration\nReverting update.."
|
|
||||||
midclt call chart.release.rollback "$app_name" "{\"item_version\": \"$rollback_version\"}" &> /dev/null
|
|
||||||
[[ "$startstatus" == "STOPPED" ]] && failed="true" && after_update_actions && unset failed #run back after_update_actions function if the app was stopped prior to update
|
|
||||||
break
|
|
||||||
elif [[ "$SECONDS" -ge "$timeout" && "$status" == "DEPLOYING" && "$failed" == "true" ]]; then
|
|
||||||
echo -e "Error: Run Time($SECONDS) for $app_name has exceeded Timeout($timeout)\nThe application failed to be ACTIVE even after a rollback,\nManual intervention is required\nAbandoning"
|
|
||||||
break
|
|
||||||
elif [[ "$status" == "STOPPED" ]]; then
|
|
||||||
[[ "$count" -le 1 && "$verbose" == "true" ]] && echo "Verifying Stopped.." && sleep 15 && continue #if reports stopped on FIRST time through loop, double check
|
|
||||||
[[ "$count" -le 1 && -z "$verbose" ]] && sleep 15 && continue #if reports stopped on FIRST time through loop, double check
|
|
||||||
echo "Stopped" && break #if reports stopped any time after the first loop, assume its extermal services.
|
|
||||||
elif [[ "$status" == "ACTIVE" ]]; then
|
|
||||||
[[ "$count" -le 1 && "$verbose" == "true" ]] && echo "Verifying Active.." && sleep 15 && continue #if reports active on FIRST time through loop, double check
|
|
||||||
[[ "$count" -le 1 && -z "$verbose" ]] && sleep 15 && continue #if reports active on FIRST time through loop, double check
|
|
||||||
echo "Active" && break #if reports active any time after the first loop, assume actually active.
|
|
||||||
else
|
|
||||||
[[ "$verbose" == "true" ]] && echo "Waiting $((timeout-SECONDS)) more seconds for $app_name to be ACTIVE"
|
|
||||||
sleep 15
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
export -f after_update_actions
|
|
||||||
|
|
||||||
# Determine what all the required information for the App to update, check it and execute the update using the SCALE API
|
|
||||||
executeUpdate(){
|
|
||||||
app_name=$(echo "$1" | awk -F ',' '{print $1}') #print out first catagory, name.
|
|
||||||
old_app_ver=$(echo "$1" | awk -F ',' '{print $4}' | awk -F '_' '{print $1}' | awk -F '.' '{print $1}') #previous/current Application MAJOR Version
|
|
||||||
new_app_ver=$(echo "$1" | awk -F ',' '{print $5}' | awk -F '_' '{print $1}' | awk -F '.' '{print $1}') #new Application MAJOR Version
|
|
||||||
old_chart_ver=$(echo "$1" | awk -F ',' '{print $4}' | awk -F '_' '{print $2}' | awk -F '.' '{print $1}') # Old Chart MAJOR version
|
|
||||||
new_chart_ver=$(echo "$1" | awk -F ',' '{print $5}' | awk -F '_' '{print $2}' | awk -F '.' '{print $1}') # New Chart MAJOR version
|
|
||||||
status=$(echo "$1" | awk -F ',' '{print $2}') #status of the app: STOPPED / DEPLOYING / ACTIVE
|
|
||||||
startstatus=$status
|
|
||||||
diff_app=$(diff <(echo "$old_app_ver") <(echo "$new_app_ver")) #caluclating difference in major app versions
|
|
||||||
diff_chart=$(diff <(echo "$old_chart_ver") <(echo "$new_chart_ver")) #caluclating difference in Chart versions
|
|
||||||
old_full_ver=$(echo "$1" | awk -F ',' '{print $4}') #Upgraded From
|
|
||||||
new_full_ver=$(echo "$1" | awk -F ',' '{print $5}') #Upraded To
|
|
||||||
rollback_version=$(echo "$1" | awk -F ',' '{print $4}' | awk -F '_' '{print $2}')
|
|
||||||
printf '%s\0' "${ignore[@]}" | grep -iFxqz "${app_name}" && echo -e "\n$app_name\nIgnored, skipping" && return #If application is on ignore list, skip
|
|
||||||
if [[ "$diff_app" == "$diff_chart" || "$update_all_apps" == "true" ]]; then #continue to update
|
|
||||||
[[ "$verbose" == "true" ]] && echo "Updating.."
|
|
||||||
# shellcheck disable=SC2015
|
|
||||||
cli -c 'app chart_release upgrade release_name=''"'"$app_name"'"' &> /dev/null && echo -e "Updated $app_name\n$old_full_ver\n$new_full_ver" && after_update_actions || { echo -e "$app_name: update ${IRed}FAILED${Color_Off}"; return; }
|
|
||||||
else
|
|
||||||
echo -e "\n$app_name\nMajor Release, update manually"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
export -f executeUpdate
|
|
48
truetool.sh
48
truetool.sh
@ -12,29 +12,32 @@ targetRepo="https://github.com/truecharts/truetool.git"
|
|||||||
cd "${SCRIPT_DIR}" || echo -e "ERROR: Something went wrong accessing the script directory"
|
cd "${SCRIPT_DIR}" || echo -e "ERROR: Something went wrong accessing the script directory"
|
||||||
|
|
||||||
# Includes
|
# Includes
|
||||||
# shellcheck source=includes/backup.sh
|
|
||||||
source includes/backup.sh
|
|
||||||
# shellcheck source=includes/chores.sh
|
# shellcheck source=includes/chores.sh
|
||||||
source includes/chores.sh
|
source includes/chores.sh
|
||||||
# shellcheck source=includes/colors.sh
|
|
||||||
source includes/colors.sh
|
|
||||||
# shellcheck source=includes/dns.sh
|
|
||||||
source includes/dns.sh
|
|
||||||
# shellcheck source=includes/help.sh
|
# shellcheck source=includes/help.sh
|
||||||
source includes/help.sh
|
source includes/help.sh
|
||||||
# shellcheck source=includes/help.sh
|
# shellcheck source=includes/help.sh
|
||||||
source includes/patch.sh
|
source includes/patch.sh
|
||||||
# shellcheck source=includes/mount.sh
|
|
||||||
source includes/mount.sh
|
|
||||||
# shellcheck source=includes/no_args.sh
|
# shellcheck source=includes/no_args.sh
|
||||||
source includes/no_args.sh
|
source includes/no_args.sh
|
||||||
# shellcheck source=includes/title.sh
|
# shellcheck source=includes/title.sh
|
||||||
source includes/title.sh
|
source includes/title.sh
|
||||||
# shellcheck source=includes/update.sh
|
|
||||||
source includes/update.sh
|
|
||||||
# shellcheck source=includes/update_self.sh
|
# shellcheck source=includes/update_self.sh
|
||||||
source includes/update_self.sh
|
source includes/update_self.sh
|
||||||
|
|
||||||
|
# Libraries loaded from Heavyscript
|
||||||
|
# shellcheck source=functions/dns.sh
|
||||||
|
source functions/dns.sh
|
||||||
|
# shellcheck source=functions/misc.sh
|
||||||
|
source functions/misc.sh
|
||||||
|
# shellcheck source=functions/mount.sh
|
||||||
|
source functions/mount.sh
|
||||||
|
# shellcheck source=functions/backup.sh
|
||||||
|
source functions/backup.sh
|
||||||
|
# shellcheck source=functions/update_apps.sh
|
||||||
|
source functions/update_apps.sh
|
||||||
|
|
||||||
|
|
||||||
#If no argument is passed, set flag to show menu
|
#If no argument is passed, set flag to show menu
|
||||||
if [[ -z "$*" || "-" == "$*" || "--" == "$*" ]]; then
|
if [[ -z "$*" || "-" == "$*" || "--" == "$*" ]]; then
|
||||||
no_args="true"
|
no_args="true"
|
||||||
@ -73,9 +76,6 @@ else
|
|||||||
kubeapi-enable)
|
kubeapi-enable)
|
||||||
kubeapiEnable="true"
|
kubeapiEnable="true"
|
||||||
;;
|
;;
|
||||||
no-color)
|
|
||||||
noColor
|
|
||||||
;;
|
|
||||||
*)
|
*)
|
||||||
echo -e "Invalid Option \"--$OPTARG\"\n" && help
|
echo -e "Invalid Option \"--$OPTARG\"\n" && help
|
||||||
exit
|
exit
|
||||||
@ -131,6 +131,10 @@ title
|
|||||||
|
|
||||||
[[ "$enableUpdate" == "true" ]] && updater "$@"
|
[[ "$enableUpdate" == "true" ]] && updater "$@"
|
||||||
|
|
||||||
|
scaleVersion=$(cli -c 'system version' | awk -F '-' '{print $3}' | awk -F '.' '{print $1 $2 $3}' | tr -d " \t\r\.")
|
||||||
|
update_limit=$(nproc --all)
|
||||||
|
rollback="true"
|
||||||
|
|
||||||
## Always check if a hotpatch needs to be applied
|
## Always check if a hotpatch needs to be applied
|
||||||
hotpatch
|
hotpatch
|
||||||
|
|
||||||
@ -173,7 +177,21 @@ fi
|
|||||||
[[ "$dns" == "true" ]] && dns && exit
|
[[ "$dns" == "true" ]] && dns && exit
|
||||||
[[ "$restore" == "true" ]] && restore && exit
|
[[ "$restore" == "true" ]] && restore && exit
|
||||||
[[ "$mountPVC" == "true" ]] && mountPVC && exit
|
[[ "$mountPVC" == "true" ]] && mountPVC && exit
|
||||||
[[ "$number_of_backups" -ge 1 ]] && backup
|
if [[ "$number_of_backups" -gt 1 && "$sync" == "true" ]]; then # Run backup and sync at the same time
|
||||||
[[ "$sync" == "true" ]] && sync
|
echo "Running Apps Backup & Syncing Catalog"
|
||||||
|
if [[ "$prune" == "true" ]]; then
|
||||||
|
prune &
|
||||||
|
fi
|
||||||
|
backup &
|
||||||
|
sync &
|
||||||
|
wait
|
||||||
|
elif [[ "$number_of_backups" -gt 1 && -z "$sync" ]]; then # If only backup is true, run it
|
||||||
|
echo "Running Apps Backup"
|
||||||
|
backup
|
||||||
|
elif [[ "$sync" == "true" && -z "$number_of_backups" ]]; then # If only sync is true, run it
|
||||||
|
echo "Syncing Catalog"
|
||||||
|
echo -e "Syncing Catalog(s)\n\n"
|
||||||
|
sync
|
||||||
|
fi
|
||||||
[[ "$update_all_apps" == "true" || "$update_apps" == "true" ]] && update_apps
|
[[ "$update_all_apps" == "true" || "$update_apps" == "true" ]] && update_apps
|
||||||
[[ "$prune" == "true" ]] && prune
|
[[ "$prune" == "true" ]] && prune
|
||||||
|
Loading…
Reference in New Issue
Block a user