102 lines
3.4 KiB
Bash
Executable File
102 lines
3.4 KiB
Bash
Executable File
#!/bin/bash
|
|
export PATH=/4PROJECTS/bin:$PATH
|
|
if [ ! -n "$2" ]; then
|
|
echo "Missing Parameters <UUID> <FILE>"
|
|
exit 0
|
|
fi
|
|
|
|
UUID=$1
|
|
echo "UUID: $UUID"
|
|
|
|
source /4server/sbin/helpers
|
|
|
|
get_contract_info
|
|
|
|
|
|
#export ODOO_DB_PASSWORD=$(echo "$SECRET" | jq -r '.psql')
|
|
|
|
echo "PASSWORD $ODOO_DB_PASSWORD"
|
|
|
|
echo "Restoring $FILENAME to $UUID"
|
|
echo "status of container"
|
|
doas docker ps -a --filter "id=$UUID"
|
|
echo "POSTGRES HOST: $POSTGRES_HOST"
|
|
BACKUP="/mnt/backup/$2"
|
|
TEMPLATE="/mnt/db_images/$2"
|
|
doas docker exec "$UUID" /bin/bash -c "[ -f $TEMPLATE ]"
|
|
|
|
if doas docker exec "$UUID" /bin/bash -c "[ -f $BACKUP ]"; then
|
|
FILENAME="$BACKUP"
|
|
elif doas docker exec "$UUID" /bin/bash -c "[ -f $TEMPLATE ]"; then
|
|
FILENAME="$TEMPLATE"
|
|
else
|
|
echo "File not exists"
|
|
exit 0
|
|
fi
|
|
|
|
|
|
source /4server/sbin/ODOO_19/ODOO_19.lib
|
|
|
|
# Abort BEFORE touching anything if Postgres is not reachable
|
|
if ! wait_for_postgres; then
|
|
echo "ERROR: cannot connect to Postgres at $POSTGRES_HOST:$POSTGRES_PORT - restore aborted, nothing was changed"
|
|
exit 1
|
|
fi
|
|
|
|
### DELETE AND CREATE DATABASE
|
|
PGPASSWORD="$POSTGRES_ADMIN_PASSWORD" psql -h "$POSTGRES_HOST" -U "$POSTGRES_ADMIN_USER" -d postgres -c "
|
|
SELECT pg_terminate_backend(pid) FROM pg_stat_activity
|
|
WHERE datname = '$UUID' AND pid <> pg_backend_pid();
|
|
"
|
|
PGPASSWORD="$POSTGRES_ADMIN_PASSWORD" psql -h "$POSTGRES_HOST" -U "$POSTGRES_ADMIN_USER" -d postgres -c "
|
|
DROP DATABASE IF EXISTS \"$UUID\";
|
|
"
|
|
|
|
PGPASSWORD="$POSTGRES_ADMIN_PASSWORD" psql \
|
|
-h "$POSTGRES_HOST" -U "$POSTGRES_ADMIN_USER" -p "$POSTGRES_PORT" -d postgres \
|
|
-c "ALTER ROLE \"$UUID\" CREATEDB;"
|
|
|
|
|
|
# Move the old filestore aside instead of deleting it; it is only removed after a successful load
|
|
OLD_FS="/home/odoo/.local/share/Odoo/.filestore.pre-restore"
|
|
doas docker exec "$UUID" rm -rf "$OLD_FS"
|
|
doas docker exec "$UUID" sh -c "[ -d /home/odoo/.local/share/Odoo/filestore ] && mv /home/odoo/.local/share/Odoo/filestore $OLD_FS; true"
|
|
doas docker exec "$UUID" rm -rf /root/.local/share/Odoo/filestore
|
|
|
|
if ! doas docker exec "$UUID" odoo db --db_host beedb -w "$ODOO_DB_PASSWORD" -r "$UUID" load "$UUID" $FILENAME -f; then
|
|
echo "ERROR: odoo db load failed - putting the old filestore back"
|
|
|
|
|
|
# Restrict database access to its UUID owner
|
|
PGPASSWORD="$POSTGRES_ADMIN_PASSWORD" psql \
|
|
-h "$POSTGRES_HOST" -U "$POSTGRES_ADMIN_USER" \
|
|
-p "$POSTGRES_PORT" -d postgres \
|
|
-v ON_ERROR_STOP=1 \
|
|
-c "REVOKE CONNECT, TEMPORARY ON DATABASE \"$UUID\" FROM PUBLIC;
|
|
GRANT CONNECT ON DATABASE \"$UUID\" TO \"$UUID\";
|
|
ALTER DATABASE \"$UUID\" OWNER TO \"$UUID\";
|
|
ALTER ROLE \"$UUID\" NOCREATEDB;"
|
|
|
|
|
|
|
|
doas docker exec "$UUID" sh -c "[ -d $OLD_FS ] && rm -rf /home/odoo/.local/share/Odoo/filestore && mv $OLD_FS /home/odoo/.local/share/Odoo/filestore; true"
|
|
PGPASSWORD="$POSTGRES_ADMIN_PASSWORD" psql \
|
|
-h "$POSTGRES_HOST" -U "$POSTGRES_ADMIN_USER" -p "$POSTGRES_PORT" -d postgres \
|
|
-c "ALTER ROLE \"$UUID\" NOCREATEDB;"
|
|
exit 1
|
|
fi
|
|
doas docker exec "$UUID" rm -rf "$OLD_FS"
|
|
|
|
PGPASSWORD="$POSTGRES_ADMIN_PASSWORD" psql \
|
|
-h "$POSTGRES_HOST" -U "$POSTGRES_ADMIN_USER" -p "$POSTGRES_PORT" -d postgres \
|
|
-c "ALTER ROLE \"$UUID\" NOCREATEDB;"
|
|
|
|
|
|
doas docker exec "$UUID" cp -r /root/.local/share/Odoo/filestore /home/odoo/.local/share/Odoo/filestore
|
|
doas docker exec "$UUID" chown -R odoo:odoo /home/odoo/.local
|
|
|
|
doas docker exec "$UUID" mkdir -p /var/lib/odoo/.local/share/Odoo/
|
|
doas docker exec "$UUID" ln -s /home/odoo/.local/share/Odoo/filestore /var/lib/odoo/.local/share/Odoo/filestore
|
|
|
|
docker restart "$UUID"
|