openstack-helm-infra/postgresql/templates/bin/_remote_retrieve_postgresql.sh.tpl
Cliff Parsons 382d113a87 Postgresql backup/restore enhancements
1) Added a new backup container for accessing RGW via Openstack Swift API.
2) Modified the backup script so that tarballed databases can be sent to the RGW.
3) Added new script to send the database backup to the RGW.
4) Modified the restore script so that databases can be retrieved from the RGW.
5) Added new script to retrieve the database backups from the RGW.

Change-Id: Id17a8fcb63f5614ea038c58acdc256fb4e05f434
2020-04-22 22:31:48 +00:00

82 lines
2.7 KiB
Smarty
Executable File

#!/bin/bash
# Copyright 2018 The Openstack-Helm Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
set -x
RESTORE_DIR=${POSTGRESQL_BACKUP_BASE_DIR}/db/${POSTGRESQL_POD_NAMESPACE}/postgres/restore
ARCHIVE_DIR=${POSTGRESQL_BACKUP_BASE_DIR}/db/${POSTGRESQL_POD_NAMESPACE}/postgres/archive
source /tmp/common_backup_restore.sh
# Keep processing requests for the life of the pod.
while true
do
# Wait until a restore request file is present on the disk
echo "Waiting for a restore request..."
NO_TIMEOUT=true
wait_for_file $RESTORE_DIR/*_request $NO_TIMEOUT
echo "Done waiting. Request received"
CONTAINER_NAME={{ .Values.conf.backup.remote_backup.container_name }}
if [[ -e $RESTORE_DIR/archive_listing_request ]]
then
# We've finished consuming the request, so delete the request file.
rm -rf $RESTORE_DIR/*_request
openstack container show $CONTAINER_NAME
if [[ $? -eq 0 ]]
then
# Get the list, ensureing that we only pick up postgres backups from the
# requested namespace
openstack object list $CONTAINER_NAME | grep postgres | grep $POSTGRESQL_POD_NAMESPACE | awk '{print $2}' > $RESTORE_DIR/archive_list_response
if [[ $? != 0 ]]
then
echo "Container object listing could not be obtained." >> $RESTORE_DIR/archive_list_error
else
echo "Archive listing successfully retrieved."
fi
else
echo "Container $CONTAINER_NAME does not exist." >> $RESTORE_DIR/archive_list_error
fi
elif [[ -e $RESTORE_DIR/get_archive_request ]]
then
ARCHIVE=`cat $RESTORE_DIR/get_archive_request`
echo "Request for archive $ARCHIVE received."
# We've finished consuming the request, so delete the request file.
rm -rf $RESTORE_DIR/*_request
openstack object save --file $RESTORE_DIR/$ARCHIVE $CONTAINER_NAME $ARCHIVE
if [[ $? != 0 ]]
then
echo "Archive $ARCHIVE could not be retrieved." >> $RESTORE_DIR/archive_error
else
echo "Archive $ARCHIVE successfully retrieved."
fi
# Signal to the other container that the archive is available.
touch $RESTORE_DIR/archive_response
else
rm -rf $RESTORE_DIR/*_request
echo "Invalid request received."
fi
sleep 5
done