From afd101034d65fb6b1d59e15afc1fa904024f7b07 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Sun, 29 Jul 2018 14:01:01 -0400 Subject: [PATCH] feat: verify that a process exists before scaling it Refs #2582 Refs #3196 --- plugins/ps/functions | 9 ++++++++- tests/unit/10_ps-dockerfile.bats | 7 +++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/plugins/ps/functions b/plugins/ps/functions index cbdba98ec..1abbe0497 100755 --- a/plugins/ps/functions +++ b/plugins/ps/functions @@ -74,12 +74,18 @@ generate_scale_file() { set_scale() { declare desc="sets app proc type scaling" - local APP="$1"; local DOKKU_SCALE_FILE="$DOKKU_ROOT/$APP/DOKKU_SCALE" + declare APP="$1" + local DOKKU_SCALE_FILE="$DOKKU_ROOT/$APP/DOKKU_SCALE" + local DOKKU_PROCFILE="$DOKKU_ROOT/$APP/DOKKU_PROCFILE" shift 1 + local SCALE_SETTINGS=("$@") for procscale in "${SCALE_SETTINGS[@]}"; do local PROC_NAME=${procscale%%=*} local PROC_COUNT=${procscale#*=} + if [[ -f "$DOKKU_PROCFILE" ]] && ! procfile-util exists --procfile "$DOKKU_PROCFILE" --process-type "$PROC_NAME" > /dev/null 2>&1; then + dokku_log_fail "${PROC_NAME} is not a valid process name" + fi is_number "$PROC_COUNT" || dokku_log_fail "ps:scale $PROC_COUNT is not a number" dokku_log_info1_quiet "Scaling $APP:$PROC_NAME to $PROC_COUNT" if (egrep -q "^${PROC_NAME}=" "$DOKKU_SCALE_FILE" > /dev/null 2>&1); then @@ -151,6 +157,7 @@ ps_scale() { local APP="$1"; verify_app_name "$APP" local IMAGE_TAG=$(get_running_image_tag "$APP") local DOKKU_SCALE_FILE="$DOKKU_ROOT/$APP/DOKKU_SCALE" + local DOKKU_PROCFILE="$DOKKU_ROOT/$APP/DOKKU_PROCFILE" shift 1 [[ ! -e $DOKKU_SCALE_FILE ]] && generate_scale_file "$APP" "$IMAGE_TAG" diff --git a/tests/unit/10_ps-dockerfile.bats b/tests/unit/10_ps-dockerfile.bats index dc002e8ad..5b6d1d608 100644 --- a/tests/unit/10_ps-dockerfile.bats +++ b/tests/unit/10_ps-dockerfile.bats @@ -70,6 +70,13 @@ teardown() { done } +@test "(ps:scale) dockerfile" { + run bash -c "dokku ps:scale $TEST_APP non-existent=2" + echo "output: "$output + echo "status: "$status + assert_failure +} + @test "(ps:scale) dockerfile" { run bash -c "dokku ps:scale $TEST_APP web=2" echo "output: "$output