From b2dea02d320689dd7a8b9db5ad5e6c4ac1b42ea4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Coste?= <jerome.coste@etu.utc.fr>
Date: Sun, 19 Nov 2017 19:03:14 +0100
Subject: [PATCH] pica-backup: Modify mysql-run.sh and postgre-run.sh so that
 multiple instances of the scripts can be run at the same time with different
 parameters

---
 pica-backup/Dockerfile      | 13 ++++++-------
 pica-backup/mysql-run.sh    | 33 ++++++++++++++++++---------------
 pica-backup/postgres-run.sh | 33 +++++++++++++++++++--------------
 pica-backup/run.sh          | 27 +++++++++++++++++++++------
 4 files changed, 64 insertions(+), 42 deletions(-)

diff --git a/pica-backup/Dockerfile b/pica-backup/Dockerfile
index 14ded587..8c28f410 100644
--- a/pica-backup/Dockerfile
+++ b/pica-backup/Dockerfile
@@ -1,5 +1,4 @@
-FROM debian:latest
-MAINTAINER antoine@barbare.me
+FROM registry.picasoft.net:5000/pica-debian
 
 RUN apt-get update && \
     apt-get install -y --no-install-recommends \
@@ -9,12 +8,12 @@ RUN apt-get update && \
     apt-get clean \
     mkdir /scripts/{mysql,postgresql}
 
-ENV CRON_TIME="0 0 * * *" \
-    MYSQL_DB="--all-databases"
-
 COPY mysql-run.sh /scripts/mysql/mysql-run.sh
-COPY postgres-run.sh /scripts/postgresql/postgres-backup.sh
+COPY postgres-run.sh /scripts/postgresql/postgres-run.sh
+COPY run.sh /scripts
+
+ENV CRON_TIME="0 0 * * *"
 
 VOLUME ["/backup"]
 
-CMD ["/bin/bash"]
+CMD ["/scripts/run.sh"]
diff --git a/pica-backup/mysql-run.sh b/pica-backup/mysql-run.sh
index 76a7d35b..29fbaf7c 100755
--- a/pica-backup/mysql-run.sh
+++ b/pica-backup/mysql-run.sh
@@ -20,9 +20,11 @@ MYSQL_PASS=${MYSQL_PASS:-${MYSQL_ENV_MYSQL_PASS}}
 
 BACKUP_CMD="mysqldump -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASS} ${EXTRA_OPTS} ${MYSQL_DB} > $BACKUP_FOLDER"'${BACKUP_NAME}'
 
+backup_script_name="${MYSQL_SERVICE_NAME}-backup.sh"
 echo "=> Creating backup script"
-rm -f /backup.sh
-cat <<EOF >> /backup.sh
+rm -f "/$backup_script_name"
+
+cat <<EOF >> "/$backup_script_name"
 #!/bin/bash
 MAX_BACKUPS=${MAX_BACKUPS}
 
@@ -33,7 +35,7 @@ if ${BACKUP_CMD} ;then
     echo "   Backup succeeded"
 else
     echo "   Backup failed"
-    rm -rf $BACKUP_FOLDER\${BACKUP_NAME}
+    rm -rf ${BACKUP_FOLDER}\${BACKUP_NAME}
 fi
 
 if [ -n "\${MAX_BACKUPS}" ]; then
@@ -41,16 +43,18 @@ if [ -n "\${MAX_BACKUPS}" ]; then
     do
         BACKUP_TO_BE_DELETED=\$(ls $BACKUP_FOLDER -N1 | sort | head -n 1)
         echo "   Backup \${BACKUP_TO_BE_DELETED} is deleted"
-        rm -rf $BACKUP_FOLDER\${BACKUP_TO_BE_DELETED}
+        rm -rf ${BACKUP_FOLDER}\${BACKUP_TO_BE_DELETED}
     done
 fi
 echo "=> Backup done"
 EOF
-chmod +x /backup.sh
+chmod +x /$backup_script_name
 
+restore_script_name="${MYSQL_SERVICE_NAME}-restore.sh"
+backup_log="${MYSQL_SERVICE_NAME}_mysql_backup.log"
 echo "=> Creating restore script"
-rm -f /restore.sh
-cat <<EOF >> /restore.sh
+rm -f /$restore_script_name
+cat <<EOF >> /$restore_script_name
 #!/bin/bash
 echo "=> Restore database from \$1"
 if mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASS} < \$1 ;then
@@ -60,25 +64,24 @@ else
 fi
 echo "=> Done"
 EOF
-chmod +x /restore.sh
+chmod +x /$restore_script_name
 
-touch /mysql_backup.log
-tail -F /mysql_backup.log &
+touch /$backup_log
+tail -F /$backup_log &
 
 if [ -n "${INIT_BACKUP}" ]; then
     echo "=> Create a backup on the startup"
-    /backup.sh
+    /${backup_script_name}
 elif [ -n "${INIT_RESTORE_LATEST}" ]; then
-    echo "=> Restore lates backup"
+    echo "=> Restore latest backup"
     until nc -z $MYSQL_HOST $MYSQL_PORT
     do
         echo "waiting database container..."
         sleep 1
     done
-    ls -d -1 $BACKUP_FOLDER* | tail -1 | xargs /restore.sh
+    ls -d -1 $BACKUP_FOLDER* | tail -1 | xargs /$restore_script_name
 fi
 
-echo "${CRON_TIME} /backup.sh >> /mysql_backup.log 2>&1" > /crontab.conf
+echo "${CRON_TIME} /$backup_script_name >> /$backup_log 2>&1" >> /crontab.conf
 crontab  /crontab.conf
 echo "=> Running cron job"
-exec cron -f
diff --git a/pica-backup/postgres-run.sh b/pica-backup/postgres-run.sh
index 96852e3e..e49692ef 100755
--- a/pica-backup/postgres-run.sh
+++ b/pica-backup/postgres-run.sh
@@ -10,9 +10,11 @@ BACKUP_FOLDER=${BACKUP_FOLDER:-"/backup/"}
 
 BACKUP_CMD="pg_dump -w -c > $BACKUP_FOLDER"'${BACKUP_NAME}'
 
+backup_script_name="${POSTGRES_SERVICE_NAME}"
 echo "=> Creating backup script"
-rm -f /backup.sh
-cat <<EOF >> /backup.sh
+rm -f "/$backup_script_name"
+
+cat <<EOF >> "/$backup_script_name"
 #!/bin/bash
 MAX_BACKUPS=${MAX_BACKUPS}
 export PGHOST=$POSTGRES_HOST
@@ -36,16 +38,19 @@ if [ -n "\${MAX_BACKUPS}" ]; then
     do
         BACKUP_TO_BE_DELETED=\$(ls $BACKUP_FOLDER -N1 | sort | head -n 1)
         echo "   Backup \${BACKUP_TO_BE_DELETED} is deleted"
-        rm -rf $BACKUP_FOLDER\${BACKUP_TO_BE_DELETED}
+        rm -rf ${BACKUP_FOLDER}\${BACKUP_TO_BE_DELETED}
     done
 fi
 echo "=> Backup done"
 EOF
-chmod +x /backup.sh
+chmod +x /$backup_script_name
 
+restore_script_name="${POSTGRES_SERVICE_NAME}-restore.sh"
+backup_log="${POSTGRES_SERVICE_NAME}_postgres_backup.log"
 echo "=> Creating restore script"
-rm -f /restore.sh
-cat <<EOF >> /restore.sh
+rm -f "/$restore_script_name"
+
+cat <<EOF >> /$restore_script_name
 #!/bin/bash
 export PGHOST=$POSTGRES_HOST
 export PGPORT=$POSTGRES_PORT
@@ -61,25 +66,25 @@ else
 fi
 echo "=> Done"
 EOF
-chmod +x /restore.sh
+chmod +x /$restore_script_name
 
-touch /postgres_backup.log
-tail -F /postgres_backup.log &
+touch /$backup_log
+tail -F /$backup_log &
 
 if [ -n "${INIT_BACKUP}" ]; then
     echo "=> Create a backup on the startup"
-    /backup.sh
+    /$backup_script_name
 elif [ -n "${INIT_RESTORE_LATEST}" ]; then
-    echo "=> Restore lates backup"
+    echo "=> Restore latest backup"
     until nc -z $POSTGRES_HOST $POSTGRES_PORT
     do
         echo "waiting database container..."
         sleep 1
     done
-    ls -d -1 $BACKUP_FOLDER* | tail -1 | xargs /restore.sh
+    ls -d -1 $BACKUP_FOLDER* | tail -1 | xargs /$restore_script_name
 fi
 
-echo "${CRON_TIME} /backup.sh >> /postgres_backup.log 2>&1" > /crontab.conf
+echo "${CRON_TIME} /$backup_script_name >> /$backup_log 2>&1" >> /crontab.conf
 crontab  /crontab.conf
 echo "=> Running cron job"
-exec cron -f
+
diff --git a/pica-backup/run.sh b/pica-backup/run.sh
index 6892549b..4b1e7e7b 100755
--- a/pica-backup/run.sh
+++ b/pica-backup/run.sh
@@ -2,17 +2,18 @@
 
 # DB_TYPE : MYSQL|POSTGRES
 
-# MYSQL			POSTGRESQL
-#
+# MYSQL				POSTGRESQL
+# MYSQL_SERVICE_NAME_LIST	POSTGRES_SERVICE_NAME_LIST
 # MYSQL_HOST_LIST		POSTGRES_HOST_LIST
 # MYSQL_PORT_LIST		POSTGRES_PORT_LIST
 # MYSQL_USER_LIST		POSTGRES_USER_LIST
 # MYSQL_PASS_LIST		POSTGRES_PASS_LIST
-#				POSTGRES_DB_LIST
+# MYSQL_DB_LIST			POSTGRES_DB_LIST
 # MYSQL_MAX_BACKUP_LIST		POSTGRES_MAX_BACKUP_LIST
 # MYSQL_INIT_BACKUP_LIST	POSTGRES_INIT_BACKUP_LIST
 # MYSQL_CRON_TIME_LIST		POSTGRES_CRON_TIME_LIST
 # MYSQL_EXTRA_OPTS_LIST		POSTGRES_EXTRA_OPTS-LIST
+# MYSQL_BACKUP_FOLDER_LIST	POSTGRESQL_BACKUP_FOLDER_LIST
 
 #####################
 # Create the arrays #
@@ -21,23 +22,29 @@
 IFS=,
 #MYSQL
 read -a MYSQL_HOST_ARRAY <<< "$MYSQL_HOST_LIST"
+read -a MYSQL_SERVICE_NAME_ARRAY <<< "$MYSQL_SERVICE_NAME_LIST"
 read -a MYSQL_PORT_ARRAY <<< "$MYSQL_PORT_LIST"
 read -a MYSQL_USER_ARRAY <<< "$MYSQL_USER_LIST"
 read -a MYSQL_PASS_ARRAY <<< "$MYSQL_PASS_LIST"
+read -a MYSQL_DB_ARRAY <<< "$MYSQL_DB_LIST"
 read -a MYSQL_MAX_BACKUPS_ARRAY <<< "$MYSQL_MAX_BACKUPS_LIST"
 read -a MYSQL_INIT_BACKUP_ARRAY <<< "$MYSQL_INIT_BACKUP_LIST"
 read -a MYSQL_CRON_TIME_ARRAY <<< "$MYSQL_CRON_TIME_LIST"
 read -a MYSQL_EXTRA_OPTS_ARRAY <<< "$MYSQL_EXTRA_OPTS_LIST"
+read -a MYSQL_BACKUP_FOLDER_ARRAY <<< "$MYSQL_BACKUP_FOLDER_LIST"
 
 #POSTGRES
 read -a POSTGRES_HOST_ARRAY <<< "$POSTGRES_HOST_LIST"
+read -a POSTGRES_SERVICE_NAME_ARRAY <<< "$POSTGRES_SERVICE_NAME_LIST"
 read -a POSTGRES_PORT_ARRAY <<< "$POSTGRES_PORT_LIST"
-read -a POSTGRES_USER_ARRAY <<< "$POSTGRES_PASS_LIST"
+read -a POSTGRES_USER_ARRAY <<< "$POSTGRES_USER_LIST"
+read -a POSTGRES_PASS_ARRAY <<< "$POSTGRES_PASS_LIST"
 read -a POSTGRES_DB_ARRAY <<< "$POSTGRES_DB_LIST"
 read -a POSTGRES_MAX_BACKUPS_ARRAY <<< "$POSTGRES_MAX_BACKUPS_LIST"
 read -a POSTGRES_INIT_BACKUP_ARRAY <<< "$POSTGRES_INIT_BACKUP_LIST"
 read -a POSTGRES_CRON_TIME_ARRAY <<< "$POSTGRES_CRON_TIME_LIST"
 read -a POSTGRES_EXTRA_OPTS_ARRAY <<< "$POSTGRES_EXTRA_OPTS_LIST"
+read -a POSTGRES_BACKUP_FOLDER_ARRAY <<< "$POSTGRES_BACKUP_FOLDER_LIST"
 
 ###########################
 # Call the backup scripts #
@@ -50,15 +57,18 @@ NB_CALLS=${#MYSQL_HOST_ARRAY[@]}
 
 for (( i=0; i < $NB_CALLS; i++ ))
 do
+	MYSQL_SERVICE_NAME=${MYSQL_SERVICE_NAME_ARRAY[i]} \
 	MYSQL_HOST=${MYSQL_HOST_ARRAY[i]} \
 	MYSQL_PORT=${MYSQL_PORT_ARRAY[i]} \
 	MYSQL_USER=${MYSQL_USER_ARRAY[i]} \
 	MYSQL_PASS=${MYSQL_PASS_ARRAY[i]} \
+	MYSQL_DB=${MYSQL_DB_ARRAY[i]} \
 	MAX_BACKUPS=${MYSQL_MAX_BACKUPS_ARRAY[i]} \
 	INIT_BACKUP=${MYSQL_INIT_BACKUP_ARRAY[i]} \
 	CRON_TIME=${MYSQL_CRON_TIME_ARRAY[i]} \
 	EXTRA_OPTS=${MYSQL_EXTRA_OPTS_ARRAY[i]} \
-	/script/mysql/mysql-run.sh
+	BACKUP_FOLDER="/backup/${MYSQL_BACKUP_FOLDER_ARRAY[i]}/" \
+	/scripts/mysql/mysql-run.sh
 done
 
 #Execute PostgreSQL backups
@@ -66,13 +76,18 @@ NB_CALLS=${#POSTGRES_HOST_ARRAY[@]}
 
 for (( i=0; i < $NB_CALLS; i++ ))
 do
+	POSTGRES_SERVICE_NAME=${POSTGRES_SERVICE_NAME_ARRAY[i]} \
 	POSTGRES_HOST=${POSTGRES_HOST_ARRAY[i]} \
 	POSTGRES_PORT=${POSTGRES_PORT_ARRAY[i]} \
 	POSTGRES_USER=${POSTGRES_USER_ARRAY[i]} \
 	POSTGRES_PASS=${POSTGRES_PASS_ARRAY[i]} \
+	POSTGRES_DB=${POSTGRES_DB_ARRAY[i]} \
 	MAX_BACKUPS=${POSTGRES_MAX_BACKUP_ARRAY[i]} \
 	INIT_BACKUP=${POSTGRES_INIT_BACKUP_ARRAY[i]} \
 	CRON_TIME=${POSTGRES_CRON_TIME_ARRAY[i]} \
 	EXTRA_OPTS=${POSTGRES_EXTRA_OPTS_ARRAY[i]} \
-	/script/postgresql/postgres-run.sh
+	BACKUP_FOLDER="/backup/${POSTGRES_BACKUP_FOLDER_ARRAY[i]}/" \
+	/scripts/postgresql/postgres-run.sh
 done
+
+exec cron -f
-- 
GitLab