Merge pull request #33 from Heavybullets8/hot-patch

Hot patch
This commit is contained in:
Heavybullets8 2022-12-18 20:33:04 +00:00 committed by GitHub
commit 1b11ce9348
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 158 additions and 15 deletions

View File

@ -149,23 +149,35 @@ do
done done
# Get the date of system version and when it was updated ## Check to see if empty PVC data is present in any of the applications ##
current_version=$(cli -m csv -c 'system version' | awk -F '-' '{print $3}')
when_updated=$(cli -m csv -c 'system bootenv query created,realname' | grep "$current_version",\
| awk -F ',' '{print $2}' | sed 's/[T|-]/_/g' | sed 's/:/_/g' | awk -F '_' '{print $1 $2 $3 $4 $5}')
# Find all pv_info.json files two subfolders deep
pool=$(cli -c 'app kubernetes config' | grep -E "pool\s\|" | awk -F '|' '{print $3}' | tr -d " \t\n\r")
files=$(find "$(find /mnt/"$pool"/ix-applications/backups -maxdepth 0 )" -name pv_info.json | grep "$restore_point");
# Get the date of the chosen restore point # Iterate over the list of files
restore_point_date=$(echo "$restore_point" | awk -F '_' '{print $2 $3 $4 $5 $6}' | tr -d "_") for file in $files; do
# Check if the file only contains {} subfolders two deep
contents=$(cat $file)
if [[ "$contents" == '{}' ]]; then
# Print the file if it meets the criterion
file=$(echo "$file" | awk -F '/' '{print $7}')
borked_array+="$file\n"
borked=True
fi
done
# If there is empty PVC data, exit
# Compare the dates if [[ $borked == True ]]; then
while (("$restore_point_date" < "$when_updated" )) echo "Warning!:"
echo "The following applications have empty PVC data:"
for file in $borked_array; do
echo -e "$file"
done
echo "You need to ensure these applications are not supposed to have PVC data before proceeding"
while true
do do
clear -x read -rt 120 -p "Would you like to proceed? (y/N): " yesno || { echo -e "\nFailed to make a selection in time" ; exit; }
echo "The restore point you have chosen is from an older version of Truenas Scale"
echo "This is not recommended, as it may cause issues with the system"
if read -rt 120 -p "Would you like to proceed? (y/N): " yesno || { echo -e "\nFailed to make a selection in time" ; exit; }; then
case $yesno in case $yesno in
[Yy] | [Yy][Ee][Ss]) [Yy] | [Yy][Ee][Ss])
echo "Proceeding.." echo "Proceeding.."
@ -182,7 +194,58 @@ do
continue continue
;; ;;
esac esac
done
fi fi
## Check the restore point, and ensure it is the same version as the current system ##
# Boot Query
boot_query=$(cli -m csv -c 'system bootenv query created,realname')
# Get the date of system version and when it was updated
current_version=$(cli -m csv -c 'system version' | awk -F '-' '{print $3}')
when_updated=$(echo "$boot_query" | grep "$current_version",\
| awk -F ',' '{print $2}' | sed 's/[T|-]/_/g' | sed 's/:/_/g' | awk -F '_' '{print $1 $2 $3 $4 $5}')
# Get the date of the chosen restore point
restore_point_date=$(echo "$restore_point" | awk -F '_' '{print $2 $3 $4 $5 $6}' | tr -d "_")
# Grab previous version
previous_version=$(echo "$boot_query" | sort -nr | grep -A 1 "$current_version," | tail -n 1)
# Compare the dates
while (("$restore_point_date" < "$when_updated" ))
do
clear -x
echo "The restore point you have chosen is from an older version of Truenas Scale"
echo "This is not recommended, as it may cause issues with the system"
echo
echo "Current SCALE Information:"
echo "Version: $current_version"
echo "When Updated: $(echo "$restore_point" | awk -F '_' '{print $2 "-" $3 "-" $4}')"
echo
echo "Restore Point SCALE Information:"
echo "Version: $(echo "$previous_version" | awk -F ',' '{print $1}')"
echo "When Updated: $(echo "$previous_version" | awk -F ',' '{print $2}' | awk -F 'T' '{print $1}')"
echo
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 "Proceeding.."
sleep 3
break
;;
[Nn] | [Nn][Oo])
echo "Exiting"
exit
;;
*)
echo "That was not an option, try again"
sleep 3
continue
;;
esac
done done

View File

@ -13,6 +13,7 @@ echo "4) Backup Options"
echo "5) Update HeavyScript" echo "5) Update HeavyScript"
echo "6) Update Applications" echo "6) Update Applications"
echo "7) Command to Container" echo "7) Command to Container"
echo "8) Patch 22.12.0"
echo echo
echo "0) Exit" echo "0) Exit"
read -rt 120 -p "Please select an option by number: " selection || { echo -e "\nFailed to make a selection in time" ; exit; } read -rt 120 -p "Please select an option by number: " selection || { echo -e "\nFailed to make a selection in time" ; exit; }
@ -79,6 +80,9 @@ case $selection in
7) 7)
cmd_to_container cmd_to_container
;; ;;
8)
patch_2212_backups
;;
*) *)
echo "\"$selection\" was not an option, please try agian" && sleep 3 && menu echo "\"$selection\" was not an option, please try agian" && sleep 3 && menu
;; ;;

View File

@ -98,3 +98,79 @@ echo
exit exit
} }
export -f help 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
}
export -f patchv22120