diff --git a/dokku b/dokku index 46dedd131..43ab697b3 100755 --- a/dokku +++ b/dokku @@ -12,6 +12,12 @@ if [[ $(id -un) != "dokku" && $1 != plugins-install* ]]; then exit fi +if [[ -n "$SSH_ORIGINAL_COMMAND" ]]; then + export -n SSH_ORIGINAL_COMMAND + $0 $SSH_ORIGINAL_COMMAND + exit $? +fi + case "$1" in receive) APP="$2"; IMAGE="dokku/$APP" diff --git a/plugins/config/commands b/plugins/config/commands index 3a3273e41..6da21d4a5 100755 --- a/plugins/config/commands +++ b/plugins/config/commands @@ -25,19 +25,20 @@ if [[ $1 == config ]] || [[ $1 == config:* ]]; then fi config_styled_hash () { - vars=`echo -e "$1"` + vars="$1" + prefix="$2" longest="" - for word in $vars; do + while read -r word; do KEY=`echo $word | cut -d"=" -f1` if [ ${#KEY} -gt ${#longest} ]; then longest=$KEY fi - done + done <<< "$vars" - for word in $vars; do + while read -r word; do KEY=`echo $word | cut -d"=" -f1` - VALUE=`echo $word | cut -d"=" -f2-` + VALUE=`echo $word | cut -d"=" -f2- | sed -e "s/^'//" -e "s/'$//"` num_zeros=$((${#longest} - ${#KEY})) zeros=" " @@ -45,8 +46,8 @@ config_styled_hash () { zeros="$zeros " num_zeros=$(($num_zeros - 1)) done - echo "$KEY:$zeros$VALUE" - done + echo "$prefix$KEY:$zeros$VALUE" + done <<< "$vars" } config_restart_app() { @@ -80,7 +81,7 @@ case "$1" in exit 1 fi - VARS=`cat $ENV_FILE | grep -Eo "export ([a-zA-Z_][a-zA-Z0-9_]*=.*)" | cut -d" " -f2` + VARS=`cat $ENV_FILE | grep -Eo "export ([a-zA-Z_][a-zA-Z0-9_]*=.*)" | cut -d" " -f2-` for var in "$@"; do if [[ "$var" == "--shell" ]]; then @@ -106,7 +107,7 @@ case "$1" in KEY="$3" - cat $ENV_FILE | grep -Eo "export ([a-zA-Z_][a-zA-Z0-9_]*=.*)" | cut -d" " -f2 | grep "^$KEY=" | cut -d"=" -f2- + cat $ENV_FILE | grep -Eo "export ([a-zA-Z_][a-zA-Z0-9_]*=.*)" | grep "^export $KEY=" | cut -d"=" -f2- | sed -e "s/^'//" -e "s/'$//" ;; config:set) @@ -120,9 +121,9 @@ case "$1" in ENV_ADD="" ENV_TEMP=`cat "${ENV_FILE}"` RESTART_APP=false - VARS="${*:3}" + shift 2 - for var in $VARS; do + for var; do if [[ $var != *"="* ]]; then echo "Usage: dokku config:set APP KEY1=VALUE1 [KEY2=VALUE2 ...]" echo "Must specify KEY and VALUE to set." @@ -130,22 +131,24 @@ case "$1" in fi done - for var in $VARS; do + for var; do KEY=`echo ${var} | cut -d"=" -f1` VALUE=`echo ${var} | cut -d"=" -f2-` if [[ $KEY =~ [a-zA-Z_][a-zA-Z0-9_]* ]]; then RESTART_APP=true ENV_TEMP=$(echo -e "${ENV_TEMP}" | sed "/^export $KEY=/ d") - ENV_TEMP="${ENV_TEMP}\nexport ${var}" + ENV_TEMP="${ENV_TEMP}\nexport $KEY='$VALUE'" ENV_ADD=$(echo -e "${ENV_ADD}" | sed "/^$KEY=/ d") - ENV_ADD="${ENV_ADD}\n${var}" + ENV_ADD="${ENV_ADD}$ +${var}" fi done + ENV_ADD=$(echo "$ENV_ADD" | tail -n +2) #remove first empty line if [ $RESTART_APP ]; then echo "-----> Setting config vars and restarting $APP" - config_styled_hash "$ENV_ADD" + config_styled_hash "$ENV_ADD" " " config_write "$ENV_TEMP" fi diff --git a/tests/apps/config/check_deploy b/tests/apps/config/check_deploy index 4047ea6b8..57e2a697a 100755 --- a/tests/apps/config/check_deploy +++ b/tests/apps/config/check_deploy @@ -1,3 +1,15 @@ #!/bin/bash -set -e; output="$(curl -s $1)"; echo $output; test "$output" == "config-test" +set -e; +base_url="$1" +test_url / "config-test" +test_url /hello "Hello world" + +test_url () { + path="$1" + expected_output="$2" + url="$base_url$path" + output="$(curl -s $url)" + echo $output + test "$output" == "$expected_output" +} \ No newline at end of file diff --git a/tests/apps/config/post-deploy b/tests/apps/config/post-deploy index d0080c7a9..440051a2c 100755 --- a/tests/apps/config/post-deploy +++ b/tests/apps/config/post-deploy @@ -4,5 +4,5 @@ set -ex; REMOTE=$1 REPO=$2 -ssh $REMOTE config:set $REPO CONFTEST=config-test +ssh $REMOTE config:set $REPO CONFTEST=config-test HELLO=\"Hello world\" diff --git a/tests/apps/config/web.js b/tests/apps/config/web.js index 3b5050b1f..774ece28b 100644 --- a/tests/apps/config/web.js +++ b/tests/apps/config/web.js @@ -6,6 +6,10 @@ app.get('/', function(request, response) { response.send(process.env.CONFTEST); }); +app.get('/hello', function(request, response) { + response.send(process.env.HELLO); +}); + var port = process.env.PORT || 5000; app.listen(port, function() { console.log("Listening on " + port);