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,87 @@ do
done
# 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=$(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}')
## Check to see if empty PVC data is present in any of the applications ##
# 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
restore_point_date=$(echo "$restore_point" | awk -F '_' '{print $2 $3 $4 $5 $6}' | tr -d "_")
# Iterate over the list of files
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
# 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"
if read -rt 120 -p "Would you like to proceed? (y/N): " yesno || { echo -e "\nFailed to make a selection in time" ; exit; }; then
# If there is empty PVC data, exit
if [[ $borked == True ]]; then
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
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
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.."
@ -182,7 +246,6 @@ do
continue
;;
esac
fi
done

View File

@ -13,6 +13,7 @@ echo "4) Backup Options"
echo "5) Update HeavyScript"
echo "6) Update Applications"
echo "7) Command to Container"
echo "8) Patch 22.12.0"
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; }
@ -79,6 +80,9 @@ case $selection in
7)
cmd_to_container
;;
8)
patch_2212_backups
;;
*)
echo "\"$selection\" was not an option, please try agian" && sleep 3 && menu
;;

View File

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