mirror of
https://github.com/outbackdingo/patroni.git
synced 2026-08-25 14:53:37 +00:00
Some other changes are related to the new version of confd, which now requires specifying etcd url instead of etcd host.
105 lines
2.8 KiB
Bash
Executable File
105 lines
2.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
DOCKER_IMAGE="registry.opensource.zalan.do/acid/patroni:1.0-SNAPSHOT"
|
|
MEMBERS=3
|
|
|
|
|
|
function usage()
|
|
{
|
|
cat <<__EOF__
|
|
Usage: $0
|
|
|
|
Options:
|
|
|
|
--image IMAGE The Docker image to use for the cluster
|
|
--members INT The number of members for the cluster
|
|
--name NAME The name of the new cluster
|
|
|
|
Examples:
|
|
|
|
$0 --image ${DOCKER_IMAGE}
|
|
$0
|
|
$0 --image ${DOCKER_IMAGE} --members=2
|
|
__EOF__
|
|
}
|
|
|
|
|
|
optspec=":-:"
|
|
while getopts "$optspec" optchar; do
|
|
case "${optchar}" in
|
|
-)
|
|
case "${OPTARG}" in
|
|
help)
|
|
usage
|
|
exit 0
|
|
;;
|
|
name)
|
|
PATRONI_SCOPE="${!OPTIND}"; OPTIND=$(( $OPTIND + 1 ))
|
|
;;
|
|
name=*)
|
|
PATRONI_SCOPE="${OPTARG#*=}"
|
|
;;
|
|
image)
|
|
DOCKER_IMAGE="${!OPTIND}"; OPTIND=$(( $OPTIND + 1 ))
|
|
;;
|
|
image=*)
|
|
DOCKER_IMAGE="${OPTARG#*=}"
|
|
;;
|
|
members)
|
|
MEMBERS="${!OPTIND}"; OPTIND=$(( $OPTIND + 1 ))
|
|
;;
|
|
members=*)
|
|
MEMBERS="${OPTARG#*=}"
|
|
;;
|
|
*)
|
|
if [ "$OPTERR" = 1 ] && [ "${optspec:0:1}" != ":" ]; then
|
|
echo "Unknown option --${OPTARG}" >&2
|
|
fi
|
|
;;
|
|
esac;;
|
|
*)
|
|
if [ "$OPTERR" != 1 ] || [ "${optspec:0:1}" = ":" ]; then
|
|
echo "Non-option argument: '-${OPTARG}'" >&2
|
|
usage
|
|
exit 1
|
|
fi
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ -z ${PATRONI_SCOPE} ]; then
|
|
PATRONI_SCOPE=$(cat /dev/urandom | LC_ALL=C tr -dc 'a-z0-9' | head -c 8)
|
|
fi
|
|
|
|
function docker_run()
|
|
{
|
|
local name=$1
|
|
shift
|
|
container=$(docker run -d --name=$name $*)
|
|
container_ip=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' ${container})
|
|
echo "Started container ${name}, ip=${container_ip}"
|
|
}
|
|
|
|
|
|
ETCD_CONTAINER="${PATRONI_SCOPE}_etcd"
|
|
docker_run ${ETCD_CONTAINER} ${DOCKER_IMAGE} --etcd
|
|
|
|
DOCKER_ARGS="--link=${ETCD_CONTAINER}:${ETCD_CONTAINER} -e PATRONI_SCOPE=${PATRONI_SCOPE} -e PATRONI_ETCD_URL=http://${ETCD_CONTAINER}:2379"
|
|
PATRONI_ENV=$(sed 's/#.*//g' docker/patroni-secrets.env | sed -n 's/^PATRONI_.*$/-e &/p' | tr '\n' ' ')
|
|
PATRONI_VOLUME="-v $(dirname $(dirname $(realpath $0)))/patroni:/patroni"
|
|
|
|
for i in $(seq 1 "${MEMBERS}"); do
|
|
container_name=postgres${i}
|
|
docker_run "${PATRONI_SCOPE}_${container_name}" \
|
|
$PATRONI_VOLUME \
|
|
$DOCKER_ARGS \
|
|
$PATRONI_ENV \
|
|
-e PATRONI_NAME=${container_name} \
|
|
${DOCKER_IMAGE}
|
|
done
|
|
|
|
docker_run "${PATRONI_SCOPE}_haproxy" \
|
|
-p=5000 -p=5001 \
|
|
$DOCKER_ARGS \
|
|
${DOCKER_IMAGE} --confd
|