2018-11-05 08:49:40 +01:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
for i in "$@"
|
|
|
|
do
|
|
|
|
case $i in
|
|
|
|
--hostip=*)
|
|
|
|
HOSTIP="${i#*=}"
|
|
|
|
shift # past argument=value
|
|
|
|
;;
|
2019-01-21 17:08:28 +01:00
|
|
|
--network=*)
|
|
|
|
NETWORK="${i#*=}"
|
|
|
|
shift # past argument=value
|
|
|
|
;;
|
2019-01-15 16:41:13 +01:00
|
|
|
--port=*)
|
|
|
|
PORT="${i#*=}"
|
|
|
|
shift # past argument=value
|
|
|
|
;;
|
2018-11-05 08:49:40 +01:00
|
|
|
--force)
|
|
|
|
FORCE="y"
|
|
|
|
shift # past argument=value
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
# unknown option
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
2019-02-07 17:58:52 +01:00
|
|
|
if [ -z "$2" ];
|
|
|
|
then
|
|
|
|
echo "Usage: pg_creatconfig_patroni [options] <version> <cluster name>"
|
|
|
|
exit 1
|
|
|
|
else
|
|
|
|
VERSION=$1
|
|
|
|
echo $VERSION | egrep -q '^[[:digit:]]+\.?[[:digit:]]+$'
|
|
|
|
if [ $? -ne 0 ]; then
|
|
|
|
echo "Error: invalid version ${VERSION}"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
if [ ! -f /usr/lib/postgresql/${VERSION}/bin/initdb ]; then
|
|
|
|
echo "Error: no initdb program for version ${VERSION} found"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ -z "$2" ];
|
|
|
|
then
|
|
|
|
echo "Usage: pg_creatconfig_patroni [options] <version> <cluster name>"
|
2018-11-05 08:49:40 +01:00
|
|
|
exit 1
|
2019-02-07 17:58:52 +01:00
|
|
|
else
|
|
|
|
CLUSTER=$2
|
2018-11-05 08:49:40 +01:00
|
|
|
fi
|
|
|
|
|
2019-01-15 16:41:13 +01:00
|
|
|
if [ -z "$PORT" ]; then
|
|
|
|
# try to guess next free port
|
|
|
|
PORT=$(($(pg_lsclusters | awk '{print $3}' | grep -v Port | sort -n | tail -1) + 1))
|
2019-01-15 18:09:30 +01:00
|
|
|
if [ "$PORT" -eq 1 ]; then
|
|
|
|
# No cluster exists yet, use default port
|
|
|
|
PORT=5432
|
|
|
|
fi
|
2019-01-15 16:41:13 +01:00
|
|
|
else
|
|
|
|
# validate specified port
|
2019-01-15 16:58:06 +01:00
|
|
|
pg_lsclusters | awk '{print $3}' | grep -q $PORT && echo "Port $PORT already in use" && exit 1
|
2019-01-15 16:41:13 +01:00
|
|
|
fi
|
|
|
|
|
2019-02-04 14:52:12 +01:00
|
|
|
# determine API port (default is 8008) by incrementing for each additional
|
|
|
|
# Postgres port. 2576 is 8008 - 5432.
|
|
|
|
API_PORT=$((2576+$PORT))
|
|
|
|
|
2018-11-05 08:49:40 +01:00
|
|
|
# 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
|
2019-05-21 22:14:34 +02:00
|
|
|
DCS_CONFIG="$(egrep -v '^[[:space:]]*$|^ *#' /etc/patroni/dcs.yml | sed -e ':a;N;$!ba;s/\n/\\n/g' -e 's/\$/\\$/g')"
|
2018-11-05 08:49:40 +01:00
|
|
|
|
|
|
|
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
|
2019-01-15 16:52:55 +01:00
|
|
|
HOSTIP=$(ip -4 route get 8.8.8.8 | grep ^8.8.8.8 | sed -e s/.*src.// -e s/\ //g)
|
2018-11-05 08:49:40 +01:00
|
|
|
fi
|
|
|
|
|
2019-01-21 17:08:28 +01:00
|
|
|
if [ -z "$NETWORK" ]; then
|
|
|
|
NETWORK=$(ip -4 route get 8.8.8.8 | grep ^8.8.8.8 | sed -e s/.*src.// -e s/\ //g -e s/\.[0-9]*$/.0/)/24
|
|
|
|
fi
|
|
|
|
|
2018-11-05 08:49:40 +01:00
|
|
|
# add remaining patroni configuration from template
|
2019-01-21 14:43:53 +01:00
|
|
|
cat /etc/patroni/config.yml.in | \
|
|
|
|
sed -e "s/@VERSION@/${VERSION}/g" \
|
|
|
|
-e "s/@CLUSTER@/${CLUSTER}/g" \
|
|
|
|
-e "s/@HOSTNAME@/${HOSTNAME}/g" \
|
|
|
|
-e "s/@HOSTIP@/${HOSTIP}/g" \
|
2019-01-21 17:08:28 +01:00
|
|
|
-e "s#@NETWORK@#${NETWORK}#g" \
|
2019-02-04 14:52:12 +01:00
|
|
|
-e "s/@API_PORT@/${API_PORT}/g" \
|
2019-01-21 14:43:53 +01:00
|
|
|
-e "s/@PORT@/${PORT}/g" \
|
|
|
|
-e "s/@DCS_CONFIG@/${DCS_CONFIG}/g" \
|
2018-11-05 08:49:40 +01:00
|
|
|
>> $CONFIG_FILE
|
2019-01-14 21:00:56 +01:00
|
|
|
|
|
|
|
# Set permissions
|
|
|
|
chown postgres:postgres $CONFIG_FILE
|
|
|
|
chmod 660 $CONFIG_FILE
|