diff --git a/README.md b/README.md index dbad258..e9525cd 100644 --- a/README.md +++ b/README.md @@ -129,3 +129,30 @@ dokku redis:clone lolipop new_database # finally, you can destroy the container dokku redis:destroy lolipop ``` + +## Changing database adapter + +It's possible to change the protocol for REDIS_URL by setting +the environment variable REDIS_DATABASE_SCHEME on the app: + +``` +dokku config:set playground REDIS_DATABASE_SCHEME=redis2 +dokku redis:link lolipop playground +``` + +Will cause REDIS_URL to be set as +redis2://dokku-redis-lolipop:6379/lolipop + +CAUTION: Changing REDIS_DATABASE_SCHEME after linking will cause dokku to +believe the redis is not linked when attempting to use `dokku redis:unlink` +or `dokku redis:promote`. +You should be able to fix this by + +- Changing REDIS_URL manually to the new value. + +OR + +- Set REDIS_DATABASE_SCHEME back to its original setting +- Unlink the service +- Change REDIS_DATABASE_SCHEME to the desired setting +- Relink the service diff --git a/functions b/functions index a4ae683..098df0d 100755 --- a/functions +++ b/functions @@ -1,6 +1,7 @@ #!/usr/bin/env bash set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x source "$(dirname "$0")/config" +source "$PLUGIN_AVAILABLE_PATH/config/functions" get_random_ports() { local iterations="${1:-1}" @@ -70,6 +71,7 @@ service_exposed_ports() { service_link() { local APP="$2" local SERVICE="$1" + update_plugin_scheme_for_app "$APP" local SERVICE_URL=$(service_url "$SERVICE") local SERVICE_NAME=$(get_service_name "$SERVICE") local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE" @@ -257,6 +259,7 @@ service_stop() { service_unlink() { local APP="$2" local SERVICE="$1" + update_plugin_scheme_for_app "$APP" local SERVICE_URL=$(service_url "$SERVICE") local SERVICE_NAME=$(get_service_name "$SERVICE") local EXISTING_CONFIG=$(dokku config "$APP") @@ -310,6 +313,7 @@ promote() { local APP="$2" local PLUGIN_DEFAULT_CONFIG_VAR="${PLUGIN_DEFAULT_ALIAS}_URL" local EXISTING_CONFIG=$(dokku config "$APP") + update_plugin_scheme_for_app "$APP" local SERVICE_URL=$(service_url "$SERVICE") local CONFIG_VARS=($(echo "$EXISTING_CONFIG" | grep "$SERVICE_URL" | cut -d: -f1)) || true local PREVIOUS_DEFAULT_URL=$(get_url_from_config "$EXISTING_CONFIG" "$PLUGIN_DEFAULT_CONFIG_VAR") @@ -351,3 +355,9 @@ service_linked_apps() { tr '\n' ' ' < "$LINKS_FILE" } + +update_plugin_scheme_for_app() { + local APP=$1 + local REDIS_DATABASE_SCHEME=$(config_get $APP REDIS_DATABASE_SCHEME) + PLUGIN_SCHEME=${REDIS_DATABASE_SCHEME:-$PLUGIN_SCHEME} +} diff --git a/tests/service_link.bats b/tests/service_link.bats index 7aacc1a..6b517f7 100755 --- a/tests/service_link.bats +++ b/tests/service_link.bats @@ -58,3 +58,11 @@ teardown() { assert_contains "${lines[*]}" "--link dokku.redis.l:dokku-redis-l" dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app } + +@test "($PLUGIN_COMMAND_PREFIX:link) uses apps REDIS_DATABASE_SCHEME variable" { + dokku config:set my_app REDIS_DATABASE_SCHEME=redis2 + dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app + url=$(dokku config:get my_app REDIS_URL) + assert_contains "$url" "redis2://dokku-redis-l:6379/0" + dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app +} diff --git a/tests/service_promote.bats b/tests/service_promote.bats index 28ee87a..2eb188e 100755 --- a/tests/service_promote.bats +++ b/tests/service_promote.bats @@ -51,3 +51,10 @@ teardown() { run dokku config my_app assert_contains "${lines[*]}" "DOKKU_REDIS_" } + +@test "($PLUGIN_COMMAND_PREFIX:promote) uses REDIS_DATABASE_SCHEME variable" { + dokku config:set my_app "REDIS_DATABASE_SCHEME=redis2" "REDIS_URL=redis://u:p@host:6379" "DOKKU_REDIS_BLUE_URL=redis2://dokku-redis-l:6379/0" + dokku "$PLUGIN_COMMAND_PREFIX:promote" l my_app + url=$(dokku config:get my_app REDIS_URL) + assert_equal "$url" "redis2://dokku-redis-l:6379/0" +}