Files
mastering-unix-ss/chapter27/function_expire_backup
Fabio Scotto di Santolo 4cc88d2f6e initial commit
2020-07-28 19:28:25 +02:00

165 lines
4.3 KiB
Plaintext
Executable File

expire_backup ()
{
# This function is used to expire backups
# set -x # Uncomment to debug this function
clear # Clear the screen
# Display the screen header and menu
echo -e "
\n\n\t\tDIRVISH EXPIRE BACKUP(S)\n
\n\t1) Delete Expired Backups for ALL Hosts
\n\t2) Delete Expired Backups for One Host
\n\t3) Expire One Backup for One Host
\n\t4) Expire All Backups for One Host
\n\t5) Previous Menu
\n\n\tSelect an Option: \c"
read ANS
case $ANS in
1) echo -e "\n\tDeleting Expired Backups for ALL Hosts..."
dirvish-expire --tree
echo -e "\n\tTasks Complete..."
echo -e "\n\tPress Enter to Continue...\c"
read KEY
;;
2) echo -e "\n\tEnter the Hostname to Delete Expired Backups: \c"
read H
dirvish-expire --tree --vault $H | more
echo -e "\n\tTasks Complete..."
echo -e "\n\tPress Enter to Continue...\c"
read KEY
;;
3) EXPIRE_STAMP="$(date "+%Y-%m-%d %H:%M:%S")"
echo -e "\n\tEnter the Hostname for the Backup Image: \c"
read H
BANK_LIST=$(parse_conf)
MYPWD=$(pwd)
for B in $BANK_LIST
do
if [ -d ${B}/${H} ]
then
cd ${B}/${H}
IMAGE_LIST=$(find . -type d -name "*-[0-9][0-9]*" | cut -c3-)
fi
done
echo -e "\nSelect an Image to Expire from the Following List:\n"
echo -e "\n$IMAGE_LIST" | more
echo -e "\n\nEnter the Image to Expire: \c"
read IMAGE_NAME
cd $MYPWD
if [[ -r ${B}/${H}/${IMAGE_NAME}/summary ]]
then
# This is where we expire a backup that is not currently
# expired. The 'summary' file contains the expire datestamp
echo -e "\n\tExpiring Image: $IMAGE_NAME"
sed s/"$(grep Expire ${B}/${H}/${IMAGE_NAME}/summary)"/"$(grep Expire ${B}/${H}/${IMAGE_NAME}/summary | cut -f 1-4 -d ' ') $EXPIRE_STAMP"/g "${B}/${H}/${IMAGE_NAME}/summary" > "${B}/${H}/${IMAGE_NAME}/summary2"
mv "${B}/${H}/${IMAGE_NAME}/summary2" "${B}/${H}/${IMAGE_NAME}/summary"
fi
# We expired the backups; now we ask the user if we should delete
# the expired images
STOP=0
until (( STOP == 1 ))
do
echo -e "\n\tTasks Complete...Do You Want to Delete This Expired Image? (y/n): \c"
read ANS
case $ANS in
y|Y) echo -e "\n\tDeleting Expired Image: $IMAGE_NAME"
# This next command deletes all expired images for $H
dirvish-expire --vault $H
RC=$?
echo -e "\n\tDirvish-expire Completed with Return Code: $RC"
echo -e "\n\tTasks Complete..."
echo -e "\n\tPress Enter to Continue...\c"
read KEY
STOP=1
;;
n|N) STOP=1
continue
;;
*) echo -e "\n\tInvalid Entry..."
;;
esac
done
;;
4) EXPIRE_STAMP=$(date "+%Y-%m-%d %H:%M:%S")
clear
echo -e "\nEnter the Hostname for the Backup Image: \c"
read H
BANK_LIST=$(parse_conf)
MYPWD=$(pwd)
for P in $BANK_LIST
do
if [ -d ${P}/${H} ]
then
cd ${P}/${H}
IMAGE_LIST=$(find . -type d -name "*-[0-9][0-9]*" | cut -c3-)
B=$P
fi
done
echo -e "\nSetting to Following Images to Expire:\n\n"
echo "$IMAGE_LIST" | more
cd $MYPWD
echo -e "\nPress Enter to Continue...\c"
echo "$IMAGE_LIST" | while read IMAGE_NAME
do
if [ -f ${B}/${H}/${IMAGE_NAME}/summary ]
then
echo "Expiring $IMAGE_NAME"
sed s/"$(grep Expire ${B}/${H}/${IMAGE_NAME}/summary)"/"$(grep Expire ${B}/${H}/${IMAGE_NAME}/summary | cut -f 1-4 -d ' ') $EXPIRE_STAMP"/g "${B}/${H}/${IMAGE_NAME}/summary" > "${B}/${H}/${IMAGE_NAME}/summary2"
if (( $? == 0 ))
then
mv ${B}/${H}/${IMAGE_NAME}/summary2 ${B}/${H}/${IMAGE_NAME}/summary
fi
fi
done
STOP=0
until (( STOP == 1 ))
do
echo -e "\nTasks Complete...Do You Want to Delete Expired Images? (y/n): \c"
read ANS
case $ANS in
y|Y) echo -e "\nDeleting Expired Images...\n"
dirvish-expire --vault $H
RC=$?
echo -e "\nDirvish-expire Completed with Return Code: $RC"
echo -e "\nTasks Complete..."
echo -e "\nPress Enter to Continue...\c"
read KEY
STOP=1
;;
n|N) STOP=1
continue
;;
*) echo -e "\n\tInvalid Entry..."
;;
esac
done
;;
5) :
;;
*) echo -e "\nInvalid Entry"
;;
esac
}