From 5dbc864060e24f5adf47bfd16ef0d337ca633971 Mon Sep 17 00:00:00 2001 From: Ludovic Perrine Date: Thu, 2 Oct 2014 11:37:47 +0200 Subject: [PATCH 1/4] Handle config values with spaces --- plugins/config/commands | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/plugins/config/commands b/plugins/config/commands index 3a3273e41..cc1b948c1 100755 --- a/plugins/config/commands +++ b/plugins/config/commands @@ -25,19 +25,19 @@ if [[ $1 == config ]] || [[ $1 == config:* ]]; then fi config_styled_hash () { - vars=`echo -e "$1"` + vars="$1" 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=" " @@ -46,7 +46,7 @@ config_styled_hash () { num_zeros=$(($num_zeros - 1)) done echo "$KEY:$zeros$VALUE" - done + done <<< "$vars" } config_restart_app() { @@ -80,7 +80,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 +106,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 +120,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,18 +130,20 @@ 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" From 361011ec69389f686ace70ac55eb2281dffc06b4 Mon Sep 17 00:00:00 2001 From: Ludovic Perrine Date: Thu, 2 Oct 2014 12:27:12 +0200 Subject: [PATCH 2/4] Added test for config with spaces --- tests/apps/config/check_deploy | 14 +++++++++++++- tests/apps/config/post-deploy | 2 +- tests/apps/config/web.js | 4 ++++ 3 files changed, 18 insertions(+), 2 deletions(-) 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..eed12fabf 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); From 043a1a01c51f8bd2f1a85f783fab0d19785c09e3 Mon Sep 17 00:00:00 2001 From: Ludovic Perrine Date: Thu, 2 Oct 2014 15:40:21 +0200 Subject: [PATCH 3/4] Fixed setting config values with spaces over SSH --- dokku | 6 ++++++ tests/apps/config/post-deploy | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) 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/tests/apps/config/post-deploy b/tests/apps/config/post-deploy index eed12fabf..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 HELLO="Hello world" +ssh $REMOTE config:set $REPO CONFTEST=config-test HELLO=\"Hello world\" From 0f31ff1f249ccf49d5c063997d501115c4c2d41d Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Sat, 15 Nov 2014 22:11:55 -0500 Subject: [PATCH 4/4] Add a set of spaces to prefix config variables when setting them --- plugins/config/commands | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/plugins/config/commands b/plugins/config/commands index cc1b948c1..6da21d4a5 100755 --- a/plugins/config/commands +++ b/plugins/config/commands @@ -26,6 +26,7 @@ fi config_styled_hash () { vars="$1" + prefix="$2" longest="" while read -r word; do @@ -45,7 +46,7 @@ config_styled_hash () { zeros="$zeros " num_zeros=$(($num_zeros - 1)) done - echo "$KEY:$zeros$VALUE" + echo "$prefix$KEY:$zeros$VALUE" done <<< "$vars" } @@ -147,7 +148,7 @@ ${var}" 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