Add capability to delete a backup archive

This patchset adds the capability to delete any archives that are stored
in the local file system or archives that are stored on the remote RGW
data store.

Change-Id: I68cade39e677f895e06ec8f2204f55ff913ce327
This commit is contained in:
Parsons, Cliff (cp769u) 2020-10-19 19:18:29 +00:00
parent 63b7a0cd0f
commit 2d1fe882bb
2 changed files with 99 additions and 37 deletions

View File

@ -15,7 +15,7 @@ apiVersion: v1
appVersion: v1.0.0 appVersion: v1.0.0
description: OpenStack-Helm Helm-Toolkit description: OpenStack-Helm Helm-Toolkit
name: helm-toolkit name: helm-toolkit
version: 0.1.4 version: 0.1.5
home: https://docs.openstack.org/openstack-helm home: https://docs.openstack.org/openstack-helm
icon: https://www.openstack.org/themes/openstack/images/project-mascots/OpenStack-Helm/OpenStack_Project_OpenStackHelm_vertical.png icon: https://www.openstack.org/themes/openstack/images/project-mascots/OpenStack-Helm/OpenStack_Project_OpenStackHelm_vertical.png
sources: sources:

View File

@ -143,6 +143,7 @@ usage() {
echo "list_schema <archive_filename> <dbname> <table_name> [remote]" echo "list_schema <archive_filename> <dbname> <table_name> [remote]"
echo "restore <archive_filename> <db_specifier> [remote]" echo "restore <archive_filename> <db_specifier> [remote]"
echo " where <db_specifier> = <dbname> | ALL" echo " where <db_specifier> = <dbname> | ALL"
echo "delete_archive <archive_filename> [remote]"
clean_and_exit $ret_val "" clean_and_exit $ret_val ""
} }
@ -161,6 +162,42 @@ clean_and_exit() {
exit $RETCODE exit $RETCODE
} }
determine_resulting_error_code() {
RESULT="$1"
echo ${RESULT} | grep "HTTP 404"
if [[ $? -eq 0 ]]; then
echo "Could not find the archive: ${RESULT}"
return 1
else
echo ${RESULT} | grep "HTTP 401"
if [[ $? -eq 0 ]]; then
echo "Could not access the archive: ${RESULT}"
return 1
else
echo ${RESULT} | grep "HTTP 503"
if [[ $? -eq 0 ]]; then
echo "RGW service is unavailable. ${RESULT}"
# In this case, the RGW may be temporarily down.
# Return slightly different error code so the calling code can retry
return 2
else
echo ${RESULT} | grep "ConnectionError"
if [[ $? -eq 0 ]]; then
echo "Could not reach the RGW: ${RESULT}"
# In this case, keystone or the site/node may be temporarily down.
# Return slightly different error code so the calling code can retry
return 2
else
echo "Archive ${ARCHIVE} could not be retrieved: ${RESULT}"
return 1
fi
fi
fi
fi
return 0
}
# Retrieve a list of archives from the RGW. # Retrieve a list of archives from the RGW.
retrieve_remote_listing() { retrieve_remote_listing() {
RESULT=$(openstack container show $CONTAINER_NAME 2>&1) RESULT=$(openstack container show $CONTAINER_NAME 2>&1)
@ -175,22 +212,8 @@ retrieve_remote_listing() {
echo "Archive listing successfully retrieved." echo "Archive listing successfully retrieved."
fi fi
else else
echo $RESULT | grep "HTTP 401" determine_resulting_error_code "${RESULT}"
if [[ $? -eq 0 ]]; then return $?
echo "Could not access the container: ${RESULT}"
return 1
else
echo $RESULT | grep "ConnectionError"
if [[ $? -eq 0 ]]; then
echo "Could not reach the RGW: ${RESULT}"
# In this case, keystone or the site/node may be temporarily down.
# Return slightly different error code so the calling code can retry
return 2
else
echo "Container $CONTAINER_NAME does not exist: ${RESULT}"
return 1
fi
fi
fi fi
return 0 return 0
} }
@ -201,28 +224,28 @@ retrieve_remote_archive() {
RESULT=$(openstack object save --file $TMP_DIR/$ARCHIVE $CONTAINER_NAME $ARCHIVE 2>&1) RESULT=$(openstack object save --file $TMP_DIR/$ARCHIVE $CONTAINER_NAME $ARCHIVE 2>&1)
if [[ $? -ne 0 ]]; then if [[ $? -ne 0 ]]; then
echo $RESULT | grep "HTTP 401" determine_resulting_error_code "${RESULT}"
if [[ $? -eq 0 ]]; then return $?
echo "Could not access the archive: ${RESULT}"
return 1
else
echo $RESULT | grep "ConnectionError"
if [[ $? -eq 0 ]]; then
echo "Could not reach the RGW: ${RESULT}"
# In this case, keystone or the site/node may be temporarily down.
# Return slightly different error code so the calling code can retry
return 2
else
echo "Archive ${ARCHIVE} could not be retrieved: ${RESULT}"
return 1
fi
fi
else else
echo "Archive $ARCHIVE successfully retrieved." echo "Archive $ARCHIVE successfully retrieved."
fi fi
return 0 return 0
} }
# Delete an archive from the RGW.
delete_remote_archive() {
ARCHIVE=$1
RESULT=$(openstack object delete ${CONTAINER_NAME} ${ARCHIVE} 2>&1)
if [[ $? -ne 0 ]]; then
determine_resulting_error_code "${RESULT}"
return $?
else
echo "Archive ${ARCHIVE} successfully deleted."
fi
return 0
}
# Display all archives # Display all archives
list_archives() { list_archives() {
REMOTE=$1 REMOTE=$1
@ -296,7 +319,7 @@ list_databases() {
REMOTE=$2 REMOTE=$2
WHERE="local" WHERE="local"
if [[ "x${REMOTE}" != "x" ]]; then if [[ -n ${REMOTE} ]]; then
WHERE="remote" WHERE="remote"
fi fi
@ -327,7 +350,7 @@ list_tables() {
REMOTE=$3 REMOTE=$3
WHERE="local" WHERE="local"
if [[ "x${REMOTE}" != "x" ]]; then if [[ -n ${REMOTE} ]]; then
WHERE="remote" WHERE="remote"
fi fi
@ -359,7 +382,7 @@ list_rows() {
REMOTE=$4 REMOTE=$4
WHERE="local" WHERE="local"
if [[ "x${REMOTE}" != "x" ]]; then if [[ -n ${REMOTE} ]]; then
WHERE="remote" WHERE="remote"
fi fi
@ -391,7 +414,7 @@ list_schema() {
REMOTE=$4 REMOTE=$4
WHERE="local" WHERE="local"
if [[ "x${REMOTE}" != "x" ]]; then if [[ -n ${REMOTE} ]]; then
WHERE="remote" WHERE="remote"
fi fi
@ -415,6 +438,36 @@ list_schema() {
fi fi
} }
# Delete an archive
delete_archive() {
ARCHIVE_FILE=$1
REMOTE=$2
WHERE="local"
if [[ -n ${REMOTE} ]]; then
WHERE="remote"
fi
if [[ "${WHERE}" == "remote" ]]; then
delete_remote_archive ${ARCHIVE_FILE}
if [[ $? -ne 0 ]]; then
clean_and_exit 1 "ERROR: Could not delete remote archive: ${ARCHIVE_FILE}"
fi
else # Local
if [[ -e ${ARCHIVE_DIR}/${ARCHIVE_FILE} ]]; then
rm -f ${ARCHIVE_DIR}/${ARCHIVE_FILE}
if [[ $? -ne 0 ]]; then
clean_and_exit 1 "ERROR: Could not delete local archive."
fi
else
clean_and_exit 1 "ERROR: Local archive file could not be found."
fi
fi
echo "Successfully deleted archive ${ARCHIVE_FILE} from ${WHERE} storage."
}
# Return 1 if the given database exists in the database file. 0 otherwise. # Return 1 if the given database exists in the database file. 0 otherwise.
database_exists() { database_exists() {
DB=$1 DB=$1
@ -544,6 +597,15 @@ cli_main() {
clean_and_exit 0 "" clean_and_exit 0 ""
fi fi
;; ;;
"delete_archive")
if [[ ${#ARGS[@]} -lt 2 || ${#ARGS[@]} -gt 3 ]]; then
usage 1
elif [[ ${#ARGS[@]} -eq 2 ]]; then
delete_archive ${ARGS[1]}
else
delete_archive ${ARGS[1]} ${ARGS[2]}
fi
;;
*) *)
usage 1 usage 1
;; ;;