You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
160 lines
7.5 KiB
160 lines
7.5 KiB
#!/bin/bash |
|
|
|
#install sshpass if not installed |
|
if [ $(dpkg-query -W -f='${Status}' sshpass 2>/dev/null | grep -c "ok installed") -eq 0 ]; |
|
then |
|
apt update && apt-get install sshpass; |
|
fi |
|
|
|
set -a # export |
|
source config.txt |
|
set +a # stop exporting |
|
|
|
DATE="$(date +%Y-%m-%d_%H-%M-%S)" |
|
echo $DATE |
|
|
|
#1. We are on the source (e.g. main) |
|
#systemctl is-active --quiet platform5.service && systemctl stop platform5 |
|
#systemctl is-active --quiet platform6.service && systemctl stop platform6 |
|
|
|
if [[ "$PLATFORM_STATUS" == 1 ]]; then |
|
echo "PLATFORM_STATUS=$PLATFORM_STATUS" |
|
echo "Stopping $PLATFORM_SERVICE_NAME" |
|
systemctl stop $PLATFORM_SERVICE_NAME |
|
fi |
|
|
|
download_platform(){ |
|
# sshpass -p "$DESTINATION_PASSWORD" ssh $DESTINATION_USER@$DESTINATION_IP -p $DESTINATION_PORT "sed -i \"s|\(jdbc:postgresql://localhost:5432/\)[^?]*|\1${DESTINATION_DB_NAME}|g\" $DESTINATION_PLATFORM_PATH/conf/db.conf" |
|
|
|
sshpass -p "$DESTINATION_PASSWORD" ssh $DESTINATION_USER@$DESTINATION_IP -p $DESTINATION_PORT "systemctl is-active --quiet platform5.service && systemctl stop platform5 " |
|
sshpass -p "$DESTINATION_PASSWORD" ssh $DESTINATION_USER@$DESTINATION_IP -p $DESTINATION_PORT "mv /home/platform5-server /home/platform5-server-${DATE} && \ |
|
mkdir -p /home/platform5-server/bin/storage/1" |
|
PLATFORM_DIRS="conf,lib,opencv,webapp,scripts,monitoring,SERVER_config.txt" |
|
IFS=',' read -r -a array <<< "$PLATFORM_DIRS" |
|
|
|
for folder in "${array[@]}"; do |
|
yes | sshpass -p "$DESTINATION_PASSWORD" rsync -e "ssh -p $DESTINATION_PORT -o StrictHostKeyChecking=no" -avz --ignore-existing $SOURCE_PLATFORM_PATH/$folder $DESTINATION_USER@$DESTINATION_IP:$DESTINATION_PLATFORM_PATH/ |
|
done |
|
yes | sshpass -p "$DESTINATION_PASSWORD" rsync -e "ssh -p $DESTINATION_PORT -o StrictHostKeyChecking=no" -avz --ignore-existing $SOURCE_PLATFORM_PATH/bin/server $DESTINATION_USER@$DESTINATION_IP:$DESTINATION_PLATFORM_PATH/bin/ |
|
} |
|
|
|
DB_BACKUP=$SOURCE_DB_NAME.migration.$DATE.sql |
|
echo "backup name:" $DB_BACKUP |
|
|
|
db_backup() { |
|
echo EVENT_STORE=$EVENT_STORE |
|
if [[ "$EVENT_STORE" == 0 ]]; then |
|
echo Making backup without event_store |
|
PGPASSWORD="$SOURCE_DB_PASSWORD" pg_dump -Fc -T event_store -U postgres $SOURCE_DB_NAME > /var/backups/$DB_BACKUP |
|
elif [[ "$EVENT_STORE" == 1 ]]; then |
|
echo Making backup with event_store |
|
PGPASSWORD="$SOURCE_DB_PASSWORD" pg_dump -Fc -U postgres $SOURCE_DB_NAME > /var/backups/$DB_BACKUP |
|
elif [[ "$EVENT_STORE" == 2 ]]; then |
|
echo "don't make db backup" |
|
else echo "EVENT_STORE value must be 0 or 1 or 2" && exit |
|
fi |
|
} |
|
|
|
send_backup() { |
|
if [[ "$EVENT_STORE" == 0 ]] || [[ "$EVENT_STORE" == 1 ]]; then |
|
echo "Sending db backup to destination server" |
|
cd /var/backups/ && yes | sshpass -p "$DESTINATION_DATABASE_PASSWORD" scp -P $DESTINATION_DATABASE_PORT -o StrictHostKeyChecking=no $DB_BACKUP $DESTINATION_DATABASE_USER@$DESTINATION_DATABASE_IP:/var/backups |
|
cd - |
|
else echo "no backup, nothing to send" |
|
fi |
|
} |
|
|
|
create_and_restore_db() { |
|
if [[ "$EVENT_STORE" == 0 ]] || [[ "$EVENT_STORE" == 1 ]]; then |
|
sed -e "s/DESTINATION_DB_NAME/${DESTINATION_DB_NAME}/" \ |
|
-e "s/DESTINATION_POSTGRES_PASSWORD/${DESTINATION_POSTGRES_PASSWORD}/"\ |
|
-e "s/DB_BACKUP/${DB_BACKUP}/"\ |
|
-e "s/J_RESTORE/${J_RESTORE}/"\ |
|
create_db.sh.template > create_db.sh |
|
sshpass -p "$DESTINATION_DATABASE_PASSWORD" ssh -p $DESTINATION_DATABASE_PORT $DESTINATION_DATABASE_USER@$DESTINATION_DATABASE_IP 'bash -s' < create_db.sh |
|
fi |
|
} |
|
|
|
change_config(){ |
|
# sshpass -p "$DESTINATION_PASSWORD" ssh $DESTINATION_USER@$DESTINATION_IP -p $DESTINATION_PORT "sed -i \"s|\(jdbc:postgresql://localhost:5432/\)[^?]*|\1${DESTINATION_DB_NAME}|g\" $DESTINATION_PLATFORM_PATH/conf/db.conf" |
|
#db wo host sshpass -p "$DESTINATION_PASSWORD" ssh $DESTINATION_USER@$DESTINATION_IP -p $DESTINATION_PORT "sed -i \"s|\(jdbc:postgresql://[^:/]*:[0-9]*/\)[^?]*|\1${DESTINATION_DB_NAME}|g\" $DESTINATION_PLATFORM_PATH/conf/db.conf" |
|
|
|
#sshpass -p "$DESTINATION_PASSWORD" ssh $DESTINATION_USER@$DESTINATION_IP -p $DESTINATION_PORT "sed -i \"s|\(jdbc:postgresql://[^:/]*:[0-9]*/\)[^?]*|\1${INTERNAL_DATABASE_IP}:5432/${DESTINATION_DB_NAME}|g\" $DESTINATION_PLATFORM_PATH/conf/db.conf" |
|
#change host |
|
sshpass -p "$DESTINATION_PASSWORD" ssh $DESTINATION_USER@$DESTINATION_IP -p $DESTINATION_PORT "sed -i \"s|\\(jdbc:postgresql://\\)[^:/]*|\\1${INTERNAL_DATABASE_IP}|g\" $DESTINATION_PLATFORM_PATH/conf/db.conf" |
|
#change database name |
|
sshpass -p "$DESTINATION_PASSWORD" ssh $DESTINATION_USER@$DESTINATION_IP -p $DESTINATION_PORT "sed -i \"s|\\(jdbc:postgresql://[^:/]*:[0-9]*/\\)[^?]*|\\1${DESTINATION_DB_NAME}|g\" $DESTINATION_PLATFORM_PATH/conf/db.conf" |
|
#change database password |
|
sshpass -p "$DESTINATION_PASSWORD" ssh $DESTINATION_USER@$DESTINATION_IP -p $DESTINATION_PORT "sed -i '0,/password = \".*\"/s//password = \"${DESTINATION_POSTGRES_PASSWORD}\"/' $DESTINATION_PLATFORM_PATH/conf/db.conf" |
|
} |
|
|
|
evt_full_rsync(){ |
|
echo "send $SOURCE_EVT to the destination" |
|
yes | sshpass -p "$DESTINATION_PASSWORD" rsync -e "ssh -p $DESTINATION_PORT -o StrictHostKeyChecking=no" -avz --ignore-existing $SOURCE_PLATFORM_PATH/bin/storage/1/$SOURCE_EVT/ $DESTINATION_USER@$DESTINATION_IP:$DESTINATION_PLATFORM_PATH/bin/storage/1/$SOURCE_EVT/ |
|
} |
|
|
|
evt_common_files_rsync(){ |
|
echo "send files from $SOURCE_EVT/common to the destination" |
|
yes | sshpass -p "$DESTINATION_PASSWORD" ssh $DESTINATION_USER@$DESTINATION_IP -p $DESTINATION_PORT -o StrictHostKeyChecking=no "mkdir -p $DESTINATION_PLATFORM_PATH/bin/storage/1/$SOURCE_EVT/common/" |
|
sshpass -p "$DESTINATION_PASSWORD" rsync -e "ssh -p $DESTINATION_PORT -o StrictHostKeyChecking=no" -avz --ignore-existing -f"- */" -f"+ *" $SOURCE_PLATFORM_PATH/bin/storage/1/$SOURCE_EVT/common/ $DESTINATION_USER@$DESTINATION_IP:$DESTINATION_PLATFORM_PATH/bin/storage/1/$SOURCE_EVT/common/ |
|
} |
|
|
|
evt_specific_dirs_rsync(){ |
|
IFS=',' read -r -a array <<< "$FOLDERS" |
|
|
|
for folder in "${array[@]}"; do |
|
yes | sshpass -p "$DESTINATION_PASSWORD" rsync -e "ssh -p $DESTINATION_PORT -o StrictHostKeyChecking=no" -avz --ignore-existing $SOURCE_PLATFORM_PATH/bin/storage/1/$SOURCE_EVT/$folder $DESTINATION_USER@$DESTINATION_IP:$DESTINATION_PLATFORM_PATH/bin/storage/1/$SOURCE_EVT/ |
|
done |
|
} |
|
|
|
fonts_rsync(){ |
|
echo "Send fonts to the destination" |
|
yes | sshpass -p "$DESTINATION_PASSWORD" ssh $DESTINATION_USER@$DESTINATION_IP -p $DESTINATION_PORT -o StrictHostKeyChecking=no "mkdir -p $DESTINATION_PLATFORM_PATH/bin/storage/1/fonts/" |
|
sshpass -p "$DESTINATION_PASSWORD" rsync -e "ssh -p $DESTINATION_PORT" -avz --ignore-existing $SOURCE_PLATFORM_PATH/bin/storage/1/fonts/ $DESTINATION_USER@$DESTINATION_IP:$DESTINATION_PLATFORM_PATH/bin/storage/1/fonts/ |
|
} |
|
|
|
if [[ "$DOWNLOAD_PLATFORM" == 1 ]]; then |
|
echo "Download platform from source" |
|
download_platform |
|
elif [[ "$EVT_COMMON" == 0 ]]; then |
|
echo "No download platform" |
|
fi |
|
|
|
|
|
|
|
db_backup |
|
send_backup |
|
create_and_restore_db |
|
change_config |
|
fonts_rsync |
|
|
|
if [[ "$EVT_COMMON" == 0 ]]; then |
|
echo "Download only files from evt/common" |
|
evt_common_files_rsync |
|
elif [[ "$EVT_COMMON" == 1 ]]; then |
|
echo "Download full evt" |
|
evt_full_rsync |
|
elif [[ "$EVT_COMMON" == 2 ]]; then |
|
echo "Nothing to download from storage" |
|
elif [[ "$EVT_COMMON" == 3 ]]; then |
|
echo "Download specified folders" |
|
evt_specific_dirs_rsync |
|
else echo "EVENT_COMMON value must be 0 or 1 or 2" && exit |
|
fi |
|
|
|
|
|
mv config.txt config.txt.$DATE |
|
cp config.txt.template config.txt |
|
|
|
if [[ "$PLATFORM_STATUS" == 1 ]]; then |
|
echo "start $PLATFORM_SERVICE_NAME" |
|
systemctl start $PLATFORM_SERVICE_NAME |
|
fi |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|