From a3a37a19480f1fc8b7a1bf4c8e989847a320b264 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Wed, 20 Nov 2019 11:09:11 -0500 Subject: [PATCH] feat: minimize number of check-related output messages --- plugins/scheduler-docker-local/check-deploy | 18 ++++--------- plugins/scheduler-docker-local/pre-deploy | 27 +++++++++++++++++-- .../scheduler-docker-local/scheduler-deploy | 2 +- 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/plugins/scheduler-docker-local/check-deploy b/plugins/scheduler-docker-local/check-deploy index 52eca560b..650c0cd44 100755 --- a/plugins/scheduler-docker-local/check-deploy +++ b/plugins/scheduler-docker-local/check-deploy @@ -79,7 +79,6 @@ scheduler-docker-local-check-deploy() { local TIMEOUT="${DOKKU_CHECKS_TIMEOUT:-30}" # use this number of retries for checks local ATTEMPTS="${DOKKU_CHECKS_ATTEMPTS:-5}" - local CHECKS_URL="${DOKKU_CHECKS_URL:-http://dokku.viewdocs.io/dokku/deployment/zero-downtime-deploys/}" local CHECK_DEPLOY_TMP_WORK_DIR=$(mktemp -d "/tmp/dokku-${DOKKU_PID}-${FUNCNAME[0]}.XXXXXX") local CHECKS_FILENAME=${CHECK_DEPLOY_TMP_WORK_DIR}/CHECKS @@ -99,20 +98,13 @@ scheduler-docker-local-check-deploy() { } trap "checks_check_deploy_cleanup $DOKKU_APP_CONTAINER_ID" RETURN INT TERM EXIT + # We allow custom check for web instances only if [[ ! -s "${CHECKS_FILENAME}" ]] || [[ "$DOKKU_APP_CONTAINER_TYPE" != "web" ]]; then - # We allow custom check for web instances only - if [[ "$DOKKU_APP_CONTAINER_TYPE" == "web" ]]; then - dokku_log_verbose "CHECKS file not found in container: Running simple container check..." - dokku_log_verbose "For more efficient zero downtime deployments, create a file CHECKS. See ${CHECKS_URL} for examples" - else - dokku_log_verbose "Non web container detected: Running default container check..." - fi - rm -rf "$CHECK_DEPLOY_TMP_WORK_DIR" &>/dev/null || true # simple default check to see if the container stuck around local DOKKU_DEFAULT_CHECKS_WAIT="${DOKKU_DEFAULT_CHECKS_WAIT:-10}" - dokku_log_info1 "Waiting for $DOKKU_DEFAULT_CHECKS_WAIT seconds ..." + dokku_log_verbose "Waiting for $DOKKU_DEFAULT_CHECKS_WAIT seconds ..." sleep "$DOKKU_DEFAULT_CHECKS_WAIT" ! (is_container_status "$DOKKU_APP_CONTAINER_ID" "Running") && dokku_log_fail "App container failed to start!!" @@ -124,7 +116,7 @@ scheduler-docker-local-check-deploy() { fi trap - EXIT - dokku_log_info1 "Default container check successful!" && exit 0 + dokku_log_verbose "Default container check successful!" && exit 0 fi # ensure CHECKS file has trailing newline @@ -160,7 +152,7 @@ scheduler-docker-local-check-deploy() { until [[ $SUCCESS == 1 || $ATTEMPT -ge $ATTEMPTS ]]; do local FAILEDCHECKS=0 local ATTEMPT=$((ATTEMPT + 1)) - dokku_log_info1 "Attempt $ATTEMPT/$ATTEMPTS Waiting for $WAIT seconds ..." + dokku_log_verbose "Attempt $ATTEMPT/$ATTEMPTS. Waiting for $WAIT seconds ..." sleep "$WAIT" # -q Do not use .curlrc (must come first) @@ -248,7 +240,7 @@ scheduler-docker-local-check-deploy() { fi trap - EXIT - dokku_log_info1 "All checks successful!" + dokku_log_verbose "All checks successful!" } scheduler-docker-local-check-deploy "$@" diff --git a/plugins/scheduler-docker-local/pre-deploy b/plugins/scheduler-docker-local/pre-deploy index 6dbb97b67..160c9c4b2 100755 --- a/plugins/scheduler-docker-local/pre-deploy +++ b/plugins/scheduler-docker-local/pre-deploy @@ -9,15 +9,22 @@ scheduler-docker-local-pre-deploy() { declare desc="scheduler-docker-local pre-deploy plugin trigger" declare trigger="scheduler-docker-local pre-deploy" declare APP="$1" IMAGE_TAG="$2" - local IMAGE DISABLE_CHOWN DOCKER_ARGS DOKKU_APP_TYPE DOKKU_APP_USER APP_PATHS CONTAINER_PATHS - declare -a ARG_ARRAY local DOKKU_SCHEDULER=$(get_app_scheduler "$APP") if [[ "$DOKKU_SCHEDULER" != "docker-local" ]]; then return fi + scheduler-docker-local-pre-deploy-chown-app "$APP" "$IMAGE_TAG" + scheduler-docker-local-pre-deploy-precheck "$APP" "$IMAGE_TAG" +} + +scheduler-docker-local-pre-deploy-chown-app() { + declare desc="Runs chown against the /app directory for herokuish images" + declare APP="$1" IMAGE_TAG="$2" local DOCKER_RUN_LABEL_ARGS="--label=com.dokku.app-name=$APP" + local IMAGE DISABLE_CHOWN DOCKER_ARGS DOKKU_APP_TYPE DOKKU_APP_USER APP_PATHS CONTAINER_PATHS + declare -a ARG_ARRAY IMAGE=$(get_app_image_name "$APP" "$IMAGE_TAG") @@ -47,4 +54,20 @@ scheduler-docker-local-pre-deploy() { "$DOCKER_BIN" container run "${DOCKER_RUN_LABEL_ARGS[@]}" $DOKKU_GLOBAL_RUN_ARGS "${ARG_ARRAY[@]}" $IMAGE /bin/bash -c "find $CONTAINER_PATHS -not -user $DOKKU_APP_USER -print0 | xargs -0 -r chown -R $DOKKU_APP_USER" || true } +scheduler-docker-local-pre-deploy-precheck() { + declare desc="Outputs the checks messages if necessary" + declare APP="$1" IMAGE_TAG="$2" + local IMAGE=$(get_deploying_app_image_name "$APP" "$IMAGE_TAG") + local CHECKS_FILE=$(mktemp "/tmp/dokku-${DOKKU_PID}-${FUNCNAME[0]}.XXXXXX") + trap "rm -rf '$CHECKS_FILE' >/dev/null" RETURN INT TERM + copy_from_image "$IMAGE" "CHECKS" "$CHECKS_FILENAME" 2>/dev/null || true + + dokku_log_info2 "Processing deployment checks" + if [[ ! -s "${CHECKS_FILENAME}" ]]; then + local CHECKS_URL="${DOKKU_CHECKS_URL:-http://dokku.viewdocs.io/dokku/deployment/zero-downtime-deploys/}" + dokku_log_verbose "No CHECKS file found. Simple container checks will be performed." + dokku_log_verbose "For more efficient zero downtime deployments, create a CHECKS file. See ${CHECKS_URL} for examples" + fi +} + scheduler-docker-local-pre-deploy "$@" diff --git a/plugins/scheduler-docker-local/scheduler-deploy b/plugins/scheduler-docker-local/scheduler-deploy index 8bd49aa83..de45b19f1 100755 --- a/plugins/scheduler-docker-local/scheduler-deploy +++ b/plugins/scheduler-docker-local/scheduler-deploy @@ -130,7 +130,7 @@ scheduler-docker-local-scheduler-deploy() { # run checks first, then post-deploy hooks, which switches proxy traffic trap 'kill_new $cid $PROC_TYPE $CONTAINER_INDEX' INT TERM EXIT if [[ "$(is_app_proctype_checks_disabled "$APP" "$PROC_TYPE")" == "false" ]]; then - dokku_log_info1 "Attempting pre-flight checks" + dokku_log_info1 "Attempting pre-flight checks ($PROC_TYPE.$CONTAINER_INDEX)" plugn trigger check-deploy "$APP" "$cid" "$PROC_TYPE" "$port" "$ipaddr" fi trap - INT TERM EXIT