Read MONGO_DATABASE_SCHEME variable from app when setting MONGO_URL
This commit is contained in:
27
README.md
27
README.md
@@ -143,3 +143,30 @@ dokku mongo:clone lolipop new_database
|
||||
# finally, you can destroy the container
|
||||
dokku mongo:destroy lolipop
|
||||
```
|
||||
|
||||
## Changing database adapter
|
||||
|
||||
It's possible to change the protocol for MONGO_URL by setting
|
||||
the environment variable MONGO_DATABASE_SCHEME on the app:
|
||||
|
||||
```
|
||||
dokku config:set playground MONGO_DATABASE_SCHEME=mongo2
|
||||
dokku mongo:link lolipop playground
|
||||
```
|
||||
|
||||
Will cause MONGO_URL to be set as
|
||||
mongo2://lolipop:SOME_PASSWORD@dokku-mongo-lolipop:27017/lolipop
|
||||
|
||||
CAUTION: Changing MONGO_DATABASE_SCHEME after linking will cause dokku to
|
||||
believe the mongo is not linked when attempting to use `dokku mongo:unlink`
|
||||
or `dokku mongo:promote`.
|
||||
You should be able to fix this by
|
||||
|
||||
- Changing MONGO_URL manually to the new value.
|
||||
|
||||
OR
|
||||
|
||||
- Set MONGO_DATABASE_SCHEME back to its original setting
|
||||
- Unlink the service
|
||||
- Change MONGO_DATABASE_SCHEME to the desired setting
|
||||
- Relink the service
|
||||
|
||||
10
functions
10
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"
|
||||
@@ -253,6 +255,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")
|
||||
@@ -308,6 +311,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")
|
||||
@@ -349,3 +353,9 @@ service_linked_apps() {
|
||||
|
||||
tr '\n' ' ' < "$LINKS_FILE"
|
||||
}
|
||||
|
||||
update_plugin_scheme_for_app() {
|
||||
local APP=$1
|
||||
local MONGO_DATABASE_SCHEME=$(config_get $APP MONGO_DATABASE_SCHEME)
|
||||
PLUGIN_SCHEME=${MONGO_DATABASE_SCHEME:-$PLUGIN_SCHEME}
|
||||
}
|
||||
|
||||
@@ -59,3 +59,12 @@ teardown() {
|
||||
assert_contains "${lines[*]}" "--link dokku.mongo.l:dokku-mongo-l"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:link) uses apps MONGO_DATABASE_SCHEME variable" {
|
||||
dokku config:set my_app MONGO_DATABASE_SCHEME=mongodb2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app
|
||||
url=$(dokku config:get my_app MONGO_URL)
|
||||
password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
assert_contains "$url" "mongodb2://l:$password@dokku-mongo-l:27017/l"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
|
||||
}
|
||||
|
||||
@@ -53,3 +53,10 @@ teardown() {
|
||||
run dokku config my_app
|
||||
assert_contains "${lines[*]}" "DOKKU_MONGO_"
|
||||
}
|
||||
@test "($PLUGIN_COMMAND_PREFIX:promote) uses MONGO_DATABASE_SCHEME variable" {
|
||||
password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
dokku config:set my_app "MONGO_DATABASE_SCHEME=mongodb2" "MONGO_URL=mongodb://u:p@host:27017/db" "DOKKU_MONGO_BLUE_URL=mongodb2://l:$password@dokku-mongo-l:27017/l"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:promote" l my_app
|
||||
url=$(dokku config:get my_app MONGO_URL)
|
||||
assert_contains "$url" "mongodb2://l:$password@dokku-mongo-l:27017/l"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user