#!/bin/bash -e

STORAGE_DIR=${STORAGE_DIR} #:-"storage"}
PERSISTENT_DIRS=${PERSISTENT_DIRS} #:-"opt var/log"}

if [ -z "$STORAGE_DIR" -o -z "$PERSISTENT_DIRS" ]; then
    echo "делает симлинки директорий из docker/porto образа в persistent storage"
    echo "при первом запуске копирует содержимое docker-директорий в storage"
    echo "в platform нужно задать переменные окружения STORAGE_DIR и PERSISTENT_DIRS"
    echo "Usage: STORAGE_DIR=storage PERSISTENT_DIRS='opt var/log' $0"
    exit 0
fi

# предупреждаем частые ошибки, когда забыли подключить /storage вообще, и поняли, только когда место в / кончилось
if ! df --output=target "/$STORAGE_DIR" | tail -n1 | grep -q "/$STORAGE_DIR"; then
    echo "$STORAGE_DIR is mounted on $(df --output=target "/$STORAGE_DIR" | tail -n1), not /$STORAGE_DIR"
    exit 1
fi

for dir in $PERSISTENT_DIRS; do
    echo "prepare $dir ..."
    if ! [ -L "/$dir" ]; then
        # все директории должны быть созданны с нужными правами на стадии сборки контейнера, ничего додумывать не пытаемся
        if ! [ -d "/$dir" ]; then
            echo "No such directory /$dir"
            exit 1
        fi

        if ! [ -d "/$STORAGE_DIR/$dir" ]; then
            echo "sync /$dir to /$STORAGE_DIR"
            rsync -aR "/./$dir" "/$STORAGE_DIR"
        fi

        echo "remove container /$dir"
        rm -rf "/$dir"

        echo "link /$dir to /$STORAGE_DIR/$dir"
        ln -sv "/$STORAGE_DIR/$dir" "/$dir"
    fi
done
