From e3e634d848bd84c6afd6fa2114eabbe136365c65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Thu, 2 Nov 2023 12:35:42 +0100 Subject: [PATCH 01/35] Add deployment script 'clusters.cron-backups.sh' --- deployment/scripts/clusters.cron-backups.sh | 38 +++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100755 deployment/scripts/clusters.cron-backups.sh diff --git a/deployment/scripts/clusters.cron-backups.sh b/deployment/scripts/clusters.cron-backups.sh new file mode 100755 index 000000000..6d41eb9cf --- /dev/null +++ b/deployment/scripts/clusters.cron-backups.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +# base setup +SCRIPT_PATH=$(realpath $0) +SCRIPT_DIR=$(dirname $SCRIPT_PATH) + +# check BACKUP_CONFIGURATIONS +if [ -z ${BACKUP_CONFIGURATIONS} ]; then + echo "You must provide a `BACKUP_CONFIGURATIONS` via environment variable" + exit 1 +fi + +# convert configurations to array +CONFIGURATIONS_ARRAY=($BACKUP_CONFIGURATIONS) + +# display the clusters +echo "Backup the clusters:" +for i in "${CONFIGURATIONS_ARRAY[@]}" +do + echo $i +done +echo "Cancel by ^C. You have 20 seconds" +# wait for the admin to react +sleep 20 + +# save old CONFIGURATION for later reset +SAVE_CONFIGURATION=$CONFIGURATION + +for i in "${CONFIGURATIONS_ARRAY[@]}" +do + CONFIGURATION=$i + # individual cluster backup + ${SCRIPT_DIR}/cluster.backup.sh +done + +# reset CONFIGURATION to old +CONFIGURATION=$SAVE_CONFIGURATION +echo "Reset to CONFIGURATION=${CONFIGURATION}" From 0bf4ea56bdd34d5123dc550cddeadcdde5dd3928 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 21 Nov 2023 15:59:33 +0100 Subject: [PATCH 02/35] Export 'BACKUP_CONFIGURATIONS' from 'deployment/.env' and use it. --- deployment/.env.dist | 6 +++++- deployment/scripts/clusters.cron-backups.sh | 5 +++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/deployment/.env.dist b/deployment/.env.dist index 8b8901647..c0225d70e 100644 --- a/deployment/.env.dist +++ b/deployment/.env.dist @@ -1 +1,5 @@ -CONFIGURATION=example \ No newline at end of file +# branding folder used for "docker compose up" run in deployment folder +CONFIGURATION=stage.ocelot.social + +# used in "scripts/clusters.cron-backups.sh" +BACKUP_CONFIGURATIONS="stage.ocelot.social stage.yunite.me" \ No newline at end of file diff --git a/deployment/scripts/clusters.cron-backups.sh b/deployment/scripts/clusters.cron-backups.sh index 6d41eb9cf..560647f21 100755 --- a/deployment/scripts/clusters.cron-backups.sh +++ b/deployment/scripts/clusters.cron-backups.sh @@ -4,6 +4,11 @@ SCRIPT_PATH=$(realpath $0) SCRIPT_DIR=$(dirname $SCRIPT_PATH) +# export all variables in "../.env" +set -a +source ${SCRIPT_DIR}/../.env +set +a + # check BACKUP_CONFIGURATIONS if [ -z ${BACKUP_CONFIGURATIONS} ]; then echo "You must provide a `BACKUP_CONFIGURATIONS` via environment variable" From 6af26472c06537c53d20f283293eb08f3454a704 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Wed, 22 Nov 2023 15:14:00 +0100 Subject: [PATCH 03/35] Add time stamp to backup script --- deployment/scripts/cluster.backup.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/deployment/scripts/cluster.backup.sh b/deployment/scripts/cluster.backup.sh index 9503061cf..d5d5e1b59 100755 --- a/deployment/scripts/cluster.backup.sh +++ b/deployment/scripts/cluster.backup.sh @@ -1,5 +1,9 @@ #!/bin/bash +# time stamp +printf "Backup started at:\n " +date + # base setup SCRIPT_PATH=$(realpath $0) SCRIPT_DIR=$(dirname $SCRIPT_PATH) From 864f4344adfdad05412dd22120abc9396853c140 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Wed, 22 Nov 2023 16:23:40 +0100 Subject: [PATCH 04/35] Extend script by deleting old backups --- deployment/.env.dist | 4 +- deployment/scripts/clusters.cron-backups.sh | 52 +++++++++++++++++---- 2 files changed, 46 insertions(+), 10 deletions(-) diff --git a/deployment/.env.dist b/deployment/.env.dist index c0225d70e..38adc9027 100644 --- a/deployment/.env.dist +++ b/deployment/.env.dist @@ -2,4 +2,6 @@ CONFIGURATION=stage.ocelot.social # used in "scripts/clusters.cron-backups.sh" -BACKUP_CONFIGURATIONS="stage.ocelot.social stage.yunite.me" \ No newline at end of file +BACKUP_CONFIGURATIONS="stage.ocelot.social stage.wir.social" +# if '<= 0' no backups will be deleted +BACKUP_SAVED_BACKUPS_NUMBER=7 \ No newline at end of file diff --git a/deployment/scripts/clusters.cron-backups.sh b/deployment/scripts/clusters.cron-backups.sh index 560647f21..71e9e65f7 100755 --- a/deployment/scripts/clusters.cron-backups.sh +++ b/deployment/scripts/clusters.cron-backups.sh @@ -1,43 +1,77 @@ #!/bin/bash +# time stamp +printf "\nMultiple backups started at:\n " +date + # base setup SCRIPT_PATH=$(realpath $0) SCRIPT_DIR=$(dirname $SCRIPT_PATH) +# save old CONFIGURATION for later reset +SAVE_CONFIGURATION=$CONFIGURATION + # export all variables in "../.env" set -a source ${SCRIPT_DIR}/../.env set +a # check BACKUP_CONFIGURATIONS -if [ -z ${BACKUP_CONFIGURATIONS} ]; then +if [[ -z ${BACKUP_CONFIGURATIONS} ]]; then echo "You must provide a `BACKUP_CONFIGURATIONS` via environment variable" exit 1 fi # convert configurations to array -CONFIGURATIONS_ARRAY=($BACKUP_CONFIGURATIONS) +IFS=' ' read -a CONFIGURATIONS_ARRAY <<< "$BACKUP_CONFIGURATIONS" # display the clusters -echo "Backup the clusters:" +printf "Backup the clusters:\n" for i in "${CONFIGURATIONS_ARRAY[@]}" do - echo $i + echo " $i" done -echo "Cancel by ^C. You have 20 seconds" +echo "Cancel by ^C. You have 15 seconds" # wait for the admin to react -sleep 20 +sleep 15 -# save old CONFIGURATION for later reset -SAVE_CONFIGURATION=$CONFIGURATION +printf "\n" for i in "${CONFIGURATIONS_ARRAY[@]}" do CONFIGURATION=$i # individual cluster backup ${SCRIPT_DIR}/cluster.backup.sh + + # deleting backups? + if (( BACKUP_SAVED_BACKUPS_NUMBER >= 1 )); then + # delete all oldest backups, but leave the last BACKUP_SAVED_BACKUPS_NUMBER + + keep=$BACKUP_SAVED_BACKUPS_NUMBER + path="$SCRIPT_DIR/../configurations/$CONFIGURATION/backup/" + + cd $path + + printf "In\n '$path'\n remove:\n" + # TODO: replace 'ls' by 'find . -type d -maxdepth 1'? description: https://unix.stackexchange.com/questions/28939/how-to-delete-the-oldest-directory-in-a-given-directory + while [ `ls -1 | wc -l` -gt $keep ]; do + oldest=`ls -c1 | head -1` + echo " $oldest" + rm -rf $oldest + done + + printf "Keep the last %d backups:\n " $BACKUP_SAVED_BACKUPS_NUMBER + ls + + cd $SCRIPT_DIR + else + echo "!!! ATTENTION: No backups are deleted !!!" + fi + + printf "\n" done # reset CONFIGURATION to old +# TODO: clearily if this is the same as: $ export CONFIGURATION=${SAVE_CONFIGURATION}" CONFIGURATION=$SAVE_CONFIGURATION -echo "Reset to CONFIGURATION=${CONFIGURATION}" +echo "Reset to CONFIGURATION=$CONFIGURATION" From 1331d28a72ef76a89ea56b92c083db396217093d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Wed, 22 Nov 2023 16:24:44 +0100 Subject: [PATCH 05/35] Add 'Multiple Networks Backup' to deployment readme --- deployment/deployment.md | 40 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/deployment/deployment.md b/deployment/deployment.md index f085b48d0..cb7815249 100644 --- a/deployment/deployment.md +++ b/deployment/deployment.md @@ -22,9 +22,9 @@ After the first deployment of the new network on your server, the database is in ***ATTENTION:*** When you are logged in for the first time, please change your (the admin's) e-mail to an existing one and change your password to a secure one !!! -## Use the Scripts +## Using the Scripts -To use all the scripts you have to set the variable `CONFIGURATION` in your terminal by entering: +To use most of the scripts you have to set the variable `CONFIGURATION` in your terminal by entering: ```bash # in deployment folder @@ -64,9 +64,13 @@ $ scripts/cluster.maintenance.sh on $ scripts/cluster.maintenance.sh off ``` -### Backup Script +### Backup Scripts -To save a locale backup of the database and uploaded images: +Save backups. + +#### Single Backup + +To save a local backup of the database and uploaded images: ```bash # in deployment folder @@ -76,3 +80,31 @@ $ scripts/cluster.backup.sh ``` The backup will be saved into your network folders `backup` folder in a new folder with the date and time. + +#### Multiple Networks Backup + +In order to save several network backups locally, you must define the configuration names of all networks in `.env`. The template for this is `deployment/.env.dist`: + +```bash +# in the deployment folders '.env' set as example +BACKUP_CONFIGURATIONS="stage.ocelot.social stage.wir.social" +BACKUP_SAVED_BACKUPS_NUMBER=7 +``` + +If `BACKUP_SAVED_BACKUPS_NUMBER <= 0` then no backups will be deleted. + +To actually save all the backups run: + +```bash +# in deployment folder + +# save all backups listed in 'BACKUP_CONFIGURATIONS' +# delete all backups older then the 'BACKUP_SAVED_BACKUPS_NUMBER' newest ones +$ scripts/clusters.cron-backups.sh +``` + +The backups will be saved into your networks folders `backup` folder in a new folder with the date and time. + +#### Automated Backups + +XXX From 1f28bed2807f55b0b30612a664fb66ca67370719 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Thu, 23 Nov 2023 10:56:19 +0100 Subject: [PATCH 06/35] Check for definition of variable 'BACKUP_SAVED_BACKUPS_NUMBER' --- deployment/scripts/clusters.cron-backups.sh | 80 ++++++++++++--------- 1 file changed, 46 insertions(+), 34 deletions(-) diff --git a/deployment/scripts/clusters.cron-backups.sh b/deployment/scripts/clusters.cron-backups.sh index 71e9e65f7..193865856 100755 --- a/deployment/scripts/clusters.cron-backups.sh +++ b/deployment/scripts/clusters.cron-backups.sh @@ -18,9 +18,21 @@ set +a # check BACKUP_CONFIGURATIONS if [[ -z ${BACKUP_CONFIGURATIONS} ]]; then - echo "You must provide a `BACKUP_CONFIGURATIONS` via environment variable" + echo "You must provide a 'BACKUP_CONFIGURATIONS' via environment variable" exit 1 fi +# check BACKUP_SAVED_BACKUPS_NUMBER +if [[ -z ${BACKUP_SAVED_BACKUPS_NUMBER} ]]; then + echo "You must provide a 'BACKUP_SAVED_BACKUPS_NUMBER' via environment variable" + exit 1 +fi + +# deleting backups? +if (( BACKUP_SAVED_BACKUPS_NUMBER >= 1 )); then + printf "Keep the last %d backups for all networks.\n" $BACKUP_SAVED_BACKUPS_NUMBER +else + echo "!!! ATTENTION: No backups are deleted !!!" +fi # convert configurations to array IFS=' ' read -a CONFIGURATIONS_ARRAY <<< "$BACKUP_CONFIGURATIONS" @@ -32,46 +44,46 @@ do echo " $i" done echo "Cancel by ^C. You have 15 seconds" -# wait for the admin to react -sleep 15 +# # wait for the admin to react +# sleep 15 -printf "\n" +# printf "\n" -for i in "${CONFIGURATIONS_ARRAY[@]}" -do - CONFIGURATION=$i - # individual cluster backup - ${SCRIPT_DIR}/cluster.backup.sh +# for i in "${CONFIGURATIONS_ARRAY[@]}" +# do +# CONFIGURATION=$i +# # individual cluster backup +# ${SCRIPT_DIR}/cluster.backup.sh - # deleting backups? - if (( BACKUP_SAVED_BACKUPS_NUMBER >= 1 )); then - # delete all oldest backups, but leave the last BACKUP_SAVED_BACKUPS_NUMBER +# # deleting backups? +# if (( BACKUP_SAVED_BACKUPS_NUMBER >= 1 )); then +# # delete all oldest backups, but leave the last BACKUP_SAVED_BACKUPS_NUMBER - keep=$BACKUP_SAVED_BACKUPS_NUMBER - path="$SCRIPT_DIR/../configurations/$CONFIGURATION/backup/" +# keep=$BACKUP_SAVED_BACKUPS_NUMBER +# path="$SCRIPT_DIR/../configurations/$CONFIGURATION/backup/" - cd $path +# cd $path - printf "In\n '$path'\n remove:\n" - # TODO: replace 'ls' by 'find . -type d -maxdepth 1'? description: https://unix.stackexchange.com/questions/28939/how-to-delete-the-oldest-directory-in-a-given-directory - while [ `ls -1 | wc -l` -gt $keep ]; do - oldest=`ls -c1 | head -1` - echo " $oldest" - rm -rf $oldest - done +# printf "In\n '$path'\n remove:\n" +# # TODO: replace 'ls' by 'find . -type d -maxdepth 1'? description: https://unix.stackexchange.com/questions/28939/how-to-delete-the-oldest-directory-in-a-given-directory +# while [ `ls -1 | wc -l` -gt $keep ]; do +# oldest=`ls -c1 | head -1` +# echo " $oldest" +# rm -rf $oldest +# done - printf "Keep the last %d backups:\n " $BACKUP_SAVED_BACKUPS_NUMBER - ls +# printf "Keep the last %d backups:\n " $BACKUP_SAVED_BACKUPS_NUMBER +# ls - cd $SCRIPT_DIR - else - echo "!!! ATTENTION: No backups are deleted !!!" - fi +# cd $SCRIPT_DIR +# else +# echo "!!! ATTENTION: No backups are deleted !!!" +# fi - printf "\n" -done +# printf "\n" +# done -# reset CONFIGURATION to old -# TODO: clearily if this is the same as: $ export CONFIGURATION=${SAVE_CONFIGURATION}" -CONFIGURATION=$SAVE_CONFIGURATION -echo "Reset to CONFIGURATION=$CONFIGURATION" +# # reset CONFIGURATION to old +# # TODO: clearily if this is the same as: $ export CONFIGURATION=${SAVE_CONFIGURATION}" +# CONFIGURATION=$SAVE_CONFIGURATION +# echo "Reset to CONFIGURATION=$CONFIGURATION" From 524d651553dd4013c00fbee227a6df5a2c44dc32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Thu, 23 Nov 2023 11:04:47 +0100 Subject: [PATCH 07/35] Rename script 'clusters.cron-backups.sh' to 'clusters.backup-multiple-servers.sh' --- deployment/.env.dist | 2 +- deployment/deployment.md | 2 +- .../clusters.backup-multiple-servers.sh | 89 +++++++++++++++++++ deployment/scripts/clusters.cron-backups.sh | 89 ------------------- 4 files changed, 91 insertions(+), 91 deletions(-) create mode 100755 deployment/scripts/clusters.backup-multiple-servers.sh delete mode 100755 deployment/scripts/clusters.cron-backups.sh diff --git a/deployment/.env.dist b/deployment/.env.dist index 38adc9027..14d793e06 100644 --- a/deployment/.env.dist +++ b/deployment/.env.dist @@ -1,7 +1,7 @@ # branding folder used for "docker compose up" run in deployment folder CONFIGURATION=stage.ocelot.social -# used in "scripts/clusters.cron-backups.sh" +# used in "scripts/clusters.backup-multiple-servers.sh" BACKUP_CONFIGURATIONS="stage.ocelot.social stage.wir.social" # if '<= 0' no backups will be deleted BACKUP_SAVED_BACKUPS_NUMBER=7 \ No newline at end of file diff --git a/deployment/deployment.md b/deployment/deployment.md index cb7815249..7a9438a3c 100644 --- a/deployment/deployment.md +++ b/deployment/deployment.md @@ -100,7 +100,7 @@ To actually save all the backups run: # save all backups listed in 'BACKUP_CONFIGURATIONS' # delete all backups older then the 'BACKUP_SAVED_BACKUPS_NUMBER' newest ones -$ scripts/clusters.cron-backups.sh +$ scripts/clusters.backup-multiple-servers.sh ``` The backups will be saved into your networks folders `backup` folder in a new folder with the date and time. diff --git a/deployment/scripts/clusters.backup-multiple-servers.sh b/deployment/scripts/clusters.backup-multiple-servers.sh new file mode 100755 index 000000000..290f09314 --- /dev/null +++ b/deployment/scripts/clusters.backup-multiple-servers.sh @@ -0,0 +1,89 @@ +#!/bin/bash + +# time stamp +printf "\nMultiple backups started at:\n " +date + +# base setup +SCRIPT_PATH=$(realpath $0) +SCRIPT_DIR=$(dirname $SCRIPT_PATH) + +# save old CONFIGURATION for later reset +SAVE_CONFIGURATION=$CONFIGURATION + +# export all variables in "../.env" +set -a +source ${SCRIPT_DIR}/../.env +set +a + +# check BACKUP_CONFIGURATIONS +if [[ -z ${BACKUP_CONFIGURATIONS} ]]; then + echo "You must provide a 'BACKUP_CONFIGURATIONS' via environment variable" + exit 1 +fi +# check BACKUP_SAVED_BACKUPS_NUMBER +if [[ -z ${BACKUP_SAVED_BACKUPS_NUMBER} ]]; then + echo "You must provide a 'BACKUP_SAVED_BACKUPS_NUMBER' via environment variable" + exit 1 +fi + +# deleting backups? +if (( BACKUP_SAVED_BACKUPS_NUMBER >= 1 )); then + printf "Keep the last %d backups for all networks.\n" $BACKUP_SAVED_BACKUPS_NUMBER +else + echo "!!! ATTENTION: No backups are deleted !!!" +fi + +# convert configurations to array +IFS=' ' read -a CONFIGURATIONS_ARRAY <<< "$BACKUP_CONFIGURATIONS" + +# display the clusters +printf "Backup the clusters:\n" +for i in "${CONFIGURATIONS_ARRAY[@]}" +do + echo " $i" +done +echo "Cancel by ^C. You have 15 seconds" +# wait for the admin to react +sleep 15 + +printf "\n" + +for i in "${CONFIGURATIONS_ARRAY[@]}" +do + CONFIGURATION=$i + # individual cluster backup + ${SCRIPT_DIR}/cluster.backup.sh + + # deleting backups? + if (( BACKUP_SAVED_BACKUPS_NUMBER >= 1 )); then + # delete all oldest backups, but leave the last BACKUP_SAVED_BACKUPS_NUMBER + + keep=$BACKUP_SAVED_BACKUPS_NUMBER + path="$SCRIPT_DIR/../configurations/$CONFIGURATION/backup/" + + cd $path + + printf "In\n '$path'\n remove:\n" + # TODO: replace 'ls' by 'find . -type d -maxdepth 1'? description: https://unix.stackexchange.com/questions/28939/how-to-delete-the-oldest-directory-in-a-given-directory + while [ `ls -1 | wc -l` -gt $keep ]; do + oldest=`ls -c1 | head -1` + echo " $oldest" + rm -rf $oldest + done + + printf "Keep the last %d backups:\n " $BACKUP_SAVED_BACKUPS_NUMBER + ls + + cd $SCRIPT_DIR + else + echo "!!! ATTENTION: No backups are deleted !!!" + fi + + printf "\n" +done + +# reset CONFIGURATION to old +# TODO: clearily if this is the same as: $ export CONFIGURATION=${SAVE_CONFIGURATION}" +CONFIGURATION=$SAVE_CONFIGURATION +echo "Reset to CONFIGURATION=$CONFIGURATION" diff --git a/deployment/scripts/clusters.cron-backups.sh b/deployment/scripts/clusters.cron-backups.sh deleted file mode 100755 index 193865856..000000000 --- a/deployment/scripts/clusters.cron-backups.sh +++ /dev/null @@ -1,89 +0,0 @@ -#!/bin/bash - -# time stamp -printf "\nMultiple backups started at:\n " -date - -# base setup -SCRIPT_PATH=$(realpath $0) -SCRIPT_DIR=$(dirname $SCRIPT_PATH) - -# save old CONFIGURATION for later reset -SAVE_CONFIGURATION=$CONFIGURATION - -# export all variables in "../.env" -set -a -source ${SCRIPT_DIR}/../.env -set +a - -# check BACKUP_CONFIGURATIONS -if [[ -z ${BACKUP_CONFIGURATIONS} ]]; then - echo "You must provide a 'BACKUP_CONFIGURATIONS' via environment variable" - exit 1 -fi -# check BACKUP_SAVED_BACKUPS_NUMBER -if [[ -z ${BACKUP_SAVED_BACKUPS_NUMBER} ]]; then - echo "You must provide a 'BACKUP_SAVED_BACKUPS_NUMBER' via environment variable" - exit 1 -fi - -# deleting backups? -if (( BACKUP_SAVED_BACKUPS_NUMBER >= 1 )); then - printf "Keep the last %d backups for all networks.\n" $BACKUP_SAVED_BACKUPS_NUMBER -else - echo "!!! ATTENTION: No backups are deleted !!!" -fi - -# convert configurations to array -IFS=' ' read -a CONFIGURATIONS_ARRAY <<< "$BACKUP_CONFIGURATIONS" - -# display the clusters -printf "Backup the clusters:\n" -for i in "${CONFIGURATIONS_ARRAY[@]}" -do - echo " $i" -done -echo "Cancel by ^C. You have 15 seconds" -# # wait for the admin to react -# sleep 15 - -# printf "\n" - -# for i in "${CONFIGURATIONS_ARRAY[@]}" -# do -# CONFIGURATION=$i -# # individual cluster backup -# ${SCRIPT_DIR}/cluster.backup.sh - -# # deleting backups? -# if (( BACKUP_SAVED_BACKUPS_NUMBER >= 1 )); then -# # delete all oldest backups, but leave the last BACKUP_SAVED_BACKUPS_NUMBER - -# keep=$BACKUP_SAVED_BACKUPS_NUMBER -# path="$SCRIPT_DIR/../configurations/$CONFIGURATION/backup/" - -# cd $path - -# printf "In\n '$path'\n remove:\n" -# # TODO: replace 'ls' by 'find . -type d -maxdepth 1'? description: https://unix.stackexchange.com/questions/28939/how-to-delete-the-oldest-directory-in-a-given-directory -# while [ `ls -1 | wc -l` -gt $keep ]; do -# oldest=`ls -c1 | head -1` -# echo " $oldest" -# rm -rf $oldest -# done - -# printf "Keep the last %d backups:\n " $BACKUP_SAVED_BACKUPS_NUMBER -# ls - -# cd $SCRIPT_DIR -# else -# echo "!!! ATTENTION: No backups are deleted !!!" -# fi - -# printf "\n" -# done - -# # reset CONFIGURATION to old -# # TODO: clearily if this is the same as: $ export CONFIGURATION=${SAVE_CONFIGURATION}" -# CONFIGURATION=$SAVE_CONFIGURATION -# echo "Reset to CONFIGURATION=$CONFIGURATION" From ae17ef791cc88bcae13d9a39692d287bfd3fbee1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Mon, 27 Nov 2023 13:35:08 +0100 Subject: [PATCH 08/35] Remove single quotes from 'clusters.backup-multiple-servers.sh' --- deployment/scripts/clusters.backup-multiple-servers.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deployment/scripts/clusters.backup-multiple-servers.sh b/deployment/scripts/clusters.backup-multiple-servers.sh index 290f09314..85415deb7 100755 --- a/deployment/scripts/clusters.backup-multiple-servers.sh +++ b/deployment/scripts/clusters.backup-multiple-servers.sh @@ -18,12 +18,12 @@ set +a # check BACKUP_CONFIGURATIONS if [[ -z ${BACKUP_CONFIGURATIONS} ]]; then - echo "You must provide a 'BACKUP_CONFIGURATIONS' via environment variable" + echo "You must provide a BACKUP_CONFIGURATIONS via environment variable" exit 1 fi # check BACKUP_SAVED_BACKUPS_NUMBER if [[ -z ${BACKUP_SAVED_BACKUPS_NUMBER} ]]; then - echo "You must provide a 'BACKUP_SAVED_BACKUPS_NUMBER' via environment variable" + echo "You must provide a BACKUP_SAVED_BACKUPS_NUMBER via environment variable" exit 1 fi From 33b8df4e53579a6b5c1010d8dfe9b61910b63860 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Mon, 27 Nov 2023 13:55:52 +0100 Subject: [PATCH 09/35] Log the variables only if defined --- .../clusters.backup-multiple-servers.sh | 35 +++++++++++-------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/deployment/scripts/clusters.backup-multiple-servers.sh b/deployment/scripts/clusters.backup-multiple-servers.sh index 85415deb7..f840fbc7c 100755 --- a/deployment/scripts/clusters.backup-multiple-servers.sh +++ b/deployment/scripts/clusters.backup-multiple-servers.sh @@ -4,6 +4,9 @@ printf "\nMultiple backups started at:\n " date +# # log the shell used +# echo "Shell used: $0" + # base setup SCRIPT_PATH=$(realpath $0) SCRIPT_DIR=$(dirname $SCRIPT_PATH) @@ -20,29 +23,31 @@ set +a if [[ -z ${BACKUP_CONFIGURATIONS} ]]; then echo "You must provide a BACKUP_CONFIGURATIONS via environment variable" exit 1 +else + # convert configurations to array + IFS=' ' read -a CONFIGURATIONS_ARRAY <<< "$BACKUP_CONFIGURATIONS" + + # display the clusters + printf "Backup the clusters:\n" + for i in "${CONFIGURATIONS_ARRAY[@]}" + do + echo " $i" + done fi + # check BACKUP_SAVED_BACKUPS_NUMBER if [[ -z ${BACKUP_SAVED_BACKUPS_NUMBER} ]]; then echo "You must provide a BACKUP_SAVED_BACKUPS_NUMBER via environment variable" exit 1 -fi - -# deleting backups? -if (( BACKUP_SAVED_BACKUPS_NUMBER >= 1 )); then - printf "Keep the last %d backups for all networks.\n" $BACKUP_SAVED_BACKUPS_NUMBER else - echo "!!! ATTENTION: No backups are deleted !!!" + # deleting backups? + if (( BACKUP_SAVED_BACKUPS_NUMBER >= 1 )); then + printf "Keep the last %d backups for all networks.\n" $BACKUP_SAVED_BACKUPS_NUMBER + else + echo "!!! ATTENTION: No backups are deleted !!!" + fi fi -# convert configurations to array -IFS=' ' read -a CONFIGURATIONS_ARRAY <<< "$BACKUP_CONFIGURATIONS" - -# display the clusters -printf "Backup the clusters:\n" -for i in "${CONFIGURATIONS_ARRAY[@]}" -do - echo " $i" -done echo "Cancel by ^C. You have 15 seconds" # wait for the admin to react sleep 15 From 0bea2cdca933ea5ad119adcf8d5eda5e4498c5a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Mon, 27 Nov 2023 14:44:18 +0100 Subject: [PATCH 10/35] Echo 'SCRIPT_PATH' and 'SCRIPT_DIR' for debugging --- deployment/scripts/clusters.backup-multiple-servers.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/deployment/scripts/clusters.backup-multiple-servers.sh b/deployment/scripts/clusters.backup-multiple-servers.sh index f840fbc7c..164afc774 100755 --- a/deployment/scripts/clusters.backup-multiple-servers.sh +++ b/deployment/scripts/clusters.backup-multiple-servers.sh @@ -11,6 +11,9 @@ date SCRIPT_PATH=$(realpath $0) SCRIPT_DIR=$(dirname $SCRIPT_PATH) +echo "SCRIPT_PATH=$SCRIPT_PATH" +echo "SCRIPT_DIR=$SCRIPT_DIR" + # save old CONFIGURATION for later reset SAVE_CONFIGURATION=$CONFIGURATION From 6fe2fdfb2c261c2100a111a72349ec491ee881c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Mon, 27 Nov 2023 15:43:34 +0100 Subject: [PATCH 11/35] Debug script more detailed --- deployment/scripts/cluster.backup.sh | 7 +++++-- deployment/scripts/clusters.backup-multiple-servers.sh | 10 ++++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/deployment/scripts/cluster.backup.sh b/deployment/scripts/cluster.backup.sh index d5d5e1b59..bfa246ca4 100755 --- a/deployment/scripts/cluster.backup.sh +++ b/deployment/scripts/cluster.backup.sh @@ -8,9 +8,12 @@ date SCRIPT_PATH=$(realpath $0) SCRIPT_DIR=$(dirname $SCRIPT_PATH) +# debugging +printf "CONFIGURATION=%s\n" $CONFIGURATION + # check CONFIGURATION -if [ -z ${CONFIGURATION} ]; then - echo "You must provide a `CONFIGURATION` via environment variable" +if [[ -z ${CONFIGURATION} ]]; then + echo "!!! You must provide a CONFIGURATION via environment variable !!!" exit 1 fi diff --git a/deployment/scripts/clusters.backup-multiple-servers.sh b/deployment/scripts/clusters.backup-multiple-servers.sh index 164afc774..2bde67e51 100755 --- a/deployment/scripts/clusters.backup-multiple-servers.sh +++ b/deployment/scripts/clusters.backup-multiple-servers.sh @@ -11,6 +11,7 @@ date SCRIPT_PATH=$(realpath $0) SCRIPT_DIR=$(dirname $SCRIPT_PATH) +# debugging echo "SCRIPT_PATH=$SCRIPT_PATH" echo "SCRIPT_DIR=$SCRIPT_DIR" @@ -24,9 +25,13 @@ set +a # check BACKUP_CONFIGURATIONS if [[ -z ${BACKUP_CONFIGURATIONS} ]]; then - echo "You must provide a BACKUP_CONFIGURATIONS via environment variable" + #%! echo "You must provide a BACKUP_CONFIGURATIONS via environment variable" + printf "!!! You must provide a BACKUP_CONFIGURATIONS via environment variable !!!\n" exit 1 else + # debugging + printf "BACKUP_CONFIGURATIONS=%s\n" $BACKUP_CONFIGURATIONS + # convert configurations to array IFS=' ' read -a CONFIGURATIONS_ARRAY <<< "$BACKUP_CONFIGURATIONS" @@ -40,7 +45,8 @@ fi # check BACKUP_SAVED_BACKUPS_NUMBER if [[ -z ${BACKUP_SAVED_BACKUPS_NUMBER} ]]; then - echo "You must provide a BACKUP_SAVED_BACKUPS_NUMBER via environment variable" + #%! echo "You must provide a BACKUP_SAVED_BACKUPS_NUMBER via environment variable" + printf "!!! You must provide a BACKUP_SAVED_BACKUPS_NUMBER via environment variable !!!\n" exit 1 else # deleting backups? From 5b2a1320f04e4eebfe71c5d2cddbb98c6fea9341 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 28 Nov 2023 08:49:43 +0100 Subject: [PATCH 12/35] Export 'CONFIGURATION' instead just assigning it --- deployment/scripts/clusters.backup-multiple-servers.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/deployment/scripts/clusters.backup-multiple-servers.sh b/deployment/scripts/clusters.backup-multiple-servers.sh index 2bde67e51..5802517fd 100755 --- a/deployment/scripts/clusters.backup-multiple-servers.sh +++ b/deployment/scripts/clusters.backup-multiple-servers.sh @@ -16,7 +16,7 @@ echo "SCRIPT_PATH=$SCRIPT_PATH" echo "SCRIPT_DIR=$SCRIPT_DIR" # save old CONFIGURATION for later reset -SAVE_CONFIGURATION=$CONFIGURATION +export SAVE_CONFIGURATION=$CONFIGURATION # export all variables in "../.env" set -a @@ -65,7 +65,7 @@ printf "\n" for i in "${CONFIGURATIONS_ARRAY[@]}" do - CONFIGURATION=$i + export CONFIGURATION=$i # individual cluster backup ${SCRIPT_DIR}/cluster.backup.sh @@ -99,5 +99,5 @@ done # reset CONFIGURATION to old # TODO: clearily if this is the same as: $ export CONFIGURATION=${SAVE_CONFIGURATION}" -CONFIGURATION=$SAVE_CONFIGURATION +export CONFIGURATION=$SAVE_CONFIGURATION echo "Reset to CONFIGURATION=$CONFIGURATION" From 2f8d0eda369eb1d6f57cda9fb09aa40ac484693c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 28 Nov 2023 09:06:50 +0100 Subject: [PATCH 13/35] Add debugging --- deployment/scripts/clusters.backup-multiple-servers.sh | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/deployment/scripts/clusters.backup-multiple-servers.sh b/deployment/scripts/clusters.backup-multiple-servers.sh index 5802517fd..88d881b62 100755 --- a/deployment/scripts/clusters.backup-multiple-servers.sh +++ b/deployment/scripts/clusters.backup-multiple-servers.sh @@ -12,11 +12,13 @@ SCRIPT_PATH=$(realpath $0) SCRIPT_DIR=$(dirname $SCRIPT_PATH) # debugging -echo "SCRIPT_PATH=$SCRIPT_PATH" -echo "SCRIPT_DIR=$SCRIPT_DIR" +echo "debugging SCRIPT_PATH=$SCRIPT_PATH" +echo "debugging SCRIPT_DIR=$SCRIPT_DIR" # save old CONFIGURATION for later reset export SAVE_CONFIGURATION=$CONFIGURATION +# debugging +printf "debugging SAVE_CONFIGURATION=%s\n" $SAVE_CONFIGURATION # export all variables in "../.env" set -a @@ -30,7 +32,7 @@ if [[ -z ${BACKUP_CONFIGURATIONS} ]]; then exit 1 else # debugging - printf "BACKUP_CONFIGURATIONS=%s\n" $BACKUP_CONFIGURATIONS + printf "debugging BACKUP_CONFIGURATIONS=%s\n" $BACKUP_CONFIGURATIONS # convert configurations to array IFS=' ' read -a CONFIGURATIONS_ARRAY <<< "$BACKUP_CONFIGURATIONS" @@ -101,3 +103,5 @@ done # TODO: clearily if this is the same as: $ export CONFIGURATION=${SAVE_CONFIGURATION}" export CONFIGURATION=$SAVE_CONFIGURATION echo "Reset to CONFIGURATION=$CONFIGURATION" +# debugging +printf "debugging CONFIGURATION=%s\n" $CONFIGURATION From 4c9d588e9a8695bab31e7f1e4af6322fc5d5fb00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 28 Nov 2023 12:16:18 +0100 Subject: [PATCH 14/35] Add several curly brackets to script 'clusters.backup-multiple-servers.sh', because not all is function well on the backup server --- .../clusters.backup-multiple-servers.sh | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/deployment/scripts/clusters.backup-multiple-servers.sh b/deployment/scripts/clusters.backup-multiple-servers.sh index 88d881b62..44e1b8165 100755 --- a/deployment/scripts/clusters.backup-multiple-servers.sh +++ b/deployment/scripts/clusters.backup-multiple-servers.sh @@ -12,13 +12,13 @@ SCRIPT_PATH=$(realpath $0) SCRIPT_DIR=$(dirname $SCRIPT_PATH) # debugging -echo "debugging SCRIPT_PATH=$SCRIPT_PATH" -echo "debugging SCRIPT_DIR=$SCRIPT_DIR" +echo "debugging SCRIPT_PATH=${SCRIPT_PATH}" +echo "debugging SCRIPT_DIR=${SCRIPT_DIR}" # save old CONFIGURATION for later reset -export SAVE_CONFIGURATION=$CONFIGURATION +export SAVE_CONFIGURATION=${CONFIGURATION} # debugging -printf "debugging SAVE_CONFIGURATION=%s\n" $SAVE_CONFIGURATION +printf "debugging SAVE_CONFIGURATION=%s\n" ${SAVE_CONFIGURATION} # export all variables in "../.env" set -a @@ -32,16 +32,16 @@ if [[ -z ${BACKUP_CONFIGURATIONS} ]]; then exit 1 else # debugging - printf "debugging BACKUP_CONFIGURATIONS=%s\n" $BACKUP_CONFIGURATIONS + printf "debugging BACKUP_CONFIGURATIONS=%s\n" ${BACKUP_CONFIGURATIONS} # convert configurations to array - IFS=' ' read -a CONFIGURATIONS_ARRAY <<< "$BACKUP_CONFIGURATIONS" + IFS=' ' read -a CONFIGURATIONS_ARRAY <<< "${BACKUP_CONFIGURATIONS}" # display the clusters printf "Backup the clusters:\n" for i in "${CONFIGURATIONS_ARRAY[@]}" do - echo " $i" + echo " ${i}" done fi @@ -53,7 +53,7 @@ if [[ -z ${BACKUP_SAVED_BACKUPS_NUMBER} ]]; then else # deleting backups? if (( BACKUP_SAVED_BACKUPS_NUMBER >= 1 )); then - printf "Keep the last %d backups for all networks.\n" $BACKUP_SAVED_BACKUPS_NUMBER + printf "Keep the last %d backups for all networks.\n" ${BACKUP_SAVED_BACKUPS_NUMBER} else echo "!!! ATTENTION: No backups are deleted !!!" fi @@ -67,7 +67,7 @@ printf "\n" for i in "${CONFIGURATIONS_ARRAY[@]}" do - export CONFIGURATION=$i + export CONFIGURATION=${i} # individual cluster backup ${SCRIPT_DIR}/cluster.backup.sh @@ -75,8 +75,8 @@ do if (( BACKUP_SAVED_BACKUPS_NUMBER >= 1 )); then # delete all oldest backups, but leave the last BACKUP_SAVED_BACKUPS_NUMBER - keep=$BACKUP_SAVED_BACKUPS_NUMBER - path="$SCRIPT_DIR/../configurations/$CONFIGURATION/backup/" + keep=${BACKUP_SAVED_BACKUPS_NUMBER} + path="${SCRIPT_DIR}/../configurations/${CONFIGURATION}/backup/" cd $path @@ -84,14 +84,14 @@ do # TODO: replace 'ls' by 'find . -type d -maxdepth 1'? description: https://unix.stackexchange.com/questions/28939/how-to-delete-the-oldest-directory-in-a-given-directory while [ `ls -1 | wc -l` -gt $keep ]; do oldest=`ls -c1 | head -1` - echo " $oldest" + echo " ${oldest}" rm -rf $oldest done - printf "Keep the last %d backups:\n " $BACKUP_SAVED_BACKUPS_NUMBER + printf "Keep the last %d backups:\n " ${BACKUP_SAVED_BACKUPS_NUMBER} ls - cd $SCRIPT_DIR + cd ${SCRIPT_DIR} else echo "!!! ATTENTION: No backups are deleted !!!" fi @@ -101,7 +101,7 @@ done # reset CONFIGURATION to old # TODO: clearily if this is the same as: $ export CONFIGURATION=${SAVE_CONFIGURATION}" -export CONFIGURATION=$SAVE_CONFIGURATION -echo "Reset to CONFIGURATION=$CONFIGURATION" +export CONFIGURATION=${SAVE_CONFIGURATION} +echo "Reset to CONFIGURATION=${CONFIGURATION}" # debugging -printf "debugging CONFIGURATION=%s\n" $CONFIGURATION +printf "debugging CONFIGURATION=%s\n" ${CONFIGURATION} From 72978889efc15ad588f2247a01b9857b9326b4f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 28 Nov 2023 12:33:00 +0100 Subject: [PATCH 15/35] Revert "Add several curly brackets to script 'clusters.backup-multiple-servers.sh', because not all is function well on the backup server" This reverts commit 4c9d588e9a8695bab31e7f1e4af6322fc5d5fb00. --- .../clusters.backup-multiple-servers.sh | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/deployment/scripts/clusters.backup-multiple-servers.sh b/deployment/scripts/clusters.backup-multiple-servers.sh index 44e1b8165..88d881b62 100755 --- a/deployment/scripts/clusters.backup-multiple-servers.sh +++ b/deployment/scripts/clusters.backup-multiple-servers.sh @@ -12,13 +12,13 @@ SCRIPT_PATH=$(realpath $0) SCRIPT_DIR=$(dirname $SCRIPT_PATH) # debugging -echo "debugging SCRIPT_PATH=${SCRIPT_PATH}" -echo "debugging SCRIPT_DIR=${SCRIPT_DIR}" +echo "debugging SCRIPT_PATH=$SCRIPT_PATH" +echo "debugging SCRIPT_DIR=$SCRIPT_DIR" # save old CONFIGURATION for later reset -export SAVE_CONFIGURATION=${CONFIGURATION} +export SAVE_CONFIGURATION=$CONFIGURATION # debugging -printf "debugging SAVE_CONFIGURATION=%s\n" ${SAVE_CONFIGURATION} +printf "debugging SAVE_CONFIGURATION=%s\n" $SAVE_CONFIGURATION # export all variables in "../.env" set -a @@ -32,16 +32,16 @@ if [[ -z ${BACKUP_CONFIGURATIONS} ]]; then exit 1 else # debugging - printf "debugging BACKUP_CONFIGURATIONS=%s\n" ${BACKUP_CONFIGURATIONS} + printf "debugging BACKUP_CONFIGURATIONS=%s\n" $BACKUP_CONFIGURATIONS # convert configurations to array - IFS=' ' read -a CONFIGURATIONS_ARRAY <<< "${BACKUP_CONFIGURATIONS}" + IFS=' ' read -a CONFIGURATIONS_ARRAY <<< "$BACKUP_CONFIGURATIONS" # display the clusters printf "Backup the clusters:\n" for i in "${CONFIGURATIONS_ARRAY[@]}" do - echo " ${i}" + echo " $i" done fi @@ -53,7 +53,7 @@ if [[ -z ${BACKUP_SAVED_BACKUPS_NUMBER} ]]; then else # deleting backups? if (( BACKUP_SAVED_BACKUPS_NUMBER >= 1 )); then - printf "Keep the last %d backups for all networks.\n" ${BACKUP_SAVED_BACKUPS_NUMBER} + printf "Keep the last %d backups for all networks.\n" $BACKUP_SAVED_BACKUPS_NUMBER else echo "!!! ATTENTION: No backups are deleted !!!" fi @@ -67,7 +67,7 @@ printf "\n" for i in "${CONFIGURATIONS_ARRAY[@]}" do - export CONFIGURATION=${i} + export CONFIGURATION=$i # individual cluster backup ${SCRIPT_DIR}/cluster.backup.sh @@ -75,8 +75,8 @@ do if (( BACKUP_SAVED_BACKUPS_NUMBER >= 1 )); then # delete all oldest backups, but leave the last BACKUP_SAVED_BACKUPS_NUMBER - keep=${BACKUP_SAVED_BACKUPS_NUMBER} - path="${SCRIPT_DIR}/../configurations/${CONFIGURATION}/backup/" + keep=$BACKUP_SAVED_BACKUPS_NUMBER + path="$SCRIPT_DIR/../configurations/$CONFIGURATION/backup/" cd $path @@ -84,14 +84,14 @@ do # TODO: replace 'ls' by 'find . -type d -maxdepth 1'? description: https://unix.stackexchange.com/questions/28939/how-to-delete-the-oldest-directory-in-a-given-directory while [ `ls -1 | wc -l` -gt $keep ]; do oldest=`ls -c1 | head -1` - echo " ${oldest}" + echo " $oldest" rm -rf $oldest done - printf "Keep the last %d backups:\n " ${BACKUP_SAVED_BACKUPS_NUMBER} + printf "Keep the last %d backups:\n " $BACKUP_SAVED_BACKUPS_NUMBER ls - cd ${SCRIPT_DIR} + cd $SCRIPT_DIR else echo "!!! ATTENTION: No backups are deleted !!!" fi @@ -101,7 +101,7 @@ done # reset CONFIGURATION to old # TODO: clearily if this is the same as: $ export CONFIGURATION=${SAVE_CONFIGURATION}" -export CONFIGURATION=${SAVE_CONFIGURATION} -echo "Reset to CONFIGURATION=${CONFIGURATION}" +export CONFIGURATION=$SAVE_CONFIGURATION +echo "Reset to CONFIGURATION=$CONFIGURATION" # debugging -printf "debugging CONFIGURATION=%s\n" ${CONFIGURATION} +printf "debugging CONFIGURATION=%s\n" $CONFIGURATION From ae41243324e1c1f314e93a027a388568e17959ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 28 Nov 2023 15:45:41 +0100 Subject: [PATCH 16/35] Fix deletion of wrong backup directory on the backup server with alpine system --- deployment/scripts/cluster.backup.sh | 3 ++- .../scripts/clusters.backup-multiple-servers.sh | 13 +++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/deployment/scripts/cluster.backup.sh b/deployment/scripts/cluster.backup.sh index bfa246ca4..a68886e0a 100755 --- a/deployment/scripts/cluster.backup.sh +++ b/deployment/scripts/cluster.backup.sh @@ -22,7 +22,8 @@ KUBECONFIG=${KUBECONFIG:-${SCRIPT_DIR}/../configurations/${CONFIGURATION}/kubeco BACKUP_DATE=$(date "+%F_%H-%M-%S") BACKUP_FOLDER=${BACKUP_FOLDER:-${SCRIPT_DIR}/../configurations/${CONFIGURATION}/backup/${BACKUP_DATE}} -# create backup fodler +printf "Backup folder name: %s\n" $BACKUP_DATE +# create backup folder mkdir -p ${BACKUP_FOLDER} # cluster maintenance mode on && Neo4j maintenance mode on diff --git a/deployment/scripts/clusters.backup-multiple-servers.sh b/deployment/scripts/clusters.backup-multiple-servers.sh index 88d881b62..fa448871d 100755 --- a/deployment/scripts/clusters.backup-multiple-servers.sh +++ b/deployment/scripts/clusters.backup-multiple-servers.sh @@ -81,15 +81,16 @@ do cd $path printf "In\n '$path'\n remove:\n" - # TODO: replace 'ls' by 'find . -type d -maxdepth 1'? description: https://unix.stackexchange.com/questions/28939/how-to-delete-the-oldest-directory-in-a-given-directory - while [ `ls -1 | wc -l` -gt $keep ]; do - oldest=`ls -c1 | head -1` - echo " $oldest" + while [ `ls -1 | wc -l` -gt $keep ]; do + # TODO: because 'ls' is not always relyable maybe replace 'ls' by 'find . -type d -maxdepth 1'? description: https://unix.stackexchange.com/questions/28939/how-to-delete-the-oldest-directory-in-a-given-directory + # I tested this, but 'find' this is crutial, because of shell compatibilities + oldest=`ls -c1 | sort -n | head -1` + printf " %s\n" $oldest rm -rf $oldest done - printf "Keep the last %d backups:\n " $BACKUP_SAVED_BACKUPS_NUMBER - ls + printf "Keep the last %d backups:\n" $BACKUP_SAVED_BACKUPS_NUMBER + ls -c1 | sort -n | awk '{print " " $0}' cd $SCRIPT_DIR else From dbca9b91c032dcbf76df2c174aaa295772965650 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 28 Nov 2023 15:52:11 +0100 Subject: [PATCH 17/35] Start 'Automated Backups' in readme --- deployment/deployment.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/deployment/deployment.md b/deployment/deployment.md index 7a9438a3c..259dd2e3f 100644 --- a/deployment/deployment.md +++ b/deployment/deployment.md @@ -30,7 +30,7 @@ To use most of the scripts you have to set the variable `CONFIGURATION` in your # in deployment folder # set configuration name to folder name in 'configurations' folder (network name) -$ export CONFIGURATION=`` +$ export CONFIGURATION= # to check this $ echo $CONFIGURATION ``` @@ -108,3 +108,14 @@ The backups will be saved into your networks folders `backup` folder in a new fo #### Automated Backups XXX + +⚠️ *Attention: Please check carefully whether really the oldest backups have been deleted. As shells on different systems behave differently with regard to the commands used in this script.* + +```bash +# in deployment folder + +# set a cron job every night at 04am server time +$ crontab -e + +0 15 * * * scripts/clusters.backup-multiple-servers.sh +``` From 0f4e061b1e72b31c6b12154ae76b7e0010b21028 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 28 Nov 2023 16:35:44 +0100 Subject: [PATCH 18/35] Finish 'Automated Backups' in readme --- deployment/deployment.md | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/deployment/deployment.md b/deployment/deployment.md index 259dd2e3f..ebcc2f6ca 100644 --- a/deployment/deployment.md +++ b/deployment/deployment.md @@ -107,15 +107,27 @@ The backups will be saved into your networks folders `backup` folder in a new fo #### Automated Backups -XXX - ⚠️ *Attention: Please check carefully whether really the oldest backups have been deleted. As shells on different systems behave differently with regard to the commands used in this script.* +Install automated backups by a cron job. +Be aware of having the bash shell installed to run the script. +The environment variables for the automated backups are described above. + +Installing a cron job by editing the cron table file: + ```bash -# in deployment folder +# edit cron job table +$ crontab -e +``` + +In the editor add the line: + +```bash +# in cron job table file # set a cron job every night at 04am server time -$ crontab -e - -0 15 * * * scripts/clusters.backup-multiple-servers.sh +# min hour day month weekday command +00 04 * * * /root/Ocelot-Social/deployment/scripts/clusters.backup-multiple-servers.sh >> /root/Ocelot-Social/deployment/backup-cron-job.log ``` + +This way the terminal output is written into a log file named `backup-cron-job.log` located in the deployment folder. From 21992c9beb9b5476792d0c24ad0bd06c50b5018d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 28 Nov 2023 16:40:10 +0100 Subject: [PATCH 19/35] Remove all debugging outputs - Refine comment. --- deployment/scripts/cluster.backup.sh | 3 --- .../clusters.backup-multiple-servers.sh | 19 ++----------------- 2 files changed, 2 insertions(+), 20 deletions(-) diff --git a/deployment/scripts/cluster.backup.sh b/deployment/scripts/cluster.backup.sh index a68886e0a..f3749cd9d 100755 --- a/deployment/scripts/cluster.backup.sh +++ b/deployment/scripts/cluster.backup.sh @@ -8,9 +8,6 @@ date SCRIPT_PATH=$(realpath $0) SCRIPT_DIR=$(dirname $SCRIPT_PATH) -# debugging -printf "CONFIGURATION=%s\n" $CONFIGURATION - # check CONFIGURATION if [[ -z ${CONFIGURATION} ]]; then echo "!!! You must provide a CONFIGURATION via environment variable !!!" diff --git a/deployment/scripts/clusters.backup-multiple-servers.sh b/deployment/scripts/clusters.backup-multiple-servers.sh index fa448871d..3cceac4ec 100755 --- a/deployment/scripts/clusters.backup-multiple-servers.sh +++ b/deployment/scripts/clusters.backup-multiple-servers.sh @@ -4,21 +4,12 @@ printf "\nMultiple backups started at:\n " date -# # log the shell used -# echo "Shell used: $0" - # base setup SCRIPT_PATH=$(realpath $0) SCRIPT_DIR=$(dirname $SCRIPT_PATH) -# debugging -echo "debugging SCRIPT_PATH=$SCRIPT_PATH" -echo "debugging SCRIPT_DIR=$SCRIPT_DIR" - # save old CONFIGURATION for later reset export SAVE_CONFIGURATION=$CONFIGURATION -# debugging -printf "debugging SAVE_CONFIGURATION=%s\n" $SAVE_CONFIGURATION # export all variables in "../.env" set -a @@ -31,9 +22,6 @@ if [[ -z ${BACKUP_CONFIGURATIONS} ]]; then printf "!!! You must provide a BACKUP_CONFIGURATIONS via environment variable !!!\n" exit 1 else - # debugging - printf "debugging BACKUP_CONFIGURATIONS=%s\n" $BACKUP_CONFIGURATIONS - # convert configurations to array IFS=' ' read -a CONFIGURATIONS_ARRAY <<< "$BACKUP_CONFIGURATIONS" @@ -82,8 +70,8 @@ do printf "In\n '$path'\n remove:\n" while [ `ls -1 | wc -l` -gt $keep ]; do - # TODO: because 'ls' is not always relyable maybe replace 'ls' by 'find . -type d -maxdepth 1'? description: https://unix.stackexchange.com/questions/28939/how-to-delete-the-oldest-directory-in-a-given-directory - # I tested this, but 'find' this is crutial, because of shell compatibilities + # TODO: because 'ls' is not always relyable the same on different shells maybe replace 'ls' by 'find . -type d -maxdepth 1'? description: https://unix.stackexchange.com/questions/28939/how-to-delete-the-oldest-directory-in-a-given-directory + # I tested this, but 'find' is crutial to use, because of shell compatibilities oldest=`ls -c1 | sort -n | head -1` printf " %s\n" $oldest rm -rf $oldest @@ -101,8 +89,5 @@ do done # reset CONFIGURATION to old -# TODO: clearily if this is the same as: $ export CONFIGURATION=${SAVE_CONFIGURATION}" export CONFIGURATION=$SAVE_CONFIGURATION echo "Reset to CONFIGURATION=$CONFIGURATION" -# debugging -printf "debugging CONFIGURATION=%s\n" $CONFIGURATION From aeb14326302d0eac5b3dc8537d7ccf0106d4c06b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Wed, 29 Nov 2023 10:03:29 +0100 Subject: [PATCH 20/35] Avoid 'else' cases after exit in the 'if' case - Remove todo. --- .../clusters.backup-multiple-servers.sh | 34 +++++++++---------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/deployment/scripts/clusters.backup-multiple-servers.sh b/deployment/scripts/clusters.backup-multiple-servers.sh index 3cceac4ec..3dfcb1d79 100755 --- a/deployment/scripts/clusters.backup-multiple-servers.sh +++ b/deployment/scripts/clusters.backup-multiple-servers.sh @@ -21,16 +21,6 @@ if [[ -z ${BACKUP_CONFIGURATIONS} ]]; then #%! echo "You must provide a BACKUP_CONFIGURATIONS via environment variable" printf "!!! You must provide a BACKUP_CONFIGURATIONS via environment variable !!!\n" exit 1 -else - # convert configurations to array - IFS=' ' read -a CONFIGURATIONS_ARRAY <<< "$BACKUP_CONFIGURATIONS" - - # display the clusters - printf "Backup the clusters:\n" - for i in "${CONFIGURATIONS_ARRAY[@]}" - do - echo " $i" - done fi # check BACKUP_SAVED_BACKUPS_NUMBER @@ -38,13 +28,23 @@ if [[ -z ${BACKUP_SAVED_BACKUPS_NUMBER} ]]; then #%! echo "You must provide a BACKUP_SAVED_BACKUPS_NUMBER via environment variable" printf "!!! You must provide a BACKUP_SAVED_BACKUPS_NUMBER via environment variable !!!\n" exit 1 +fi + +# convert configurations to array +IFS=' ' read -a CONFIGURATIONS_ARRAY <<< "$BACKUP_CONFIGURATIONS" + +# display the clusters +printf "Backup the clusters:\n" +for i in "${CONFIGURATIONS_ARRAY[@]}" +do + echo " $i" +done + +# deleting backups? +if (( BACKUP_SAVED_BACKUPS_NUMBER >= 1 )); then + printf "Keep the last %d backups for all networks.\n" $BACKUP_SAVED_BACKUPS_NUMBER else - # deleting backups? - if (( BACKUP_SAVED_BACKUPS_NUMBER >= 1 )); then - printf "Keep the last %d backups for all networks.\n" $BACKUP_SAVED_BACKUPS_NUMBER - else - echo "!!! ATTENTION: No backups are deleted !!!" - fi + echo "!!! ATTENTION: No backups are deleted !!!" fi echo "Cancel by ^C. You have 15 seconds" @@ -70,8 +70,6 @@ do printf "In\n '$path'\n remove:\n" while [ `ls -1 | wc -l` -gt $keep ]; do - # TODO: because 'ls' is not always relyable the same on different shells maybe replace 'ls' by 'find . -type d -maxdepth 1'? description: https://unix.stackexchange.com/questions/28939/how-to-delete-the-oldest-directory-in-a-given-directory - # I tested this, but 'find' is crutial to use, because of shell compatibilities oldest=`ls -c1 | sort -n | head -1` printf " %s\n" $oldest rm -rf $oldest From b95b03626571f81cff1560551265fe98cd679f07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Thu, 30 Nov 2023 08:05:45 +0100 Subject: [PATCH 21/35] Change database name from 'graph.db' to 'neo4j' --- deployment/scripts/cluster.backup.sh | 2 +- deployment/src/kubernetes/Backup.md | 2 +- deployment/src/old/volumes/neo4j-offline-backup/README.md | 4 ++-- neo4j/README.md | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/deployment/scripts/cluster.backup.sh b/deployment/scripts/cluster.backup.sh index f3749cd9d..93c29dd92 100755 --- a/deployment/scripts/cluster.backup.sh +++ b/deployment/scripts/cluster.backup.sh @@ -29,7 +29,7 @@ ${SCRIPT_DIR}/cluster.neo4j.sh maintenance on # database backup kubectl --kubeconfig=${KUBECONFIG} -n default exec -it \ $(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-neo4j | awk '{ print $1 }') \ - -- neo4j-admin dump --database=graph.db --to=/var/lib/neo4j/$BACKUP_DATE-neo4j-dump + -- neo4j-admin dump --database=neo4j --to=/var/lib/neo4j/$BACKUP_DATE-neo4j-dump # copy neo4j backup to local drive kubectl --kubeconfig=${KUBECONFIG} cp \ default/$(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-neo4j |awk '{ print $1 }'):/var/lib/neo4j/$BACKUP_DATE-neo4j-dump $BACKUP_FOLDER/neo4j-dump diff --git a/deployment/src/kubernetes/Backup.md b/deployment/src/kubernetes/Backup.md index 34011a512..9f41ee7f4 100644 --- a/deployment/src/kubernetes/Backup.md +++ b/deployment/src/kubernetes/Backup.md @@ -137,7 +137,7 @@ $ kubectl -n default exec -it $(kubectl -n default get pods | grep ocelot-neo4j # bash: enter bash of Neo4j $ kubectl -n default exec -it $(kubectl -n default get pods | grep ocelot-neo4j | awk '{ print $1 }') -- bash # generate Dump -neo4j% neo4j-admin dump --database=graph.db --to=/var/lib/neo4j/$(date +%F)-neo4j-dump +neo4j% neo4j-admin dump --database=neo4j --to=/var/lib/neo4j/$(date +%F)-neo4j-dump # exit bash neo4j% exit diff --git a/deployment/src/old/volumes/neo4j-offline-backup/README.md b/deployment/src/old/volumes/neo4j-offline-backup/README.md index 7c34aa764..2d8a848a3 100644 --- a/deployment/src/old/volumes/neo4j-offline-backup/README.md +++ b/deployment/src/old/volumes/neo4j-offline-backup/README.md @@ -79,8 +79,8 @@ $ kubectl -n ocelot-social get pods $ kubectl cp ./neo4j-backup human-connection/:/root/ $ kubectl -n ocelot-social exec -it bash # Once you're in the pod restore the backup and overwrite the default database -# called `graph.db` with `--force`. -# This will delete all existing data in database `graph.db`! +# called `neo4j` with `--force`. +# This will delete all existing data in database `neo4j`! > neo4j-admin load --from=/root/neo4j-backup --force > exit ``` diff --git a/neo4j/README.md b/neo4j/README.md index dcf5714ea..9b8a460ec 100644 --- a/neo4j/README.md +++ b/neo4j/README.md @@ -68,7 +68,7 @@ To create a dump in Neo4j running in a Docker container: # connect to the Docker containers Neo4j terminal $ docker exec -it neo4j bash # generate Dump -neo4j% neo4j-admin dump --database=graph.db --to=/var/lib/neo4j/$(date +%F)-neo4j-dump +neo4j% neo4j-admin dump --database=neo4j --to=/var/lib/neo4j/$(date +%F)-neo4j-dump # exit bash neo4j% exit # copy the dump out of the running Docker container @@ -88,7 +88,7 @@ $ docker cp /neo4j-dump :/var/lib # connect to the Docker containers Neo4j terminal $ docker exec -it neo4j bash # to load the dump into the database we need the following command in this terminal -neo4j% neo4j-admin load --expand-commands --database=graph.db --from /var/lib/neo4j/$(date +%F)-neo4j-dump --force +neo4j% neo4j-admin load --expand-commands --database=neo4j --from /var/lib/neo4j/$(date +%F)-neo4j-dump --force # leave the terminal by entering neo4j% exit ``` From c240fe32adb9cdff2471bee32dd58357d36c22e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Fri, 1 Dec 2023 14:38:42 +0100 Subject: [PATCH 22/35] Add more detailed logs for the scripts - Ignore 'backup-cron-job.log' files. --- .gitignore | 1 + deployment/scripts/cluster.backup.sh | 3 +++ deployment/scripts/cluster.maintenance.sh | 2 ++ deployment/scripts/cluster.neo4j.sh | 4 ++++ 4 files changed, 10 insertions(+) diff --git a/.gitignore b/.gitignore index 928dae262..a0a08dcaa 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ yarn-error.log* .yarn-integrity .eslintcache kubeconfig.yaml +backup-cron-job.log node_modules/ cypress/videos diff --git a/deployment/scripts/cluster.backup.sh b/deployment/scripts/cluster.backup.sh index 93c29dd92..7da493e4b 100755 --- a/deployment/scripts/cluster.backup.sh +++ b/deployment/scripts/cluster.backup.sh @@ -27,13 +27,16 @@ mkdir -p ${BACKUP_FOLDER} ${SCRIPT_DIR}/cluster.neo4j.sh maintenance on # database backup +echo "Dumping database ..." kubectl --kubeconfig=${KUBECONFIG} -n default exec -it \ $(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-neo4j | awk '{ print $1 }') \ -- neo4j-admin dump --database=neo4j --to=/var/lib/neo4j/$BACKUP_DATE-neo4j-dump # copy neo4j backup to local drive +echo "Coping database ..." kubectl --kubeconfig=${KUBECONFIG} cp \ default/$(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-neo4j |awk '{ print $1 }'):/var/lib/neo4j/$BACKUP_DATE-neo4j-dump $BACKUP_FOLDER/neo4j-dump # copy image data +echo "Coping public uploads ..." kubectl --kubeconfig=${KUBECONFIG} cp \ default/$(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-backend |awk '{ print $1 }'):/app/public/uploads $BACKUP_FOLDER/public-uploads diff --git a/deployment/scripts/cluster.maintenance.sh b/deployment/scripts/cluster.maintenance.sh index b64994e9b..33c52254d 100755 --- a/deployment/scripts/cluster.maintenance.sh +++ b/deployment/scripts/cluster.maintenance.sh @@ -16,9 +16,11 @@ KUBECONFIG=${KUBECONFIG:-${SCRIPT_DIR}/../configurations/${CONFIGURATION}/kubeco case $1 in on) + echo "Network maintenance: on" kubectl --kubeconfig=${KUBECONFIG} patch ingress ingress-ocelot-webapp --type merge --patch-file ${SCRIPT_DIR}/../src/kubernetes/patches/patch.ingress.maintenance.on.yaml ;; off) + echo "Network maintenance: off" kubectl --kubeconfig=${KUBECONFIG} patch ingress ingress-ocelot-webapp --type merge --patch-file ${SCRIPT_DIR}/../src/kubernetes/patches/patch.ingress.maintenance.off.yaml ;; *) diff --git a/deployment/scripts/cluster.neo4j.sh b/deployment/scripts/cluster.neo4j.sh index 41ebe4227..ae539b314 100755 --- a/deployment/scripts/cluster.neo4j.sh +++ b/deployment/scripts/cluster.neo4j.sh @@ -21,20 +21,24 @@ case $1 in ${SCRIPT_DIR}/cluster.maintenance.sh on # set Neo4j in offline mode (maintenance) + echo "Neo4j maintenance: on" kubectl --kubeconfig=${KUBECONFIG} get deployment ocelot-neo4j -o json \ | jq '.spec.template.spec.containers[] += {"command": ["tail", "-f", "/dev/null"]}' \ | kubectl --kubeconfig=${KUBECONFIG} apply -f - # wait for the container to restart + echo "Wait 60s ..." sleep 60 ;; off) # set Neo4j in online mode + echo "Neo4j maintenance: off" kubectl --kubeconfig=${KUBECONFIG} get deployment ocelot-neo4j -o json \ | jq 'del(.spec.template.spec.containers[].command)' \ | kubectl --kubeconfig=${KUBECONFIG} apply -f - # wait for the container to restart + echo "Wait 60s ..." sleep 60 # maintenance mode off From 4351c9e0dba77f7a73949a7ea17d038f34ba53b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Fri, 1 Dec 2023 14:40:26 +0100 Subject: [PATCH 23/35] Refine script readme --- deployment/deployment.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/deployment/deployment.md b/deployment/deployment.md index ebcc2f6ca..88b4f39de 100644 --- a/deployment/deployment.md +++ b/deployment/deployment.md @@ -109,7 +109,7 @@ The backups will be saved into your networks folders `backup` folder in a new fo ⚠️ *Attention: Please check carefully whether really the oldest backups have been deleted. As shells on different systems behave differently with regard to the commands used in this script.* -Install automated backups by a cron job. +Install automated backups by a [cron job](https://en.wikipedia.org/wiki/Cron). Be aware of having the bash shell installed to run the script. The environment variables for the automated backups are described above. @@ -131,3 +131,7 @@ In the editor add the line: ``` This way the terminal output is written into a log file named `backup-cron-job.log` located in the deployment folder. + +Be aware that the server datetime can differ from your local time. +Especially by the change between summer and winter time, because servers usually have UTC. +Find out the actual difference by running the command `date` on your server. From 7d4a75a94c31b00c1af40cd271c3e82b5293341c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Fri, 1 Dec 2023 15:02:25 +0100 Subject: [PATCH 24/35] Refine checking of definition of variables --- deployment/scripts/cluster.backup.sh | 2 +- deployment/scripts/cluster.maintenance.sh | 2 +- deployment/scripts/cluster.neo4j.sh | 2 +- deployment/scripts/clusters.backup-multiple-servers.sh | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/deployment/scripts/cluster.backup.sh b/deployment/scripts/cluster.backup.sh index 7da493e4b..2d3bf156e 100755 --- a/deployment/scripts/cluster.backup.sh +++ b/deployment/scripts/cluster.backup.sh @@ -9,7 +9,7 @@ SCRIPT_PATH=$(realpath $0) SCRIPT_DIR=$(dirname $SCRIPT_PATH) # check CONFIGURATION -if [[ -z ${CONFIGURATION} ]]; then +if [[ -z "$CONFIGURATION" ]] || [[ $CONFIGURATION == "" ]]; then echo "!!! You must provide a CONFIGURATION via environment variable !!!" exit 1 fi diff --git a/deployment/scripts/cluster.maintenance.sh b/deployment/scripts/cluster.maintenance.sh index 33c52254d..780b81bd6 100755 --- a/deployment/scripts/cluster.maintenance.sh +++ b/deployment/scripts/cluster.maintenance.sh @@ -5,7 +5,7 @@ SCRIPT_PATH=$(realpath $0) SCRIPT_DIR=$(dirname $SCRIPT_PATH) # check CONFIGURATION -if [ -z ${CONFIGURATION} ]; then +if [[ -z "$CONFIGURATION" ]] || [[ $CONFIGURATION == "" ]]; then echo "You must provide a `CONFIGURATION` via environment variable" exit 1 fi diff --git a/deployment/scripts/cluster.neo4j.sh b/deployment/scripts/cluster.neo4j.sh index ae539b314..3b284c0b7 100755 --- a/deployment/scripts/cluster.neo4j.sh +++ b/deployment/scripts/cluster.neo4j.sh @@ -5,7 +5,7 @@ SCRIPT_PATH=$(realpath $0) SCRIPT_DIR=$(dirname $SCRIPT_PATH) # check CONFIGURATION -if [ -z ${CONFIGURATION} ]; then +if [[ -z "$CONFIGURATION" ]] || [[ $CONFIGURATION == "" ]]; then echo "You must provide a `CONFIGURATION` via environment variable" exit 1 fi diff --git a/deployment/scripts/clusters.backup-multiple-servers.sh b/deployment/scripts/clusters.backup-multiple-servers.sh index 3dfcb1d79..e81165457 100755 --- a/deployment/scripts/clusters.backup-multiple-servers.sh +++ b/deployment/scripts/clusters.backup-multiple-servers.sh @@ -17,7 +17,7 @@ source ${SCRIPT_DIR}/../.env set +a # check BACKUP_CONFIGURATIONS -if [[ -z ${BACKUP_CONFIGURATIONS} ]]; then +if [[ -z "$BACKUP_CONFIGURATIONS" ]] || [[ $BACKUP_CONFIGURATIONS == "" ]]; then #%! echo "You must provide a BACKUP_CONFIGURATIONS via environment variable" printf "!!! You must provide a BACKUP_CONFIGURATIONS via environment variable !!!\n" exit 1 From 1dc871d3069917d9e4720f093aa320368012aa58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Fri, 1 Dec 2023 15:06:38 +0100 Subject: [PATCH 25/35] Add database name as variable to script --- deployment/scripts/cluster.backup.sh | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/deployment/scripts/cluster.backup.sh b/deployment/scripts/cluster.backup.sh index 2d3bf156e..88fdb7c6d 100755 --- a/deployment/scripts/cluster.backup.sh +++ b/deployment/scripts/cluster.backup.sh @@ -14,6 +14,13 @@ if [[ -z "$CONFIGURATION" ]] || [[ $CONFIGURATION == "" ]]; then exit 1 fi +# check DATABASE_NAME or set default +if [[ -z "$DATABASE_NAME" ]] || [[ $DATABASE_NAME == "" ]]; then + DATABASE_NAME="neo4j" + printf "Set satabase default name.\n" +fi +printf "Database name: '%s'\n" $DATABASE_NAME + # configuration KUBECONFIG=${KUBECONFIG:-${SCRIPT_DIR}/../configurations/${CONFIGURATION}/kubeconfig.yaml} BACKUP_DATE=$(date "+%F_%H-%M-%S") @@ -30,7 +37,7 @@ ${SCRIPT_DIR}/cluster.neo4j.sh maintenance on echo "Dumping database ..." kubectl --kubeconfig=${KUBECONFIG} -n default exec -it \ $(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-neo4j | awk '{ print $1 }') \ - -- neo4j-admin dump --database=neo4j --to=/var/lib/neo4j/$BACKUP_DATE-neo4j-dump + -- neo4j-admin dump --database=$DATABASE_NAME --to=/var/lib/neo4j/$BACKUP_DATE-neo4j-dump # copy neo4j backup to local drive echo "Coping database ..." kubectl --kubeconfig=${KUBECONFIG} cp \ From 64ac68bd01b687ce83dabc6a8390793e21e40cc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 12 Dec 2023 15:43:47 +0100 Subject: [PATCH 26/35] Add 'NEO4J_dbms_default__database' to 'docker-compose.yml' as commented example --- docker-compose.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 78cee69b3..7954e2bab 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -111,10 +111,12 @@ services: # settings reference: https://neo4j.com/docs/operations-manual/4.4/docker/ref-settings/ # TODO: This sounds scary for a production environment - NEO4J_AUTH=none + # - NEO4J_dbms_default__database=graph.db + # - NEO4J_dbms_default__database=neo4j - NEO4J_dbms_security_procedures_unrestricted=algo.*,apoc.* - NEO4J_dbms_allow__format__migration=true - NEO4J_dbms_allow__upgrade=true - # Uncomment following line for Neo4j Enterprise version instead of Community version + # uncomment following line for Neo4j Enterprise version instead of Community version # TODO: clarify if that is the only thing needed to unlock the Enterprise version # - NEO4J_ACCEPT_LICENSE_AGREEMENT=yes # TODO: Remove the playground from production From e4fabc47a0e54b1b65e1b90fc0df5ad951c4d67d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 12 Dec 2023 15:46:24 +0100 Subject: [PATCH 27/35] Add 'Database Management Commands' to Neo4j readme - Fix of some headings and designations. --- neo4j/README.md | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/neo4j/README.md b/neo4j/README.md index 9b8a460ec..d9e510d8f 100644 --- a/neo4j/README.md +++ b/neo4j/README.md @@ -1,4 +1,4 @@ -# Neo4J +# Neo4j 4.4 Human Connection is a social network. Using a graph based database which can model nodes and edges natively - a network - feels like an obvious choice. We @@ -16,8 +16,7 @@ docker-compose up ``` You can access Neo4J through [http://localhost:7474/](http://localhost:7474/) -for an interactive cypher shell and a visualization of the graph. - +for an interactive Cypher shell and a visualization of the graph. ## Installation Without Docker @@ -51,7 +50,7 @@ in `backend/.env`. Start Neo4J and confirm the database is running at [http://localhost:7474](http://localhost:7474). -## Operations on Neo4j +## Operations on Neo4j 4.4 ### Docker or Docker Compose @@ -143,7 +142,7 @@ $ kubectl -n default exec -it $(kubectl -n default get pods | grep ocelot-backen ***Cypher commands to show indexes and constraints*** ```bash -# in browser command line or cypher shell +# in browser command line or Cypher shell # show all indexes and constraints $ :schema @@ -158,7 +157,7 @@ $ CALL db.constraints(); ***Cypher commands to create and drop indexes and constraints*** ```bash -# in browser command line or cypher shell +# in browser command line or Cypher shell # create indexes $ CALL db.index.fulltext.createNodeIndex("post_fulltext_search",["Post"],["title", "content"]); @@ -171,3 +170,21 @@ $ DROP CONSTRAINT ON ( image:Image ) ASSERT image.url IS UNIQUE # drop all indexes and constraints $ CALL apoc.schema.assert({},{},true) YIELD label, key RETURN * ; ``` + +### Database Management Commands + +***Cypher commands to manage databases*** + +```bash +# in browser command line or Cypher shell + +# show the default database +$ SHOW DEFAULT DATABASE +# show all databases +$ SHOW DATABASES +``` + +To set the default database by configuration, use `NEO4J_dbms_default__database` as an environment variable when starting Neo4j 4.4, see [Docker specific configuration settings](). + +If a database with this name does not exist, an empty database with this name is created and all other databases remain. +You can switch back to an existing database without damaging it. From c931c27a106a78952b8f3e7d46c94a3f8e2d27a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 12 Dec 2023 15:52:34 +0100 Subject: [PATCH 28/35] Add description option '--database=' to dumping or loading database --- neo4j/README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/neo4j/README.md b/neo4j/README.md index d9e510d8f..f5be62eb8 100644 --- a/neo4j/README.md +++ b/neo4j/README.md @@ -74,6 +74,8 @@ neo4j% exit $ docker cp :/var/lib/neo4j/neo4j-dump /$(date +%F)-neo4j-dump ``` +If you need a specific database name, add the option `--database=` to the command `neo4j-admin dump`. + ### Import Neo4j Dump To import a dump into Neo4j running in a Docker container: @@ -92,6 +94,8 @@ neo4j% neo4j-admin load --expand-commands --database=neo4j --from /var/lib/neo4j neo4j% exit ``` +If you need a specific database name, add the option `--database=` to the command `neo4j-admin load`. + ## Commands Here we describe some rarely used Cypher commands for Neo4j that are needed from time to time: From af1de3d4a27450cae35f7bc9a3d99213879a9cf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 12 Dec 2023 15:53:54 +0100 Subject: [PATCH 29/35] Revert "Add database name as variable to script" This reverts commit 1dc871d3069917d9e4720f093aa320368012aa58. --- deployment/scripts/cluster.backup.sh | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/deployment/scripts/cluster.backup.sh b/deployment/scripts/cluster.backup.sh index 88fdb7c6d..2d3bf156e 100755 --- a/deployment/scripts/cluster.backup.sh +++ b/deployment/scripts/cluster.backup.sh @@ -14,13 +14,6 @@ if [[ -z "$CONFIGURATION" ]] || [[ $CONFIGURATION == "" ]]; then exit 1 fi -# check DATABASE_NAME or set default -if [[ -z "$DATABASE_NAME" ]] || [[ $DATABASE_NAME == "" ]]; then - DATABASE_NAME="neo4j" - printf "Set satabase default name.\n" -fi -printf "Database name: '%s'\n" $DATABASE_NAME - # configuration KUBECONFIG=${KUBECONFIG:-${SCRIPT_DIR}/../configurations/${CONFIGURATION}/kubeconfig.yaml} BACKUP_DATE=$(date "+%F_%H-%M-%S") @@ -37,7 +30,7 @@ ${SCRIPT_DIR}/cluster.neo4j.sh maintenance on echo "Dumping database ..." kubectl --kubeconfig=${KUBECONFIG} -n default exec -it \ $(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-neo4j | awk '{ print $1 }') \ - -- neo4j-admin dump --database=$DATABASE_NAME --to=/var/lib/neo4j/$BACKUP_DATE-neo4j-dump + -- neo4j-admin dump --database=neo4j --to=/var/lib/neo4j/$BACKUP_DATE-neo4j-dump # copy neo4j backup to local drive echo "Coping database ..." kubectl --kubeconfig=${KUBECONFIG} cp \ From 0b8407ccff5d90ec0cfe7d450ebba683bfe15674 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 12 Dec 2023 16:13:46 +0100 Subject: [PATCH 30/35] Remove '--database=neo4j' and '--expand-commands' from all the database commands --- deployment/scripts/cluster.backup.sh | 2 +- deployment/src/kubernetes/Backup.md | 4 +++- neo4j/README.md | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/deployment/scripts/cluster.backup.sh b/deployment/scripts/cluster.backup.sh index 2d3bf156e..784bb1844 100755 --- a/deployment/scripts/cluster.backup.sh +++ b/deployment/scripts/cluster.backup.sh @@ -30,7 +30,7 @@ ${SCRIPT_DIR}/cluster.neo4j.sh maintenance on echo "Dumping database ..." kubectl --kubeconfig=${KUBECONFIG} -n default exec -it \ $(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-neo4j | awk '{ print $1 }') \ - -- neo4j-admin dump --database=neo4j --to=/var/lib/neo4j/$BACKUP_DATE-neo4j-dump + -- neo4j-admin dump --to=/var/lib/neo4j/$BACKUP_DATE-neo4j-dump # copy neo4j backup to local drive echo "Coping database ..." kubectl --kubeconfig=${KUBECONFIG} cp \ diff --git a/deployment/src/kubernetes/Backup.md b/deployment/src/kubernetes/Backup.md index 9f41ee7f4..bfae50776 100644 --- a/deployment/src/kubernetes/Backup.md +++ b/deployment/src/kubernetes/Backup.md @@ -137,7 +137,7 @@ $ kubectl -n default exec -it $(kubectl -n default get pods | grep ocelot-neo4j # bash: enter bash of Neo4j $ kubectl -n default exec -it $(kubectl -n default get pods | grep ocelot-neo4j | awk '{ print $1 }') -- bash # generate Dump -neo4j% neo4j-admin dump --database=neo4j --to=/var/lib/neo4j/$(date +%F)-neo4j-dump +neo4j% neo4j-admin dump --to=/var/lib/neo4j/$(date +%F)-neo4j-dump # exit bash neo4j% exit @@ -145,6 +145,8 @@ neo4j% exit $ kubectl -n default exec -it $(kubectl -n default get pods | grep ocelot-neo4j | awk '{ print $1 }') -- ls ``` +If you need a specific database name, add the option `--database=` to the command `neo4j-admin dump`. + Lets copy the dump backup ```bash diff --git a/neo4j/README.md b/neo4j/README.md index f5be62eb8..fa2773d6c 100644 --- a/neo4j/README.md +++ b/neo4j/README.md @@ -67,7 +67,7 @@ To create a dump in Neo4j running in a Docker container: # connect to the Docker containers Neo4j terminal $ docker exec -it neo4j bash # generate Dump -neo4j% neo4j-admin dump --database=neo4j --to=/var/lib/neo4j/$(date +%F)-neo4j-dump +neo4j% neo4j-admin dump --to=/var/lib/neo4j/$(date +%F)-neo4j-dump # exit bash neo4j% exit # copy the dump out of the running Docker container @@ -89,7 +89,7 @@ $ docker cp /neo4j-dump :/var/lib # connect to the Docker containers Neo4j terminal $ docker exec -it neo4j bash # to load the dump into the database we need the following command in this terminal -neo4j% neo4j-admin load --expand-commands --database=neo4j --from /var/lib/neo4j/$(date +%F)-neo4j-dump --force +neo4j% neo4j-admin load --from /var/lib/neo4j/$(date +%F)-neo4j-dump --force # leave the terminal by entering neo4j% exit ``` From 9a041c53094dfd483f806935eefb2c1680fed574 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 12 Dec 2023 17:21:06 +0100 Subject: [PATCH 31/35] Add hint to readme's --- deployment/src/kubernetes/Backup.md | 1 + neo4j/README.md | 1 + 2 files changed, 2 insertions(+) diff --git a/deployment/src/kubernetes/Backup.md b/deployment/src/kubernetes/Backup.md index bfae50776..5e4c55ddb 100644 --- a/deployment/src/kubernetes/Backup.md +++ b/deployment/src/kubernetes/Backup.md @@ -146,6 +146,7 @@ $ kubectl -n default exec -it $(kubectl -n default get pods | grep ocelot-neo4j ``` If you need a specific database name, add the option `--database=` to the command `neo4j-admin dump`. +To find out the default database name, see the [Neo4j readme](https://github.com/Ocelot-Social-Community/Ocelot-Social/blob/master/neo4j/README.md). Lets copy the dump backup diff --git a/neo4j/README.md b/neo4j/README.md index fa2773d6c..58370c392 100644 --- a/neo4j/README.md +++ b/neo4j/README.md @@ -95,6 +95,7 @@ neo4j% exit ``` If you need a specific database name, add the option `--database=` to the command `neo4j-admin load`. +To find out the default database name, see below. ## Commands From e0722cc576fd9023dfc0de7af4c5aa296cad0df7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 12 Dec 2023 17:34:04 +0100 Subject: [PATCH 32/35] Log good readable explicit cluster name --- deployment/scripts/cluster.backup.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/deployment/scripts/cluster.backup.sh b/deployment/scripts/cluster.backup.sh index 784bb1844..15a56b194 100755 --- a/deployment/scripts/cluster.backup.sh +++ b/deployment/scripts/cluster.backup.sh @@ -14,6 +14,8 @@ if [[ -z "$CONFIGURATION" ]] || [[ $CONFIGURATION == "" ]]; then exit 1 fi +printf " Cluster: %s\n" $CONFIGURATION + # configuration KUBECONFIG=${KUBECONFIG:-${SCRIPT_DIR}/../configurations/${CONFIGURATION}/kubeconfig.yaml} BACKUP_DATE=$(date "+%F_%H-%M-%S") From 0d4bfaf052ab0b5ce81380e80d2261e1a6c06160 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 12 Dec 2023 17:35:00 +0100 Subject: [PATCH 33/35] Add second empty line before logging in 'clusters.backup-multiple-servers.sh' --- deployment/scripts/clusters.backup-multiple-servers.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployment/scripts/clusters.backup-multiple-servers.sh b/deployment/scripts/clusters.backup-multiple-servers.sh index e81165457..c4c4bb42d 100755 --- a/deployment/scripts/clusters.backup-multiple-servers.sh +++ b/deployment/scripts/clusters.backup-multiple-servers.sh @@ -1,7 +1,7 @@ #!/bin/bash # time stamp -printf "\nMultiple backups started at:\n " +printf "\n\nMultiple backups started at:\n " date # base setup From f4e71a1dbbc647c98e83a028251ef09f7e3b0a31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Wed, 20 Dec 2023 09:39:44 +0100 Subject: [PATCH 34/35] Add 'NEO4J_dbms_default__database' Neo4j setting to 'ConfigMap.yml' and Docker Compose files --- deployment/docker-compose.yml | 3 +++ deployment/src/kubernetes/templates/neo4j/ConfigMap.yml | 3 ++- docker-compose.yml | 5 +++-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/deployment/docker-compose.yml b/deployment/docker-compose.yml index 5236a7025..e66b41f9f 100644 --- a/deployment/docker-compose.yml +++ b/deployment/docker-compose.yml @@ -168,6 +168,9 @@ services: # Uncomment following line for Neo4j Enterprise version instead of Community version # TODO: clarify if that is the only thing needed to unlock the Enterprise version # - NEO4J_ACCEPT_LICENSE_AGREEMENT=yes + # set the name of the database to be used + # - NEO4J_dbms_default__database=graph.db + # - NEO4J_dbms_default__database=neo4j # TODO: Remove the playground from production # bring the database in offline mode to export or load dumps # command: ["tail", "-f", "/dev/null"] diff --git a/deployment/src/kubernetes/templates/neo4j/ConfigMap.yml b/deployment/src/kubernetes/templates/neo4j/ConfigMap.yml index f71f11285..677218c16 100644 --- a/deployment/src/kubernetes/templates/neo4j/ConfigMap.yml +++ b/deployment/src/kubernetes/templates/neo4j/ConfigMap.yml @@ -20,4 +20,5 @@ data: NEO4J_dbms_security_procedures_unrestricted: "{{ .Values.NEO4J.DBMS_SECURITY_PROCEDURES_UNRESTRICTED }}" NEO4J_dbms_allow__format__migration: "true" NEO4J_dbms_allow__upgrade: "true" - NEO4J_apoc_import_file_enabled: "{{ .Values.NEO4J.APOC_IMPORT_FILE_ENABLED }}" \ No newline at end of file + NEO4J_dbms_default__database: "{{ .Values.NEO4J.DBMS_DEFAULT_DATABASE }}" + NEO4J_apoc_import_file_enabled: "{{ .Values.NEO4J.APOC_IMPORT_FILE_ENABLED }}" diff --git a/docker-compose.yml b/docker-compose.yml index 7954e2bab..a2fff7e16 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -111,14 +111,15 @@ services: # settings reference: https://neo4j.com/docs/operations-manual/4.4/docker/ref-settings/ # TODO: This sounds scary for a production environment - NEO4J_AUTH=none - # - NEO4J_dbms_default__database=graph.db - # - NEO4J_dbms_default__database=neo4j - NEO4J_dbms_security_procedures_unrestricted=algo.*,apoc.* - NEO4J_dbms_allow__format__migration=true - NEO4J_dbms_allow__upgrade=true # uncomment following line for Neo4j Enterprise version instead of Community version # TODO: clarify if that is the only thing needed to unlock the Enterprise version # - NEO4J_ACCEPT_LICENSE_AGREEMENT=yes + # set the name of the database to be used + # - NEO4J_dbms_default__database=graph.db + # - NEO4J_dbms_default__database=neo4j # TODO: Remove the playground from production # bring the database in offline mode to export or load dumps # command: ["tail", "-f", "/dev/null"] From b4ca141ab76feade8f9fc0eeaed2f91a3eda2029 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Wed, 20 Dec 2023 12:15:53 +0100 Subject: [PATCH 35/35] Simplify conditions for checking existence of environment variables after Ulf G. suggestion Co-Authored-By: Ulf Gebhardt --- deployment/scripts/cluster.backup.sh | 6 +++--- deployment/scripts/cluster.maintenance.sh | 2 +- deployment/scripts/cluster.neo4j.sh | 2 +- deployment/scripts/clusters.backup-multiple-servers.sh | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/deployment/scripts/cluster.backup.sh b/deployment/scripts/cluster.backup.sh index 15a56b194..82cd85498 100755 --- a/deployment/scripts/cluster.backup.sh +++ b/deployment/scripts/cluster.backup.sh @@ -9,7 +9,7 @@ SCRIPT_PATH=$(realpath $0) SCRIPT_DIR=$(dirname $SCRIPT_PATH) # check CONFIGURATION -if [[ -z "$CONFIGURATION" ]] || [[ $CONFIGURATION == "" ]]; then +if [[ -z "$CONFIGURATION" ]]; then echo "!!! You must provide a CONFIGURATION via environment variable !!!" exit 1 fi @@ -34,11 +34,11 @@ kubectl --kubeconfig=${KUBECONFIG} -n default exec -it \ $(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-neo4j | awk '{ print $1 }') \ -- neo4j-admin dump --to=/var/lib/neo4j/$BACKUP_DATE-neo4j-dump # copy neo4j backup to local drive -echo "Coping database ..." +echo "Copying database to local file system ..." kubectl --kubeconfig=${KUBECONFIG} cp \ default/$(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-neo4j |awk '{ print $1 }'):/var/lib/neo4j/$BACKUP_DATE-neo4j-dump $BACKUP_FOLDER/neo4j-dump # copy image data -echo "Coping public uploads ..." +echo "Copying public uploads to local file system ..." kubectl --kubeconfig=${KUBECONFIG} cp \ default/$(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-backend |awk '{ print $1 }'):/app/public/uploads $BACKUP_FOLDER/public-uploads diff --git a/deployment/scripts/cluster.maintenance.sh b/deployment/scripts/cluster.maintenance.sh index 780b81bd6..7454c5a3c 100755 --- a/deployment/scripts/cluster.maintenance.sh +++ b/deployment/scripts/cluster.maintenance.sh @@ -5,7 +5,7 @@ SCRIPT_PATH=$(realpath $0) SCRIPT_DIR=$(dirname $SCRIPT_PATH) # check CONFIGURATION -if [[ -z "$CONFIGURATION" ]] || [[ $CONFIGURATION == "" ]]; then +if [[ -z "$CONFIGURATION" ]]; then echo "You must provide a `CONFIGURATION` via environment variable" exit 1 fi diff --git a/deployment/scripts/cluster.neo4j.sh b/deployment/scripts/cluster.neo4j.sh index 3b284c0b7..b16dd78ac 100755 --- a/deployment/scripts/cluster.neo4j.sh +++ b/deployment/scripts/cluster.neo4j.sh @@ -5,7 +5,7 @@ SCRIPT_PATH=$(realpath $0) SCRIPT_DIR=$(dirname $SCRIPT_PATH) # check CONFIGURATION -if [[ -z "$CONFIGURATION" ]] || [[ $CONFIGURATION == "" ]]; then +if [[ -z "$CONFIGURATION" ]]; then echo "You must provide a `CONFIGURATION` via environment variable" exit 1 fi diff --git a/deployment/scripts/clusters.backup-multiple-servers.sh b/deployment/scripts/clusters.backup-multiple-servers.sh index c4c4bb42d..dfab6b139 100755 --- a/deployment/scripts/clusters.backup-multiple-servers.sh +++ b/deployment/scripts/clusters.backup-multiple-servers.sh @@ -17,7 +17,7 @@ source ${SCRIPT_DIR}/../.env set +a # check BACKUP_CONFIGURATIONS -if [[ -z "$BACKUP_CONFIGURATIONS" ]] || [[ $BACKUP_CONFIGURATIONS == "" ]]; then +if [[ -z "$BACKUP_CONFIGURATIONS" ]]; then #%! echo "You must provide a BACKUP_CONFIGURATIONS via environment variable" printf "!!! You must provide a BACKUP_CONFIGURATIONS via environment variable !!!\n" exit 1