Skip to content
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 54 additions & 30 deletions deployments/cli/community/restore-airgapped.sh
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
#!/bin/bash
+set -euo pipefail
set -euo pipefail

function print_header() {
clear

cat <<"EOF"
--------------------------------------------
____ _ /////////
| _ \| | __ _ _ __ ___ /////////
| |_) | |/ _` | '_ \ / _ \ ///// /////
| __/| | (_| | | | | __/ ///// /////
|_| |_|\__,_|_| |_|\___| ////
////
--------------------------------------------
Project management tool from the future
--------------------------------------------
##+. ##+ .##-
######+.######-.######.
#######. -### +#####+.
#######. + +######.
#######. .#######
#######. .#######
####### + .#######
.+#####+ ###- .#######
.######.-#####+.+######
-##. -## .+##
EOF
}

Expand All @@ -27,7 +27,7 @@ function restoreData() {
echo ""

# set the backup folder path
BACKUP_FOLDER=${1}
BACKUP_FOLDER="${1:-}"

if [ -z "$BACKUP_FOLDER" ]; then
BACKUP_FOLDER="$PWD/backup"
Expand Down Expand Up @@ -78,12 +78,12 @@ function restoreData() {

local dockerServiceStatus
if command -v jq &> /dev/null; then
dockerServiceStatus=$($COMPOSE_CMD ls --filter name=plane-airgapped --format=json | jq -r .[0].Status)
dockerServiceStatus=$($COMPOSE_CMD ls --filter name=plane-airgapped --format=json | jq -r '.[0].Status // empty')
else
Comment thread
akshat5302 marked this conversation as resolved.
dockerServiceStatus=$($COMPOSE_CMD ls --filter name=plane-airgapped | grep -o "running" | head -n 1)
dockerServiceStatus=$($COMPOSE_CMD ls --filter name=plane-airgapped | grep -o "running" | head -n 1 || true)
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated
fi

if [[ $dockerServiceStatus == "running" ]]; then
if [[ "$dockerServiceStatus" == running* ]]; then
echo "Plane Airgapped is running. Please STOP the Plane Airgapped before restoring data."
exit 1
fi
Expand All @@ -97,36 +97,60 @@ function restoreData() {
chown -R $CURRENT_USER_ID:$CURRENT_GROUP_ID "$AIRGAPPED_INSTALL_PATH/data"
fi

for BACKUP_FILE in "$BACKUP_FOLDER/*.tar.gz"; do
# Extract all backup tar files
for BACKUP_FILE in "$BACKUP_FOLDER"/*.tar.gz; do
Comment thread
akshat5302 marked this conversation as resolved.
if [ -e "$BACKUP_FILE" ]; then

# get the basefilename without the extension
BASE_FILE_NAME=$(basename "$BACKUP_FILE" ".tar.gz")

# extract the restoreFile to the airgapped instance install path
echo "Restoring $BASE_FILE_NAME"
rm -rf "$AIRGAPPED_INSTALL_PATH/data/$BASE_FILE_NAME" || true

tar -xvzf "$BACKUP_FILE" -C "$AIRGAPPED_INSTALL_PATH/data/"
echo "Extracting $BASE_FILE_NAME"
tar -xzvf "$BACKUP_FILE" -C "$AIRGAPPED_INSTALL_PATH/data/"
if [ $? -ne 0 ]; then
echo "Error: Failed to extract $BACKUP_FILE"
exit 1
fi
Comment thread
akshat5302 marked this conversation as resolved.
Outdated
chown -R $CURRENT_USER_ID:$CURRENT_GROUP_ID "$AIRGAPPED_INSTALL_PATH/data/$BASE_FILE_NAME"
if [ $? -ne 0 ]; then
echo "Error: Failed to change ownership of $AIRGAPPED_INSTALL_PATH/data/$BASE_FILE_NAME"
exit 1
fi
else
echo "No .tar.gz files found in the current directory."
Comment thread
akshat5302 marked this conversation as resolved.
Outdated
echo ""
echo "Please provide the path to the backup file."
echo ""
echo "Usage: $0 /path/to/backup"
echo "Usage: $0 /path/to/backup"
exit 1
fi
done

DATA_DIR="$AIRGAPPED_INSTALL_PATH/data"

# Rename extracted directories to match docker-compose volume paths
# Backup tars: pgdata, redisdata, uploads, rabbitmq_data
# Docker-compose expects: db, redis, minio/uploads, mq

if [ -d "$DATA_DIR/pgdata" ]; then
rm -rf "$DATA_DIR/db"
mv "$DATA_DIR/pgdata" "$DATA_DIR/db"
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated
echo "Renamed pgdata -> db"
fi

if [ -d "$DATA_DIR/redisdata" ]; then
rm -rf "$DATA_DIR/redis"
mv "$DATA_DIR/redisdata" "$DATA_DIR/redis"
echo "Renamed redisdata -> redis"
fi

if [ -d "$DATA_DIR/uploads" ]; then
mkdir -p "$DATA_DIR/minio"
rm -rf "$DATA_DIR/minio/uploads"
mv "$DATA_DIR/uploads" "$DATA_DIR/minio/uploads"
echo "Renamed uploads -> minio/uploads"
fi

if [ -d "$DATA_DIR/rabbitmq_data" ]; then
rm -rf "$DATA_DIR/mq"
mv "$DATA_DIR/rabbitmq_data" "$DATA_DIR/mq"
echo "Renamed rabbitmq_data -> mq"
fi

# Fix ownership on all restored data
chown -R $CURRENT_USER_ID:$CURRENT_GROUP_ID "$DATA_DIR"

echo ""
echo "Restore completed successfully."
echo ""
Expand Down
Loading