#!/bin/sh

for i in "$@"
do
case $i in
    --scope=*)
    SCOPE="${i#*=}"
    shift # past argument=value
    ;;
    --hostip=*)
    HOSTIP="${i#*=}"
    shift # past argument=value
    ;;
    --force)
    FORCE="y"
    shift # past argument=value
    ;;
    *)
       # unknown option
    ;;
esac
done

if [ -z "$SCOPE" ]; then
    echo "Required option --scope missing"
    exit 1
fi

# support both '-' and '/' as separator
if [ $(echo $SCOPE | grep -- -) ]
then
    VERSION=$(echo $SCOPE | sed -e 's/-.*//')
    CLUSTER=$(echo $SCOPE | sed -e 's/.*-//')
else
    VERSION=$(echo $SCOPE | sed -e 's/\/.*//')
    CLUSTER=$(echo $SCOPE | sed -e 's/.*\///')
fi

# check DCS configuration
if [ ! -f /etc/patroni/dcs.yml ]; then
    echo "DCS not configured yet, edit /etc/patroni/dcs.yml"
    exit 1
fi
grep -v "^#" /etc/patroni/dcs.yml | grep -v "^$" > /dev/null 2>&1
if [ $? != 0 ]; then
    echo "DCS not configured yet, edit /etc/patroni/dcs.yml"
    exit 1
fi

CONFIG_FILE=/etc/patroni/${VERSION}-${CLUSTER}.yml

if [ -f $CONFIG_FILE -a -z "$FORCE" ]; then
    echo "Patroni configuration file already exists"
    exit 1
else
    rm -f $CONFIG_FILE
    touch $CONFIG_FILE
fi

HOSTNAME=$(hostname)

# set default ipv4 address in case it was not provided
if [ -z "$HOSTIP" ]; then
    HOSTIP=$(ip -4 route get 8.8.8.8 | grep ^8.8.8.8 | sed s/.*src.//)
fi

echo "scope: \"$VERSION-$CLUSTER\"" >> $CONFIG_FILE
echo "namespace: \"/postgresql-common/\"" >> $CONFIG_FILE
echo "name: \"$HOSTNAME\"" >> $CONFIG_FILE
echo "" >> $CONFIG_FILE

# add DCS configuration
cat /etc/patroni/dcs.yml >> $CONFIG_FILE
echo "" >> $CONFIG_FILE

# add remaining patroni configuration from template
cat /etc/patroni/config.yml.in |	\
    sed -e s/@VERSION@/${VERSION}/g	\
        -e s/@CLUSTER@/${CLUSTER}/g	\
        -e s/@HOSTIP@/${HOSTIP}/g	\
>> $CONFIG_FILE
