Actualiser Backup_OpenStack_Vms_And_Volumes.sh
This commit is contained in:
parent
420caf4aa6
commit
64836447f2
1 changed files with 366 additions and 106 deletions
|
@ -1,154 +1,414 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
#OS Credentials and settings
|
||||
export OS_AUTH_TYPE=xxxx
|
||||
export OS_AUTH_URL=xxxx
|
||||
export OS_IDENTITY_API_VERSION=xxx
|
||||
export OS_REGION_NAME="xxxx"
|
||||
export OS_INTERFACE=public
|
||||
export OS_APPLICATION_CREDENTIAL_ID=xxxx
|
||||
export OS_APPLICATION_CREDENTIAL_SECRET=xxxx
|
||||
#source openrc.sh
|
||||
#export OS_AUTH_TYPE=v3applicationcredential
|
||||
#export OS_AUTH_URL=https://auth.cloud.ovh.net/
|
||||
#export OS_IDENTITY_API_VERSION=3
|
||||
#export OS_INTERFACE=public
|
||||
#export OS_REGION_NAME="GRA11"
|
||||
#export OS_APPLICATION_CREDENTIAL_ID=
|
||||
#export OS_APPLICATION_CREDENTIAL_SECRET=
|
||||
|
||||
export TODAY=$(date +"%Y-%m-%d_%HH%M")
|
||||
export LOG_FILE=/var/log/backup/OpenStack_Vms_And_Volumes_${TODAY}.log
|
||||
#Daily Retention (Nb of months)
|
||||
export DAILY_RETENTION=7
|
||||
|
||||
#Daily_Retention
|
||||
export DAILY_RETENTION=15
|
||||
#Monthly Retention (Nb of months)
|
||||
# 0 = disable monthly backup
|
||||
export MONTHLY_RETENTION=0
|
||||
# DAY OF MOUNTH TO EXECUTE MONTHLY BACKUP
|
||||
# 01 ... 30 31
|
||||
export DAY_MONTHLY_BACKUP=01
|
||||
|
||||
#Yearly Retention (Nb of year)
|
||||
# 0 = disable Yearly backup
|
||||
export YEARLY_RETENTION=0
|
||||
# DAY OF MOUNTH TO EXECUTE YEARLY BACKUP
|
||||
# 01 ... 30 31
|
||||
export DAY_OF_YEARLY_BACKUP=01
|
||||
# MOUNTH TO EXECUTE YEARLY BACKUP
|
||||
# 01:january... 12:December
|
||||
export MONTH_OF_YEARLY_BACKUP=01
|
||||
|
||||
#Set TimeZone
|
||||
export TZ=Europe/Paris
|
||||
|
||||
TODAY=$(date +"%Y-%m-%d_%HH%M")
|
||||
DAY_OF_MONTH=$(date +"%d")
|
||||
MONTH_OF_YEAR=$(date +"%m")
|
||||
|
||||
#Set Binary
|
||||
OPENSTACK=/usr/bin/openstack
|
||||
JQ=jq
|
||||
GREP=grep
|
||||
SORT=sort
|
||||
|
||||
#Delay to wait and to check the end of backup
|
||||
CHECK_BACKUP_DELAY=3600
|
||||
CHECK_FREQUENCY=300
|
||||
|
||||
#Init Variables
|
||||
BCK_VOLUMES_LIST=()
|
||||
BCK_SERVERS_LIST=()
|
||||
BCK_INSTANCES_LIST=()
|
||||
|
||||
echo "======================================================" >>${LOG_FILE} 2>&1
|
||||
date +"[%Y-%m-%d_%HH%M] - Listing of instances to be backed up" >>${LOG_FILE} 2>&1
|
||||
echo "======================================================" >>${LOG_FILE} 2>&1
|
||||
PREFIX=Daily
|
||||
if [ "${DAY_OF_MONTH}" = "${DAY_MONTHLY_BACKUP}" ] && [ "${MONTHLY_RETENTION}" != "0" ]; then
|
||||
PREFIX=Monthly
|
||||
fi
|
||||
|
||||
if SERVERS=$(/usr/bin/openstack server list -f json| jq -r '.[].Name'); then
|
||||
if [ "${DAY_OF_MONTH}" = "${DAY_OF_YEARLY_BACKUP}" ] && [ "${MONTH_OF_YEAR}" = "${MONTH_OF_YEARLY_BACKUP}" ] && [ "${YEARLY_RETENTION}" != "0" ]; then
|
||||
PREFIX=Yearly
|
||||
fi
|
||||
|
||||
date +"[%Y-%m-%d_%HH%M] ---> Instance(s) found" >>${LOG_FILE} 2>&1
|
||||
EXIT=0
|
||||
|
||||
function check_prerequistes(){
|
||||
echo ""
|
||||
_info "================================================================================"
|
||||
_info " - checking prerequisites"
|
||||
_info "================================================================================"
|
||||
|
||||
_info " ---> Show OpenStack Version"
|
||||
${OPENSTACK} --version
|
||||
retVal=$?
|
||||
if [ $retVal -ne 0 ]; then
|
||||
_err " ---> with openstack client"
|
||||
${OPENSTACK} --version 2>&1
|
||||
exit $retVal
|
||||
fi
|
||||
|
||||
_info " ---> Show jq version"
|
||||
${JQ} --version
|
||||
retVal=$?
|
||||
if [ $retVal -ne 0 ]; then
|
||||
_err " ---> with jq"
|
||||
${JQ} --version 2>&1
|
||||
exit $retVal
|
||||
fi
|
||||
|
||||
_info " ---> Show grep version"
|
||||
${GREP} --version
|
||||
retVal=$?
|
||||
if [ $retVal -ne 0 ]; then
|
||||
_err " ---> with grep"
|
||||
${GREP} --version 2>&1
|
||||
exit $retVal
|
||||
fi
|
||||
|
||||
_info " ---> Show sort version"
|
||||
${SORT} --version
|
||||
retVal=$?
|
||||
if [ $retVal -ne 0 ]; then
|
||||
_err " ---> with sort"
|
||||
${SORT} --version 2>&1
|
||||
exit $retVal
|
||||
fi
|
||||
}
|
||||
|
||||
function backup(){
|
||||
echo""
|
||||
_info "================================================================================"
|
||||
_info " - Starting Backup of instances and volumes"
|
||||
_info "================================================================================"
|
||||
|
||||
_info_blue " ---> Listing instance(s) to be backed up"
|
||||
SERVERS=$(${OPENSTACK} server list -f json| ${JQ} -r '.[].Name')
|
||||
echo $SERVERS;
|
||||
|
||||
retVal=$?
|
||||
if [ $retVal -ne 0 ]; then
|
||||
_err " ---> Listing servers"
|
||||
${OPENSTACK} server list -f json| ${JQ} -r '.[].Name' 2>&1
|
||||
exit $retVal
|
||||
fi
|
||||
|
||||
if [[ -z "$SERVERS" ]]; then
|
||||
_warning " ---> No instance found ! Exit"
|
||||
echo $SERVERS
|
||||
exit 0
|
||||
fi
|
||||
|
||||
_info " ---> Instance(s) found"
|
||||
for SERVER in $SERVERS
|
||||
do
|
||||
SNAPSHOT_SERVER=${SERVER}_${TODAY}
|
||||
|
||||
date +"[%Y-%m-%d_%HH%M] ------> [Instance : ${SERVER}] === === Launching the backup === ===" >>${LOG_FILE} 2>&1
|
||||
date +"[%Y-%m-%d_%HH%M] ------> [Instance : ${SERVER}] ---> Listing of volumes attached" >>${LOG_FILE} 2>&1
|
||||
_info_blue " ------> [Instance : ${SERVER}] === === Launching the backup === ==="
|
||||
_info " ------> [Instance : ${SERVER}] ---> Listing of volumes attached"
|
||||
|
||||
if VOLUMES_ATTACHED=$(/usr/bin/openstack server volume list ${SERVER} -f json | jq -r '.[]."Volume ID"'); then
|
||||
VOLUMES_ATTACHED=$(${OPENSTACK} server volume list ${SERVER} -f json | ${JQ} -r '.[]."Volume ID"')
|
||||
retVal=$?
|
||||
if [ $retVal -ne 0 ]; then
|
||||
_err " ---> Listing volumes"
|
||||
${OPENSTACK} server volume list ${SERVER} -f json | ${JQ} -r '.[]."Volume ID"' 2>&1
|
||||
EXIT=$retVal
|
||||
fi
|
||||
|
||||
date +"[%Y-%m-%d_%HH%M] ------> [Srv : ${SERVER}] ------> Attached volume(s) Found" >>${LOG_FILE} 2>&1
|
||||
if [[ -n "$VOLUMES_ATTACHED" ]]; then
|
||||
|
||||
_info " ------> [Instance : ${SERVER}] ------> Attached volume(s) Found"
|
||||
|
||||
for VOLUME_ATTACHED_ID in $VOLUMES_ATTACHED
|
||||
do
|
||||
VOLUME_ATTACHED_NAME=$(/usr/bin/openstack volume show ${VOLUME_ATTACHED_ID} -f json | jq -r '.name')
|
||||
BCK_VOLUME_ATTACHED_NAME=Backup_${VOLUME_ATTACHED_NAME}_${TODAY}
|
||||
VOLUME_ATTACHED_NAME=$(${OPENSTACK} volume show ${VOLUME_ATTACHED_ID} -f json | ${JQ} -r '.name')
|
||||
BCK_VOLUME_ATTACHED_NAME=${PREFIX}_${VOLUME_ATTACHED_NAME}_${TODAY}
|
||||
|
||||
date +"[%Y-%m-%d_%HH%M] ------> [Srv : ${SERVER}] ------> Launching the backup of the volume ${VOLUME_ATTACHED_NAME} to ${BCK_VOLUME_ATTACHED_NAME}" >>${LOG_FILE} 2>&1
|
||||
BCK_VOLUMES_LIST+=(${BCK_VOLUME_ATTACHED_NAME})
|
||||
/usr/bin/openstack volume backup create --name ${BCK_VOLUME_ATTACHED_NAME} ${VOLUME_ATTACHED_NAME} --force >>${LOG_FILE} 2>&1
|
||||
_info_action " ------> [Instance : ${SERVER}] ------> Launching the backup of the volume ${VOLUME_ATTACHED_NAME} to ${BCK_VOLUME_ATTACHED_NAME}"
|
||||
BCK_VOLUMES_LIST+=(${BCK_VOLUME_ATTACHED_NAME})
|
||||
${OPENSTACK} volume backup create --name ${BCK_VOLUME_ATTACHED_NAME} ${VOLUME_ATTACHED_NAME} --force
|
||||
done
|
||||
|
||||
else
|
||||
|
||||
date +"[%Y-%m-%d_%HH%M] ------> [Srv : ${SERVER}] ------> No volumes attached" >>${LOG_FILE} 2>&1
|
||||
|
||||
_info " ------> [Instance : ${SERVER}] ------> No volumes attached"
|
||||
${OPENSTACK} server volume list ${SERVER} -f json | ${JQ} -r '.[]."Volume ID"' 2>&1
|
||||
fi
|
||||
|
||||
BCK_SERVER=Backup_${SERVER}_${TODAY}
|
||||
BCK_SERVER=${PREFIX}_${SERVER}_${TODAY}
|
||||
|
||||
date +"[%Y-%m-%d_%HH%M] ------> [Srv : ${SERVER}] ---> Launching the Snapshot of the instance ${SERVER} to ${BCK_SERVER}" >>${LOG_FILE} 2>&1
|
||||
BCK_SERVERS_LIST+=(${BCK_SERVER})
|
||||
_info_action " ------> [Instance : ${SERVER}] ---> Launching the Snapshot of the instance ${SERVER} to ${BCK_SERVER}"
|
||||
BCK_INSTANCES_LIST+=(${BCK_SERVER})
|
||||
${OPENSTACK} server backup create --name ${BCK_SERVER} ${SERVER}
|
||||
|
||||
/usr/bin/openstack server backup create --rotate ${DAILY_RETENTION} --name ${BCK_SERVER} ${SERVER} >>${LOG_FILE} 2>&1
|
||||
|
||||
date +"[%Y-%m-%d_%HH%M] ------> [Srv : ${SERVER}] === === End of the backup === ===" >>${LOG_FILE} 2>&1
|
||||
_info_blue " ------> [Instance : ${SERVER}] === === End of the backup === ==="
|
||||
done
|
||||
else
|
||||
echo "No instance found" >>${LOG_FILE} 2>&1
|
||||
fi
|
||||
}
|
||||
|
||||
echo "======================================================" >>${LOG_FILE} 2>&1
|
||||
date +"[%Y-%m-%d_%HH%M] - Confirm that's all backup is OK" >>${LOG_FILE} 2>&1
|
||||
echo "======================================================" >>${LOG_FILE} 2>&1
|
||||
function check_backup(){
|
||||
echo ""
|
||||
_info "================================================================================"
|
||||
_info " - Confirm that's all backup is OK"
|
||||
_info "================================================================================"
|
||||
|
||||
MAXIMUM_TIMESTAMP=`date -d '+'${CHECK_BACKUP_DELAY}' seconds' '+%s'`
|
||||
MAXIMUM_TIMESTAMP=`date -d '+'${CHECK_BACKUP_DELAY}' seconds' '+%s'`
|
||||
|
||||
echo ""
|
||||
_info " => Checking the backup of volumes"
|
||||
for BCK_VOLUME in "${BCK_VOLUMES_LIST[@]}"
|
||||
do
|
||||
RESULT=false
|
||||
while [ ! "$RESULT" = "true" ];
|
||||
do
|
||||
_info " Checking Backup for ${BCK_VOLUME} and waiting ${CHECK_FREQUENCY} secondes"
|
||||
|
||||
date +"[%Y-%m-%d_%HH%M] => Checking the backup of volumes" >>${LOG_FILE} 2>&1
|
||||
for CHECK_BCK_VOLUME in ${BCK_VOLUMES_LIST}
|
||||
do
|
||||
RESULT=false
|
||||
while [ ! "$RESULT" = "true" ];
|
||||
CURRENT_TIMESTAMP=`date +%s`
|
||||
if [ "$CURRENT_TIMESTAMP" -gt "$MAXIMUM_TIMESTAMP" ]; then
|
||||
_err " Backup for ${BCK_VOLUME} verification time expired"
|
||||
exit -1
|
||||
fi
|
||||
|
||||
RESULT=$(${OPENSTACK} volume backup list -f json | jq -c '.[] | select(.Name | contains("'${BCK_VOLUME}'")) | .Status == "available"')
|
||||
sleep ${CHECK_FREQUENCY}
|
||||
done
|
||||
_info_action " Backup Volume ${BCK_VOLUME} is OK"
|
||||
done
|
||||
|
||||
echo ""
|
||||
_info " => Checking Backup Instance"
|
||||
for BCK_INSTANCE in "${BCK_INSTANCES_LIST[@]}"
|
||||
do
|
||||
RESULT=false
|
||||
while [ ! "$RESULT" = "true" ];
|
||||
do
|
||||
_info " Checking Backup for ${BCK_INSTANCE} and waiting 60 secondes"
|
||||
|
||||
CURRENT_TIMESTAMP=`date +%s`
|
||||
if [ "$CURRENT_TIMESTAMP" -gt "$MAXIMUM_TIMESTAMP" ]; then
|
||||
_err " Backup for ${BCK_INSTANCE} verification time expired"
|
||||
exit -1
|
||||
fi
|
||||
|
||||
RESULT=`${OPENSTACK} image show ${BCK_INSTANCE} -f json | ${JQ} -r '.properties.image_state == "available" and .status == "active"'`
|
||||
sleep 60
|
||||
done
|
||||
_info_action " Backup Instance ${BCK_INSTANCE} is OK"
|
||||
done
|
||||
}
|
||||
|
||||
function manage_retention(){
|
||||
echo ""
|
||||
_info "================================================================================"
|
||||
_info " - Manage Backup Retention"
|
||||
_info "================================================================================"
|
||||
|
||||
echo ""
|
||||
_info " ====> Manage Retention for Backup Volumes <===="
|
||||
ALL_BCK_VOLUMES=$(${OPENSTACK} volume backup list -f json)
|
||||
|
||||
for BCK_VOLUME in "${BCK_VOLUMES_LIST[@]}"
|
||||
do
|
||||
date +"[%Y-%m-%d_%HH%M] Checking Backup for ${CHECK_BCK_VOLUME} and waiting 60 secondes" >>${LOG_FILE} 2>&1
|
||||
|
||||
CURRENT_TIMESTAMP=`date +%s`
|
||||
if [ "$CURRENT_TIMESTAMP" -gt "$MAXIMUM_TIMESTAMP" ]; then
|
||||
date +"[%Y-%m-%d_%HH%M] [ERROR] backup for ${CHECK_BCK_VOLUME} verification time expired" >>${LOG_FILE} 2>&1
|
||||
exit -1
|
||||
_info " ---> Manage Daily Backup Volume ${BCK_VOLUME} retention : Keep last ${DAILY_RETENTION} Days"
|
||||
_info " ---> List Backup Volume(s) :"
|
||||
echo ${ALL_BCK_VOLUMES} | ${JQ} -r '.[].Name' | ${GREP} ${BCK_VOLUME} | ${SORT} -r
|
||||
OLD_DAILY_VOLUMES=$(echo ${ALL_BCK_VOLUMES} | ${JQ} -r '.[].Name' | ${GREP} ${BCK_VOLUME} | ${SORT} -r | sed "1,${DAILY_RETENTION}d" | ${GREP} "^Daily")
|
||||
if [ "${OLD_DAILY_VOLUMES}" != "0" ]; then
|
||||
_info_blue " ------> Daily Backup Volume(s) to be removed Found"
|
||||
for OLD_DAILY_VOLUME in $OLD_DAILY_VOLUMES
|
||||
do
|
||||
_info_action " ---------> Remove Daily Backup Volume ${OLD_DAILY_VOLUME}"
|
||||
${OPENSTACK} volume backup delete ${OLD_DAILY_VOLUME}
|
||||
done
|
||||
else
|
||||
_info_blue " ------> No Old Daily Backup Volume found"
|
||||
fi
|
||||
|
||||
RESULT=`openstack volume backup show ${CHECK_BCK_VOLUME} -f json | jq -r '.status == "available"'`
|
||||
sleep 60
|
||||
done
|
||||
date +"[%Y-%m-%d_%HH%M] Backup Volume ${CHECK_BCK_VOLUME} is OK" >>${LOG_FILE} 2>&1
|
||||
done
|
||||
|
||||
date +"[%Y-%m-%d_%HH%M] => Checking Backup Instance" >>${LOG_FILE} 2>&1
|
||||
for CHECK_BCK_SERVER in ${BCK_SERVERS_LIST}
|
||||
do
|
||||
RESULT=false
|
||||
while [ ! "$RESULT" = "true" ];
|
||||
do
|
||||
date +"[%Y-%m-%d_%HH%M] Checking Backup for ${CHECK_BCK_SERVER} and waiting 60 secondes" >>${LOG_FILE} 2>&1
|
||||
|
||||
CURRENT_TIMESTAMP=`date +%s`
|
||||
if [ "$CURRENT_TIMESTAMP" -gt "$MAXIMUM_TIMESTAMP" ]; then
|
||||
date +"[%Y-%m-%d_%HH%M] [ERROR] backup for ${CHECK_BCK_SERVER} verification time expired" >>${LOG_FILE} 2>&1
|
||||
exit -1
|
||||
if [ "${MONTHLY_RETENTION}" != "0" ]; then
|
||||
_info " ---> Manage Monthly Backup Volume ${BCK_VOLUME} retention : Keep last ${MONTHLY_RETENTION} Months"
|
||||
echo ${ALL_BCK_VOLUMES} | ${JQ} -r '.[].Name' | ${GREP} ${BCK_VOLUME} | ${SORT} -r | ${GREP} "^Monthly"
|
||||
OLD_MONTHLY_VOLUMES=$(echo ${ALL_BCK_VOLUMES} | ${JQ} -r '.[].Name' | ${GREP} ${BCK_VOLUME} | ${SORT} -r | ${GREP} "^Monthly" | sed "1,${MONTHLY_RETENTION}d")
|
||||
if [ ! -z "$OLD_MONTHLY_VOLUMES" ]; then
|
||||
_info_blue " ------> Monthly Backup Volume(s) to be removed Found"
|
||||
for OLD_MONTHLY_VOLUME in $OLD_MONTHLY_VOLUMES
|
||||
do
|
||||
_info_action " ---------> Remove Monthly Backup Volume ${OLD_MONTHLY_VOLUME}"
|
||||
${OPENSTACK} volume backup delete ${OLD_MONTHLY_VOLUME}
|
||||
done
|
||||
else
|
||||
_info_blue " ------> No Old Monthly Backup Volume found"
|
||||
fi
|
||||
else
|
||||
_info_blue " ------> Monthly Backup disabled"
|
||||
fi
|
||||
|
||||
RESULT=`/usr/bin/openstack image show ${CHECK_BCK_SERVER} -f json | jq -r '.properties.image_state == "available" and .status == "active"'`
|
||||
sleep 60
|
||||
if [ "${YEARLY_RETENTION}" != "0" ]; then
|
||||
_info " ---> Manage Yearly Backup Volume ${BCK_VOLUME} retention : Keep last ${YEARLY_RETENTION} Months"
|
||||
echo ${ALL_BCK_VOLUMES} | ${JQ} -r '.[].Name' | ${GREP} ${BCK_VOLUME} | ${SORT} -r | ${GREP} "^Yearly"
|
||||
OLD_YEARLY_VOLUMES=$(echo ${ALL_BCK_VOLUMES} | ${JQ} -r '.[].Name' | ${GREP} ${BCK_VOLUME} | ${SORT} -r | ${GREP} "^Yearly" | sed "1,${YEARLY_RETENTION}d")
|
||||
if [ ! -z "$OLD_YEARLY_VOLUMES" ]; then
|
||||
_info_blue " ------> Yearly Backup Volume(s) to be removed Found"
|
||||
for OLD_YEARLY_VOLUME in $OLD_YEARLY_VOLUMES
|
||||
do
|
||||
_info_action " ---------> Remove Yearly Backup Volume ${OLD_YEARLY_VOLUME}"
|
||||
${OPENSTACK} volume backup delete ${OLD_YEARLY_VOLUME}
|
||||
done
|
||||
else
|
||||
_info_blue " ------> No Old Yearly Backup Volume found"
|
||||
fi
|
||||
else
|
||||
_info_blue " ------> Yearly Backup disabled"
|
||||
fi
|
||||
done
|
||||
date +"[%Y-%m-%d_%HH%M] Backup Instance ${CHECK_BCK_SERVER} is OK" >>${LOG_FILE} 2>&1
|
||||
done
|
||||
|
||||
echo "======================================================" >>${LOG_FILE} 2>&1
|
||||
date +"[%Y-%m-%d_%HH%M] - Manage Retention - keep last ${DAILY_RETENTION} Backup Volumes" >>${LOG_FILE} 2>&1
|
||||
echo "======================================================" >>${LOG_FILE} 2>&1
|
||||
echo ""
|
||||
_info " ====> Manage Retention for Backup Instances <===="
|
||||
ALL_IMAGES=$(${OPENSTACK} image list -f json)
|
||||
|
||||
date +"[%Y-%m-%d_%HH%M] => Manage Retention for Backup Volumes" >>${LOG_FILE} 2>&1
|
||||
|
||||
date +"[%Y-%m-%d_%HH%M] ---> List all Backup Volumes" >>${LOG_FILE} 2>&1
|
||||
/usr/bin/openstack volume backup list -f json | jq '.[].Name' >>${LOG_FILE} 2>&1
|
||||
|
||||
if OLD_VOLUMES=$(/usr/bin/openstack volume backup list -f json | jq -r '.[].Name' | sed "1,${DAILY_RETENTION}d"); then
|
||||
|
||||
date +"[%Y-%m-%d_%HH%M] ---> Backup Volume(s) to be removed Found" >>${LOG_FILE} 2>&1
|
||||
for OLD_VOLUME in $OLD_VOLUMES
|
||||
for BCK_INSTANCE in "${BCK_INSTANCES_LIST[@]}"
|
||||
do
|
||||
date +"[%Y-%m-%d_%HH%M] ------> Remove Backup Volume ${OLD_VOLUME}" >>${LOG_FILE} 2>&1
|
||||
/usr/bin/openstack volume backup delete ${OLD_VOLUME} >>${LOG_FILE} 2>&1
|
||||
_info " ---> Manage Daily Backup Instance ${BCK_INSTANCE} retention : Keep last ${DAILY_RETENTION} Days"
|
||||
_info " ---> List Backup Instance(s) :"
|
||||
echo $ALL_IMAGES | ${JQ} -r '.[].Name' | ${GREP} ${BCK_INSTANCE} | ${SORT} -r
|
||||
OLD_DAILY_INSTANCES=$(echo ${ALL_IMAGES} | ${JQ} -r '.[].Name' | ${GREP} ${BCK_INSTANCE} | ${SORT} -r | sed "1,${DAILY_RETENTION}d" | ${GREP} "^Daily")
|
||||
if [ ! -z "$OLD_DAILY_INSTANCES" ]; then
|
||||
_info_blue " ---> Backup Instance(s) to be removed Found"
|
||||
for OLD_DAILY_INSTANCE in $OLD_DAILY_INSTANCES
|
||||
do
|
||||
_info_action " ------> Remove Backup Instance ${OLD_DAILY_INSTANCE}"
|
||||
${OPENSTACK} image delete ${OLD_DAILY_INSTANCE}
|
||||
done
|
||||
else
|
||||
_info_blue " ------> No Old Daily Backup Instance found"
|
||||
fi
|
||||
|
||||
if [ "${MONTHLY_RETENTION}" != "0" ]; then
|
||||
_info " ---> Manage Monthly Backup Instance ${BCK_INSTANCE} retention : Keep last ${MONTHLY_RETENTION} Months"
|
||||
echo ${ALL_IMAGES} | ${JQ} -r '.[].Name' | ${GREP} ${BCK_INSTANCE} | ${SORT} -r | ${GREP} "^Monthly"
|
||||
OLD_MONTHLY_INSTANCES=$(echo ${ALL_IMAGES} | ${JQ} -r '.[].Name' | ${GREP} ${BCK_INSTANCE} | ${SORT} -r | ${GREP} "^Monthly" | sed "1,${MONTHLY_RETENTION}d")
|
||||
if [ ! -z "$OLD_MONTHLY_INSTANCES" ]; then
|
||||
_info_blue " ------> Monthly Backup Instance(s) to be removed Found"
|
||||
for OLD_MONTHLY_INSTANCE in $OLD_MONTHLY_INSTANCES
|
||||
do
|
||||
_info_action " ---------> Remove Monthly Instance ${OLD_MONTHLY_INSTANCE}"
|
||||
${OPENSTACK} image delete ${OLD_MONTHLY_INSTANCE}
|
||||
done
|
||||
else
|
||||
_info_blue " ------> No Old Monthly Backup Instance found"
|
||||
fi
|
||||
else
|
||||
_info_blue " ------> Monthly Backup disabled"
|
||||
fi
|
||||
|
||||
if [ "${YEARLY_RETENTION}" != "0" ]; then
|
||||
_info " ---> Manage Yearly Backup Instance ${BCK_INSTANCE} retention : Keep last ${YEARLY_RETENTION} Months"
|
||||
echo ${ALL_IMAGES} | ${JQ} -r '.[].Name' | ${GREP} ${BCK_INSTANCE} | ${SORT} -r | ${GREP} "^Yearly"
|
||||
OLD_YEARLY_INSTANCES=$(echo ${ALL_IMAGES} | ${JQ} -r '.[].Name' | ${GREP} ${BCK_INSTANCE} | ${SORT} -r | ${GREP} "^Yearly" | sed "1,${YEARLY_RETENTION}d")
|
||||
if [ ! -z "$OLD_YEARLY_INSTANCES" ]; then
|
||||
_info_blue " ------> Yearly Backup Instance(s) to be removed Found"
|
||||
for OLD_YEARLY_INSTANCE in $OLD_YEARLY_INSTANCES
|
||||
do
|
||||
_info_action " ---------> Remove Yearly Instance ${OLD_YEARLY_INSTANCE}"
|
||||
${OPENSTACK} image delete ${OLD_YEARLY_INSTANCE}
|
||||
done
|
||||
else
|
||||
_info_blue " ------> No Old Yearly Backup Instance found"
|
||||
fi
|
||||
else
|
||||
_info_blue " ------> Monthly Yearly disabled"
|
||||
fi
|
||||
done
|
||||
else
|
||||
date +"[%Y-%m-%d_%HH%M] No Old Backup Volume found" >>${LOG_FILE} 2>&1
|
||||
fi
|
||||
}
|
||||
|
||||
date +"[%Y-%m-%d_%HH%M] => Manage Retention for Backup Instances" >>${LOG_FILE} 2>&1
|
||||
function job_details(){
|
||||
_info_blue "#######################################################################################"
|
||||
_info_blue "Starting Backup Job "
|
||||
PJT_DESC=$(${OPENSTACK} project show ${OS_TENANT_ID} -f json | ${JQ} -r '.description')
|
||||
_info_blue " ---> Project Description : ${PJT_DESC}"
|
||||
_info_blue " ---> Region : ${OS_REGION_NAME}"
|
||||
|
||||
date +"[%Y-%m-%d_%HH%M] ---> List all Backup Instances" >>${LOG_FILE} 2>&1
|
||||
/usr/bin/openstack image list -f json| jq -r '.[].Name|select(. | startswith("Backup_"))' >>${LOG_FILE} 2>&1
|
||||
if [ ! -z "$OS_USERNAME" ]; then
|
||||
_info_blue " ---> User Id: ${OS_USERNAME}"
|
||||
fi
|
||||
|
||||
if OLD_INSTANCES=$(/usr/bin/openstack image list -f json| jq -r '.[].Name|select(. | startswith("Backup_"))' | sed "1,${DAILY_RETENTION}d"); then
|
||||
if [ ! -z "$OS_APPLICATION_CREDENTIAL_ID" ]; then
|
||||
_info_blue " ---> Application Role Id : ${OS_APPLICATION_CREDENTIAL_ID}"
|
||||
fi
|
||||
|
||||
date +"[%Y-%m-%d_%HH%M] ---> Backup Instance(s) to be removed Found" >>${LOG_FILE} 2>&1
|
||||
for OLD_INSTANCE in $INSTANCES
|
||||
do
|
||||
date +"[%Y-%m-%d_%HH%M] ------> Remove Backup Instance ${OLD_INSTANCE}" >>${LOG_FILE} 2>&1
|
||||
/usr/bin/openstack image delete ${OLD_INSTANCE} >>${LOG_FILE} 2>&1
|
||||
_info_blue " ---> Retention Details"
|
||||
_info_blue " --> Daily Retention : ${DAILY_RETENTION} Day(s)"
|
||||
|
||||
done
|
||||
else
|
||||
date +"[%Y-%m-%d_%HH%M] No Old Backup Instances found" >>${LOG_FILE} 2>&1
|
||||
fi
|
||||
if [ "${MONTHLY_RETENTION}" != "0" ]; then
|
||||
_info_blue " --> Monthly Retention : ${MONTHLY_RETENTION} Month(s)"
|
||||
else
|
||||
_info_blue " --> Monthly Retention : Disabled"
|
||||
fi
|
||||
|
||||
if [ "${YEARLY_RETENTION}" != "0" ]; then
|
||||
_info_blue " --> Yearly Retention : ${YEARLY_RETENTION} Year(s)"
|
||||
else
|
||||
_info_blue " --> Yearly Retention : Disabled"
|
||||
fi
|
||||
|
||||
_info_blue "#######################################################################################"
|
||||
|
||||
}
|
||||
|
||||
function _info() {
|
||||
echo -e "\e[92m$(date +"[%Y-%m-%d_%HH%M] [INFO]") ${1}\e[0m"
|
||||
}
|
||||
|
||||
function _info_blue() {
|
||||
echo -e "\e[38;5;33m$(date +"[%Y-%m-%d_%HH%M] [INFO]") ${1}\e[0m"
|
||||
}
|
||||
|
||||
function _info_action() {
|
||||
echo -e "\e[38;5;129m$(date +"[%Y-%m-%d_%HH%M] [INFO]") ${1}\e[0m"
|
||||
}
|
||||
|
||||
function _err(){
|
||||
echo -e "\e[38;5;196m$(date +"[%Y-%m-%d_%HH%M] [ERROR]") ${1}\e[0m"
|
||||
}
|
||||
|
||||
function _warning(){
|
||||
echo -e "\e[38;5;214m$(date +"[%Y-%m-%d_%HH%M] [WARNING]") ${1}\e[0m"
|
||||
}
|
||||
|
||||
function main() {
|
||||
job_details
|
||||
exit
|
||||
check_prerequistes
|
||||
backup
|
||||
check_backup
|
||||
manage_retention
|
||||
}
|
||||
|
||||
main "$@"
|
||||
|
||||
exit ${EXIT}
|
Loading…
Reference in a new issue