Files
dokku/plugins/checks/subcommands/run
Jose Diaz-Gonzalez 8fc0cb67ec chore: drop unnecessary line stripping
Since this comes out of ps-current-scale, we can ensure the contents are always valid.
2021-08-01 16:33:42 -04:00

96 lines
2.9 KiB
Bash
Executable File

#!/usr/bin/env bash
set -eo pipefail
[[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
source "$PLUGIN_AVAILABLE_PATH/checks/functions"
check_all_processes() {
local APP="$1"
CHECK_PROC_TYPE="$2"
local VALID_CHECK_PROC_TYPE=false
local line
local PROC_TYPE
local PROC_COUNT
while read -r line || [[ -n "$line" ]]; do
local PROC_TYPE=${line%%=*}
local PROC_COUNT=${line#*=}
if [[ -n "$CHECK_PROC_TYPE" ]] && [[ "$CHECK_PROC_TYPE" != "$PROC_TYPE" ]]; then
continue
fi
VALID_CHECK_PROC_TYPE=true
if [[ "$(is_app_proctype_checks_disabled "$APP" "$PROC_TYPE")" == "true" ]]; then
dokku_log_info1 "Zero downtime is disabled for app ($APP.$PROC_TYPE). Skipping checks"
continue
fi
check_process_type "$APP" "$PROC_TYPE" "$PROC_COUNT"
done < <(plugn trigger ps-current-scale "$APP")
if [[ "$VALID_CHECK_PROC_TYPE" == "false" ]]; then
dokku_log_fail "Invalid process type specified ($APP.$CHECK_PROC_TYPE)"
fi
}
check_process_type() {
local APP="$1" PROC_TYPE="$2" PROC_COUNT="$3"
local CONTAINER_INDEX=1
while [[ $CONTAINER_INDEX -le $PROC_COUNT ]]; do
check_process "$APP" "$PROC_TYPE" "$CONTAINER_INDEX"
local CONTAINER_INDEX=$((CONTAINER_INDEX + 1))
done
}
check_process() {
local APP="$1" PROC_TYPE="$2" CONTAINER_INDEX="$3"
local CONTAINER_ID DOKKU_CONTAINER_ID_FILE IMAGE IP IS_HEROKUISH_CONTAINER PORT
DOKKU_CONTAINER_ID_FILE="$DOKKU_ROOT/$APP/CONTAINER.$PROC_TYPE.$CONTAINER_INDEX"
if [[ ! -f "$DOKKU_CONTAINER_ID_FILE" ]]; then
dokku_log_fail "Invalid container index specified ($APP.$PROC_TYPE.$CONTAINER_INDEX)"
fi
IS_HEROKUISH_CONTAINER=false
IMAGE=$(get_app_image_name "$APP")
is_image_herokuish_based "$IMAGE" "$APP" && IS_HEROKUISH_CONTAINER=true
dokku_log_info1 "Running checks for app ($APP.$PROC_TYPE.$CONTAINER_INDEX)"
CONTAINER_ID=$(<"$DOKKU_CONTAINER_ID_FILE")
IP="$(plugn trigger network-get-ipaddr "$APP" "$PROC_TYPE" "$CONTAINER_ID")"
PORT="$(plugn trigger network-get-port "$APP" "$PROC_TYPE" "$CONTAINER_ID" "$IS_HEROKUISH_CONTAINER")"
plugn trigger check-deploy "$APP" "$CONTAINER_ID" "$PROC_TYPE" "$PORT" "$IP"
}
cmd-checks-run() {
declare desc="run zero-downtime checks for app/proctypes"
declare cmd="checks:run"
[[ "$1" == "$cmd" ]] && shift 1
declare APP="$1"
verify_app_name "$APP"
local PROCTYPES="${2:-_all_}"
dokku_log_info1 "Running pre-flight checks"
if [[ "$PROCTYPES" == "_all_" ]]; then
check_all_processes "$APP"
else
local PROC_TYPE OIFS="$IFS" IFS=,
for PROC_TYPE in $PROCTYPES; do
IFS="$OIFS"
local CONTAINER_INDEX=$(echo "$PROC_TYPE" | cut -d'.' -f2 -s)
local PROC_TYPE=$(echo "$PROC_TYPE" | cut -d'.' -f1)
if [[ -n "$CONTAINER_INDEX" ]]; then
check_process "$APP" "$PROC_TYPE" "$CONTAINER_INDEX"
else
check_all_processes "$APP" "$PROC_TYPE"
fi
done
fi
}
cmd-checks-run "$@"