From d3902aea55658883a56d67bd479a7991bba043f5 Mon Sep 17 00:00:00 2001 From: Kenny Chen Date: Fri, 11 Dec 2020 23:23:28 +0800 Subject: [PATCH 1/3] docker-compose: Bugfix: - fix status determination for more than one docker-compose instance --- heartbeat/docker-compose | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/heartbeat/docker-compose b/heartbeat/docker-compose index 1a4b651a0d..4da0bdf346 100755 --- a/heartbeat/docker-compose +++ b/heartbeat/docker-compose @@ -1,6 +1,7 @@ #!/bin/sh -# Version: 1.1.2 -# Date: 2020-06-24 + +# Version: 1.1.1 +# Date: 2020-12-11 # # Resource script for running docker-compose # @@ -140,7 +141,8 @@ docker_compose_status() if [ -r "$DIR/$YML" ]; then DKPS=$(cd $DIR; $COMMAND ps -q) - STAT_MSG=$(docker ps --no-trunc | grep -E $(echo "$DKPS" | tr '\n' '|') | expand) + STAT_MSG=$(docker ps --no-trunc | expand) + PSTAT_MSG=$(docker ps --no-trunc | grep -E $(echo "$DKPS" | tr '\n' '|' | sed 's/|$//') | expand) LNWTH=$(echo "$STAT_MSG" | head -n1 | wc -c) STATEPOS=$(echo "$STAT_MSG" | head -n1 | egrep -o 'STATUS.*$' | wc -c) OFFSET=$(($LNWTH-$STATEPOS+1)) @@ -150,7 +152,7 @@ docker_compose_status() else PSNU=0 fi - UPNU=$(echo "$STAT_MSG" | cut -c ${OFFSET}- | awk '{print $1}' | grep -w '^Up' | wc -l) + UPNU=$(echo "$PSTAT_MSG" | cut -c ${OFFSET}- | awk '{print $1}' | grep -w '^Up' | wc -l) if [ "${PSNU:-0}" -ne 0 ]; then if [ ${UPNU:-0} -eq 0 ]; then From c6b49d9ef4c8221a0159d0529a4819b7636467c3 Mon Sep 17 00:00:00 2001 From: Kenny Chen Date: Wed, 24 Feb 2021 16:16:08 +0800 Subject: [PATCH 2/3] docker-compose: improvement - add determination for docker daemon status - improved accuracy for multiple instance --- heartbeat/docker-compose | 47 ++++++++++++++++++++++++++++------------ 1 file changed, 33 insertions(+), 14 deletions(-) diff --git a/heartbeat/docker-compose b/heartbeat/docker-compose index 4da0bdf346..ce732c22ee 100755 --- a/heartbeat/docker-compose +++ b/heartbeat/docker-compose @@ -1,7 +1,7 @@ #!/bin/sh -# Version: 1.1.1 -# Date: 2020-12-11 +# Version: 1.1.2 +# Date: 2021-02-24 # # Resource script for running docker-compose # @@ -36,7 +36,7 @@ . ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs # Defaults -OCF_RESKEY_binpath_default=/usr/bin/docker-compose +OCF_RESKEY_binpath_default=/usr/local/bin/docker-compose OCF_RESKEY_ymlfile_default=docker-compose.yml : ${OCF_RESKEY_binpath=${OCF_RESKEY_binpath_default}} : ${OCF_RESKEY_ymlfile=${OCF_RESKEY_ymlfile_default}} @@ -101,7 +101,7 @@ For example, "docker-compose.yml" - + @@ -123,13 +123,18 @@ YML="$OCF_RESKEY_ymlfile" docker_kill() { - for i in $(docker ps --all | awk -e '$NF ~ /\<'"${PRE}"'_.*_[0-9]+\>/ {print $1}'); do - docker kill $i >/dev/null 2>&1 - docker rm $i >/dev/null 2>&1 || RTV=false - done - if [ "$RTV" = false ]; then - ocf_log err "failed to kill docker" - return $OCF_ERR_GENERIC + cd /tmp + if systemctl status docker | grep -q 'Active: active (running)'; then + for i in $(docker ps --all | awk -e '$NF ~ /\<'"${PRE}"'[-_]/ {print $1}'); do + docker kill $i >/dev/null 2>&1 + docker rm $i >/dev/null 2>&1 || RTV=false + done + if [ "$RTV" = false ]; then + ocf_log err "failed to kill docker" + return $OCF_ERR_GENERIC + else + RUN=false + fi else RUN=false fi @@ -137,12 +142,18 @@ docker_kill() docker_compose_status() { + # return if docker service is not running + systemctl status docker | grep -q 'Active: active (running)' || { + ocf_log info "docker daemon is not running." + return $OCF_NOT_RUNNING + } # use docker-compose ps if YML found, otherwise try docker ps and kill containers if [ -r "$DIR/$YML" ]; then - DKPS=$(cd $DIR; $COMMAND ps -q) + DKPS=$(cd $DIR; $COMMAND ps -q 2>/dev/null) + cd /tmp STAT_MSG=$(docker ps --no-trunc | expand) - PSTAT_MSG=$(docker ps --no-trunc | grep -E $(echo "$DKPS" | tr '\n' '|' | sed 's/|$//') | expand) + PSTAT_MSG=$(docker ps --no-trunc | grep -E $(echo "$DKPS" | tr '\n' '|' | sed 's/|$//') 2>/dev/null | expand) LNWTH=$(echo "$STAT_MSG" | head -n1 | wc -c) STATEPOS=$(echo "$STAT_MSG" | head -n1 | egrep -o 'STATUS.*$' | wc -c) OFFSET=$(($LNWTH-$STATEPOS+1)) @@ -169,7 +180,7 @@ docker_compose_status() RUN=false fi else - STAT_MSG=$(docker ps --all | awk -e '$NF ~ /\<'"$PRE"'_.*_[0-9]+\>/ {print $1}') + STAT_MSG=$(docker ps --all | awk -e '$NF ~ /\<'"${PRE}"'[-_]/ {print $1}') if [ -z "$STAT_MSG" ]; then RUN=false else @@ -185,19 +196,25 @@ docker_compose_status() docker_compose_start() { + + sleep 5 + docker_compose_validate_all docker_compose_status >/dev/null 2>&1 retVal=$? # return success if docker service is running [ $retVal -eq $OCF_SUCCESS ] && exit $OCF_SUCCESS + sleep 10 cd $DIR $COMMAND up -d || { ocf_log err "Error. docker-compose returned error $?." + cd /tmp exit $OCF_ERR_GENERIC } ocf_log info "docker service started." + cd /tmp exit $OCF_SUCCESS } @@ -211,6 +228,7 @@ docker_compose_stop() ocf_log err "Error on shutting down docker service, try docker kill..." RUN_KILL=true } + cd /tmp else RUN_KILL=true fi @@ -222,6 +240,7 @@ docker_compose_stop() } fi ocf_log info "docker service stopped." + cd /tmp exit $OCF_SUCCESS } From 921e8bea69d979fcb7d872b0445ba57e847ea80d Mon Sep 17 00:00:00 2001 From: Kenny Chen Date: Fri, 24 Sep 2021 19:36:11 +0800 Subject: [PATCH 3/3] Bugfix: the time gap may cause wrong determination on the number of UP process. Using one command instead. --- heartbeat/docker-compose | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/heartbeat/docker-compose b/heartbeat/docker-compose index ce732c22ee..8d5d24c842 100755 --- a/heartbeat/docker-compose +++ b/heartbeat/docker-compose @@ -1,7 +1,7 @@ #!/bin/sh -# Version: 1.1.2 -# Date: 2021-02-24 +# Version: 1.1.3 +# Date: 2021-09-24 # # Resource script for running docker-compose # @@ -153,7 +153,7 @@ docker_compose_status() DKPS=$(cd $DIR; $COMMAND ps -q 2>/dev/null) cd /tmp STAT_MSG=$(docker ps --no-trunc | expand) - PSTAT_MSG=$(docker ps --no-trunc | grep -E $(echo "$DKPS" | tr '\n' '|' | sed 's/|$//') 2>/dev/null | expand) + PSTAT_MSG=$(echo "$STAT_MSG" | grep -E $(echo "$DKPS" | tr '\n' '|' | sed 's/|$//') 2>/dev/null) LNWTH=$(echo "$STAT_MSG" | head -n1 | wc -c) STATEPOS=$(echo "$STAT_MSG" | head -n1 | egrep -o 'STATUS.*$' | wc -c) OFFSET=$(($LNWTH-$STATEPOS+1))