From c924bdef040e702edcfdea1117da5722073e0dc8 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Sun, 29 Jul 2018 13:32:04 -0400 Subject: [PATCH] feat: expand the PORT environment variable when provided Refs #2793 Refs #3196 --- plugins/common/functions | 18 ++++---------- .../scheduler-docker-local/scheduler-deploy | 24 ++++++++++++++----- tests/unit/10_ps-general.bats | 6 ++--- 3 files changed, 26 insertions(+), 22 deletions(-) diff --git a/plugins/common/functions b/plugins/common/functions index cb0a7a2af..601f8ae3c 100755 --- a/plugins/common/functions +++ b/plugins/common/functions @@ -394,21 +394,13 @@ get_app_running_container_types() { get_cmd_from_procfile() { declare desc="parse cmd from app Procfile" - local APP=$1; local PROC_TYPE=$2; local DOKKU_PROCFILE="$DOKKU_ROOT/$APP/DOKKU_PROCFILE" + declare APP="$1" PROC_TYPE="$2" PORT="$3" + local DOKKU_PROCFILE="$DOKKU_ROOT/$APP/DOKKU_PROCFILE" + local COMMAND verify_app_name "$APP" - if [[ -f $DOKKU_PROCFILE ]]; then - local line; local name; local command - while read -r line || [[ -n "$line" ]]; do - if [[ -z "$line" ]] || [[ "$line" == "#"* ]]; then - continue - fi - line=$(strip_inline_comments "$line") - name="${line%%:*}" - command="${line#*:[[:space:]]}" - [[ "$name" == "$PROC_TYPE" ]] && echo "$command" && break - done < "$DOKKU_PROCFILE" - fi + [[ ! -f $DOKKU_PROCFILE ]] && return + procfile-util show -p "$PROC_TYPE" --port "$PORT" } is_deployed() { diff --git a/plugins/scheduler-docker-local/scheduler-deploy b/plugins/scheduler-docker-local/scheduler-deploy index c4a463ae6..0291dd43f 100755 --- a/plugins/scheduler-docker-local/scheduler-deploy +++ b/plugins/scheduler-docker-local/scheduler-deploy @@ -64,12 +64,6 @@ scheduler-docker-local-scheduler-deploy() { [[ "$DOKKU_HEROKUISH" == "true" ]] && local START_CMD="/start $PROC_TYPE" - if [[ "$DOKKU_HEROKUISH" == "false" ]]; then - local DOKKU_DOCKERFILE_START_CMD=$(config_get "$APP" DOKKU_DOCKERFILE_START_CMD || true) - local DOKKU_PROCFILE_START_CMD=$(get_cmd_from_procfile "$APP" "$PROC_TYPE") - local START_CMD=${DOKKU_DOCKERFILE_START_CMD:-$DOKKU_PROCFILE_START_CMD} - fi - if [[ "$PROC_TYPE" == "web" ]]; then ports=($(plugn trigger network-compute-ports "$APP" "$PROC_TYPE" "$DOKKU_HEROKUISH")) local DOKKU_DOCKER_PORT_ARGS="" @@ -81,6 +75,8 @@ scheduler-docker-local-scheduler-deploy() { DOKKU_DOCKER_PORT_ARGS+=" -p $p " done + local START_CMD + START_CMD=$(fn-scheduler-docker-local-extract-start-cmd "$APP" "$PROC_TYPE" "$DOKKU_HEROKUISH" "$DOKKU_PORT") if [[ "$DOKKU_NETWORK_BIND_ALL" == "false" ]]; then # shellcheck disable=SC2086 cid=$(docker run $DOKKU_GLOBAL_RUN_ARGS -d -e PORT=$DOKKU_PORT "${ARG_ARRAY[@]}" $IMAGE $START_CMD) @@ -89,6 +85,9 @@ scheduler-docker-local-scheduler-deploy() { cid=$(docker run $DOKKU_GLOBAL_RUN_ARGS -d $DOKKU_DOCKER_PORT_ARGS -e PORT=$DOKKU_PORT "${ARG_ARRAY[@]}" $IMAGE $START_CMD) fi else + local START_CMD + START_CMD=$(fn-scheduler-docker-local-extract-start-cmd "$APP" "$PROC_TYPE" "$DOKKU_HEROKUISH") + # shellcheck disable=SC2086 cid=$(docker run $DOKKU_GLOBAL_RUN_ARGS -d "${ARG_ARRAY[@]}" $IMAGE $START_CMD) fi @@ -177,4 +176,17 @@ scheduler-docker-local-scheduler-deploy() { fi } +fn-scheduler-docker-local-extract-start-cmd() { + declare APP="$1" PROC_TYPE="$2" DOKKU_HEROKUISH="$3" PORT="$4" + local DOKKU_DOCKERFILE_START_CMD DOKKU_PROCFILE_START_CMD START_CMD + if [[ "$DOKKU_HEROKUISH" != "false" ]]; then + return + fi + + DOKKU_DOCKERFILE_START_CMD=$(config_get "$APP" DOKKU_DOCKERFILE_START_CMD || true) + DOKKU_PROCFILE_START_CMD=$(get_cmd_from_procfile "$APP" "$PROC_TYPE" "$PORT") + START_CMD=${DOKKU_DOCKERFILE_START_CMD:-$DOKKU_PROCFILE_START_CMD} + echo "$START_CMD" +} + scheduler-docker-local-scheduler-deploy "$@" diff --git a/tests/unit/10_ps-general.bats b/tests/unit/10_ps-general.bats index c18c6a746..b43237c11 100644 --- a/tests/unit/10_ps-general.bats +++ b/tests/unit/10_ps-general.bats @@ -16,13 +16,13 @@ teardown() { source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" source "$PLUGIN_CORE_AVAILABLE_PATH/ps/functions" cat < "$DOKKU_ROOT/$TEST_APP/DOKKU_PROCFILE" -web: node web.js +web: node web.js --port \$PORT worker: node worker.js EOF - run get_cmd_from_procfile "$TEST_APP" web + run get_cmd_from_procfile "$TEST_APP" web 5001 echo "output: "$output echo "status: "$status - assert_output "node web.js" + assert_output "node web.js --port 5001" run get_cmd_from_procfile "$TEST_APP" worker echo "output: "$output