From 5c258512cf728b6bc7aa25a5d3c96b549f8af4aa Mon Sep 17 00:00:00 2001 From: Andrej Babic Date: Wed, 21 Jul 2021 17:30:46 +0200 Subject: [PATCH] Add entry point and redis config + status to base container --- docker/buffer-base.Dockerfile | 7 +++++++ docker/docker-entrypoint.sh | 35 +++++++++++++++++++++++++++++++++++ docker/redis_status.sh | 26 ++++++++++++++++++++++++++ 3 files changed, 68 insertions(+) create mode 100755 docker/docker-entrypoint.sh create mode 100755 docker/redis_status.sh diff --git a/docker/buffer-base.Dockerfile b/docker/buffer-base.Dockerfile index 2717357..9852c37 100644 --- a/docker/buffer-base.Dockerfile +++ b/docker/buffer-base.Dockerfile @@ -15,3 +15,10 @@ RUN wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.12/hdf5-1.12.0/sr ln -v -s `pwd`/hdf5/lib/* /usr/lib64/ && \ ln -v -s `pwd`/hdf5/include/* /usr/include/ && \ ln -v -s /usr/include/mpich-x86_64/* /usr/include/ + +COPY docker-entrypoint.sh /usr/bin/docker-entrypoint.sh +COPY redis_status.sh /usr/bin/redis_status.sh + +ENTRYPOINT ["/usr/bin/docker-entrypoint.sh"] + +CMD["bash"] diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh new file mode 100755 index 0000000..7d61edc --- /dev/null +++ b/docker/docker-entrypoint.sh @@ -0,0 +1,35 @@ +#!/bin/sh +set -e + +if [[ -z "${PIPELINE_NAME}" ]]; then + echo "Environment variable PIPELINE_NAME not defined." + exit 1; +fi + +if [[ -z "${SERVICE_NAME}" ]]; then + echo "Environment variable SERVICE_NAME not defined." + exit 1; +fi + +REDIS_HOST="${REDIS_HOST:-127.0.0.1}" +REDIS_SKIP="${REDIS_SKIP:-false}" +REDIS_CONFIG_KEY=config."${PIPELINE_NAME}" +REDIS_STATUS_KEY=status."${PIPELINE_NAME}.${SERVICE_NAME}" + +# Download config from Redis to redis_config.json and start status reporting. +if [ "${REDIS_SKIP}" = false ]; then + redis-cli -h "${REDIS_HOST}" get "${REDIS_CONFIG_KEY}" > redis_config.json + + CONFIG_BYTES="$(stat -c %s redis_config.json)" + if [ "${CONFIG_BYTES}" -le 1 ]; then + echo "Key missing in redis(${REDIS_HOST}): ${REDIS_CONFIG_KEY}" + exit 1; + fi + + export REDIS_STATUS_KEY + redis_status.sh & +fi + + +EXECUTABLE="${@:1}" +exec "$EXECUTABLE" \ No newline at end of file diff --git a/docker/redis_status.sh b/docker/redis_status.sh new file mode 100755 index 0000000..beec419 --- /dev/null +++ b/docker/redis_status.sh @@ -0,0 +1,26 @@ +#!/bin/sh +set -e + +if [[ -z "${REDIS_STATUS_KEY}" ]]; then + echo "Environment variable REDIS_STATUS_KEY not defined." + exit 1; +fi + +STATUS="$(redis-cli -x set "${REDIS_STATUS_KEY}:config" < redis_config.json)" +if [ ! "${STATUS}" = "OK" ]; then + echo "Cound not set service status in Redis: ${STATUS}" + exit 1; +fi + +while true; do + TIMESTAMP="$(date +%s%N)" + + STATUS="$(redis-cli set "${REDIS_STATUS_KEY}:heartbeat" ${TIMESTAMP} )" + if [ ! "${STATUS}" = "OK" ]; then + echo "Cound not set service hearbeat in Redis: ${STATUS}" + exit 1; + fi + + # Update heartbeat every 10 seconds. + sleep 10 +done