fix: ensure env vars are injected for all run containers

CNB containers would otherwise not have them injected.
This commit is contained in:
Jose Diaz-Gonzalez
2021-08-12 21:12:01 -04:00
parent 6c6e26712d
commit a825e2678c
2 changed files with 59 additions and 9 deletions

View File

@@ -3,6 +3,7 @@ set -eo pipefail
[[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
source "$PLUGIN_AVAILABLE_PATH/config/functions"
source "$PLUGIN_AVAILABLE_PATH/scheduler-docker-local/internal-functions"
trigger-scheduler-docker-local-scheduler-run() {
declare desc="runs command in container based on app image"
@@ -50,23 +51,21 @@ trigger-scheduler-docker-local-scheduler-run() {
DOCKER_ARGS+=" --rm"
fi
has_tty && DOCKER_ARGS+=" --interactive --tty"
# the output of docker-args-run is possibly quoted/escaped so eval to normalize
declare -a DOCKER_ARGS_ARRAY
eval "DOCKER_ARGS_ARRAY=($DOCKER_ARGS)"
for env_pair in "${RUN_ENV[@]}"; do
DOCKER_ARGS_ARRAY+=("--env=$env_pair")
DOCKER_ARGS+=" --env=$env_pair"
done
if [[ -n "$DOKKU_GLOBAL_FLAGS" ]]; then
read -ra flags <<<"$DOKKU_GLOBAL_FLAGS"
for flag in "${flags[@]}"; do
if [[ "$flag" =~ ^--label.* ]]; then
DOCKER_ARGS_ARRAY+=("$flag")
DOCKER_ARGS+=" $flag"
fi
done
fi
[[ "$IMAGE_SOURCE_TYPE" == "herokuish" ]] && local EXEC_CMD="/exec"
is_image_cnb_based "$IMAGE" && EXEC_CMD=""
POTENTIAL_PROCFILE_KEY="$1"
PROC_CMD=$(plugn trigger procfile-get-command "$APP" "$POTENTIAL_PROCFILE_KEY" "5000" 2>/dev/null || echo '')
@@ -76,8 +75,12 @@ trigger-scheduler-docker-local-scheduler-run() {
set -- "$PROC_CMD" "${@:2}"
fi
# shellcheck disable=SC2086
CONTAINER_ID="$("$DOCKER_BIN" container create --label=com.dokku.container-type=$PROCESS_TYPE "${DOCKER_RUN_LABEL_ARGS[@]}" $DOKKU_GLOBAL_RUN_ARGS "${DOCKER_ARGS_ARRAY[@]}" $IMAGE $EXEC_CMD "$@")"
DOCKER_ARGS+=" --label=com.dokku.container-type=$PROCESS_TYPE ${DOCKER_RUN_LABEL_ARGS[@]} $DOKKU_GLOBAL_RUN_ARGS"
DOCKER_ARGS+=" $IMAGE "
DOCKER_ARGS+=" $EXEC_CMD "
DOCKER_ARGS+=" $@"
CONTAINER_ID=$(fn-scheduler-docker-local-start-app-container "$APP" "$DOCKER_ARGS")
plugn trigger post-container-create "app" "$CONTAINER_ID" "$APP" "run"
declare -a DOCKER_START_ARGS_ARRAY

View File

@@ -27,11 +27,58 @@ teardown() {
assert_success
}
@test "(run) run (with --env / -e)" {
deploy_app
@test "(run) run herokuish (with --env / -e)" {
run /bin/bash -c "dokku config:set --no-restart --global GLOBAL_SECRET=fjdkslafjdk"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku config:set --no-restart $TEST_APP SECRET_KEY=fjdkslafjdk"
echo "output: $output"
echo "status: $status"
assert_success
run deploy_app python dokku@dokku.me:$TEST_APP add_requirements_txt
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku run --env TEST=testvalue -e TEST2=testvalue2 $TEST_APP env | grep -E '^TEST=testvalue'"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku run --env TEST=testvalue -e TEST2=testvalue2 $TEST_APP env | grep -E '^TEST2=testvalue2'"
echo "output: $output"
echo "status: $status"
assert_success
}
@test "(run) run cnb (with --env / -e)" {
run /bin/bash -c "dokku config:set --no-restart --global GLOBAL_SECRET=fjdkslafjdk"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku config:set --no-restart $TEST_APP DOKKU_CNB_EXPERIMENTAL=1 SECRET_KEY=fjdkslafjdk"
echo "output: $output"
echo "status: $status"
assert_success
run deploy_app python dokku@dokku.me:$TEST_APP add_requirements_txt
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku run --env TEST=testvalue -e TEST2=testvalue2 $TEST_APP env"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku run --env TEST=testvalue -e TEST2=testvalue2 $TEST_APP env | grep -E '^TEST=testvalue'"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "dokku run --env TEST=testvalue -e TEST2=testvalue2 $TEST_APP env | grep -E '^TEST2=testvalue2'"
echo "output: $output"