fix: correct issue where more complex docker args were not properly parsed when scheduling containers

In cases where a docker arg uses backticks - which may happen with docker labels - scheduled containers would fail to support these due to performing a double-eval. This is particularly noticeable for traefik labels, where backticks and parenthesis are common. This fix properly handles docker args as an array instead of performing an extra eval when scheduling containers.
This commit is contained in:
Jose Diaz-Gonzalez
2022-07-30 00:48:38 -04:00
parent bfe679fb50
commit d8e9511769
2 changed files with 28 additions and 3 deletions

View File

@@ -241,11 +241,11 @@ fn-scheduler-docker-local-start-app-container() {
declare APP="$1"
shift
local DOCKER_ARGS
declare -a DOCKER_ARGS
for i in "$@"; do
DOCKER_ARGS="$DOCKER_ARGS \"$i\""
DOCKER_ARGS+=("$i")
done
eval set -- $DOCKER_ARGS
set -- "${DOCKER_ARGS[@]}"
eval "$(config_export app "$APP" --merged)"
# shellcheck disable=SC2124

View File

@@ -30,3 +30,28 @@ teardown() {
echo "status: $status"
assert_success
}
@test "(scheduler-docker-local) complex labels" {
run create_app
echo "output: $output"
echo "status: $status"
assert_success
# the run command is equivalent to the following line, except with backslashes due to the enclosing doublequotes
# dokku docker-options:add test deploy '--label "some.key=Host(\`$TEST_APP.dokku.me\`)"'
run /bin/bash -c "dokku docker-options:add $TEST_APP deploy '--label \"some.key=Host(\\\`$TEST_APP.dokku.me\\\`)\"'"
echo "output: $output"
echo "status: $status"
assert_success
run deploy_app
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "docker inspect --format '{{ index .Config.Labels \"some.key\"}}' $TEST_APP.web.1"
echo "output: $output"
echo "status: $status"
assert_output "Host(\`$TEST_APP.dokku.me\`)"
assert_success
}