Merge pull request #27 from dokku/lg-revamp-link-unlink
Revamp link/unlink commands
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,2 +1,3 @@
|
||||
tests/dokku
|
||||
tests/fixtures
|
||||
tests/bin/plugn
|
||||
|
||||
50
README.md
50
README.md
@@ -22,7 +22,6 @@ dokku plugin:install https://github.com/dokku/dokku-redis.git redis
|
||||
## commands
|
||||
|
||||
```
|
||||
redis:alias <name> <alias> Set an alias for the docker link
|
||||
redis:clone <name> <new-name> Create container <new-name> then copy data from <name> into <new-name>
|
||||
redis:connect <name> Connect via redis-cli to a redis service
|
||||
redis:create <name> Create a redis service
|
||||
@@ -34,6 +33,7 @@ redis:info <name> Print the connection information
|
||||
redis:link <name> <app> Link the redis service to the app
|
||||
redis:list List all redis services
|
||||
redis:logs <name> [-t] Print the most recent log(s) for this service
|
||||
redis:promote <name> <app> Promote service <name> as REDIS_URL in <app>
|
||||
redis:restart <name> Graceful shutdown and restart of the redis service container
|
||||
redis:start <name> Start a previously stopped redis service
|
||||
redis:stop <name> Stop a running redis service
|
||||
@@ -58,8 +58,6 @@ dokku redis:create lolipop
|
||||
# get connection information as follows
|
||||
dokku redis:info lolipop
|
||||
|
||||
# lets assume the ip of our redis service is 172.17.0.1
|
||||
|
||||
# a redis service can be linked to a
|
||||
# container this will use native docker
|
||||
# links via the docker-options plugin
|
||||
@@ -69,24 +67,42 @@ dokku redis:link lolipop playground
|
||||
|
||||
# the above will expose the following environment variables
|
||||
#
|
||||
# REDIS_URL=redis://172.17.0.1:6379
|
||||
# REDIS_NAME=/lolipop/DATABASE
|
||||
# REDIS_PORT=tcp://172.17.0.1:6379
|
||||
# REDIS_PORT_6379_TCP=tcp://172.17.0.1:6379
|
||||
# REDIS_PORT_6379_TCP_PROTO=tcp
|
||||
# REDIS_PORT_6379_TCP_PORT=6379
|
||||
# REDIS_PORT_6379_TCP_ADDR=172.17.0.1
|
||||
# DOKKU_REDIS_LOLIPOP_NAME=/lolipop/DATABASE
|
||||
# DOKKU_REDIS_LOLIPOP_PORT=tcp://172.17.0.1:6379
|
||||
# DOKKU_REDIS_LOLIPOP_PORT_6379_TCP=tcp://172.17.0.1:6379
|
||||
# DOKKU_REDIS_LOLIPOP_PORT_6379_TCP_PROTO=tcp
|
||||
# DOKKU_REDIS_LOLIPOP_PORT_6379_TCP_PORT=6379
|
||||
# DOKKU_REDIS_LOLIPOP_PORT_6379_TCP_ADDR=172.17.0.1
|
||||
#
|
||||
# and the following will be set on the linked application by default
|
||||
#
|
||||
# REDIS_URL=redis://dokku-redis-lolipop:6379/0
|
||||
#
|
||||
# NOTE: the host exposed here only works internally in docker containers. If
|
||||
# you want your container to be reachable from outside, you should use `expose`.
|
||||
|
||||
# you can examine the environment variables
|
||||
# using our 'playground' app's env command
|
||||
dokku run playground env
|
||||
# another service can be linked to your app
|
||||
dokku redis:link other_service playground
|
||||
|
||||
# you can customize the environment
|
||||
# variables through a custom docker link alias
|
||||
dokku redis:alias lolipop REDIS_DATABASE
|
||||
# since REDIS_URL is already in use, another environment variable will be
|
||||
# generated automatically
|
||||
#
|
||||
# DOKKU_REDIS_BLUE_URL=redis://dokku-redis-other-service:6379/0
|
||||
|
||||
# you can then promote the new service to be the primary one
|
||||
# NOTE: this will restart your app
|
||||
dokku redis:promote other_service playground
|
||||
|
||||
# this will replace REDIS_URL with the url from other_service and generate
|
||||
# another environment variable to hold the previous value if necessary.
|
||||
# you could end up with the following for example:
|
||||
#
|
||||
# REDIS_URL=redis://dokku-redis-other-service:6379/0
|
||||
# DOKKU_REDIS_BLUE_URL=redis://dokku-redis-other-service:6379/0
|
||||
# DOKKU_REDIS_SILVER_URL=redis://dokku-redis-lolipop:6379/lolipop
|
||||
|
||||
# you can also unlink a redis service
|
||||
# NOTE: this will restart your app
|
||||
# NOTE: this will restart your app and unset related environment variables
|
||||
dokku redis:unlink lolipop playground
|
||||
|
||||
# you can tail logs for a particular service
|
||||
|
||||
17
commands
17
commands
@@ -16,13 +16,6 @@ if [[ $1 == $PLUGIN_COMMAND_PREFIX:* ]]; then
|
||||
fi
|
||||
|
||||
case "$1" in
|
||||
$PLUGIN_COMMAND_PREFIX:alias)
|
||||
[[ -z $2 ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z $3 ]] && dokku_log_fail "Please specify an alias for the service"
|
||||
verify_service_name "$2"
|
||||
service_set_alias "$2" "$3"
|
||||
;;
|
||||
|
||||
$PLUGIN_COMMAND_PREFIX:create)
|
||||
[[ -z $2 ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ ! -d "$PLUGIN_DATA_ROOT/$2" ]] || dokku_log_fail "$PLUGIN_SERVICE service $2 already exists"
|
||||
@@ -203,9 +196,16 @@ case "$1" in
|
||||
service_port_unexpose "$2"
|
||||
;;
|
||||
|
||||
$PLUGIN_COMMAND_PREFIX:promote)
|
||||
[[ -z $2 ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z $3 ]] && dokku_log_fail "Please specify an app to run the command on"
|
||||
verify_service_name "$2"
|
||||
verify_app_name "$3"
|
||||
promote "$2" "$3"
|
||||
;;
|
||||
|
||||
help | $PLUGIN_COMMAND_PREFIX:help)
|
||||
HELP=$(cat<<EOF
|
||||
$PLUGIN_COMMAND_PREFIX:alias <name> <alias>, Set an alias for the docker link
|
||||
$PLUGIN_COMMAND_PREFIX:create <name>, Create a $PLUGIN_SERVICE service
|
||||
$PLUGIN_COMMAND_PREFIX:destroy <name>, Delete the $PLUGIN_SERVICE service and stop its container if there are no links left
|
||||
$PLUGIN_COMMAND_PREFIX:link <name> <app>, Link the $PLUGIN_SERVICE service to the app
|
||||
@@ -222,6 +222,7 @@ case "$1" in
|
||||
$PLUGIN_COMMAND_PREFIX:unexpose <name>, Unexpose a previously exposed $PLUGIN_SERVICE service
|
||||
$PLUGIN_COMMAND_PREFIX:start <name>, Start a previously stopped $PLUGIN_SERVICE service
|
||||
$PLUGIN_COMMAND_PREFIX:stop <name>, Stop a running $PLUGIN_SERVICE service
|
||||
$PLUGIN_COMMAND_PREFIX:promote <name> <app>, Promote service <name> as ${PLUGIN_DEFAULT_ALIAS}_URL in <app>
|
||||
EOF
|
||||
)
|
||||
if [[ -n $DOKKU_API_VERSION ]]; then
|
||||
|
||||
1
config
1
config
@@ -7,6 +7,7 @@ export PLUGIN_COMMAND_PREFIX="redis"
|
||||
export PLUGIN_DATA_ROOT=$REDIS_ROOT
|
||||
export PLUGIN_DATASTORE_PORTS=(6379)
|
||||
export PLUGIN_DEFAULT_ALIAS="REDIS"
|
||||
export PLUGIN_ALT_ALIAS="DOKKU_REDIS"
|
||||
export PLUGIN_IMAGE=$REDIS_IMAGE
|
||||
export PLUGIN_IMAGE_VERSION=$REDIS_IMAGE_VERSION
|
||||
export PLUGIN_SCHEME="redis"
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
docker-args-deploy
|
||||
@@ -1,31 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
PLUGIN_BASE_PATH="$PLUGIN_PATH"
|
||||
if [[ -n $DOKKU_API_VERSION ]]; then
|
||||
PLUGIN_BASE_PATH="$PLUGIN_ENABLED_PATH"
|
||||
fi
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$0")/functions"
|
||||
source "$(dirname "$0")/config"
|
||||
|
||||
STDIN=$(cat)
|
||||
APP="$1"
|
||||
|
||||
output=""
|
||||
for i in $PLUGIN_DATA_ROOT/*; do
|
||||
[[ -d $i ]] || continue
|
||||
SERVICE=$(echo "$i" | cut -d'/' -f 7)
|
||||
LINKS_FILE="$PLUGIN_DATA_ROOT/$SERVICE/LINKS"
|
||||
ALIAS="$(service_alias "$SERVICE")"
|
||||
SERVICE_URL="$(service_url "$SERVICE")"
|
||||
if [[ -f "$LINKS_FILE" ]]; then
|
||||
while read line; do
|
||||
if [[ "$line" == "$APP" ]]; then
|
||||
output="$output --link dokku.redis.$SERVICE:$ALIAS --env ${ALIAS}_URL=$SERVICE_URL"
|
||||
break
|
||||
fi
|
||||
done < "$LINKS_FILE"
|
||||
fi
|
||||
done
|
||||
|
||||
echo "$STDIN$output"
|
||||
@@ -1 +0,0 @@
|
||||
docker-args-deploy
|
||||
109
functions
109
functions
@@ -32,14 +32,8 @@ verify_service_name() {
|
||||
|
||||
service_alias() {
|
||||
local SERVICE="$1"
|
||||
local ALIAS_FILE="$PLUGIN_DATA_ROOT/$SERVICE/ALIAS"
|
||||
|
||||
verify_service_name "$1"
|
||||
if [[ -f "$ALIAS_FILE" ]]; then
|
||||
cat "$ALIAS_FILE"
|
||||
else
|
||||
echo "$PLUGIN_DEFAULT_ALIAS"
|
||||
fi
|
||||
local SERVICE_NAME=$(get_service_name "$SERVICE")
|
||||
echo "$SERVICE_NAME" | tr ._ -
|
||||
}
|
||||
|
||||
service_info() {
|
||||
@@ -77,16 +71,44 @@ service_exposed_ports() {
|
||||
service_link() {
|
||||
local APP="$2"
|
||||
local SERVICE="$1"
|
||||
local SERVICE_URL=$(service_url "$SERVICE")
|
||||
local SERVICE_NAME=$(get_service_name "$SERVICE")
|
||||
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||
local EXISTING_CONFIG=$(dokku config "$APP")
|
||||
local LINK=$(echo "$EXISTING_CONFIG" | grep "$SERVICE_URL" | cut -d: -f1) || true
|
||||
local DEFAULT_ALIAS=$(echo "$EXISTING_CONFIG" | grep "${PLUGIN_DEFAULT_ALIAS}_URL") || true
|
||||
local SERVICE_ALIAS=$(service_alias "$SERVICE")
|
||||
local LINKS_FILE="$SERVICE_ROOT/LINKS"
|
||||
|
||||
[[ -n $LINK ]] && dokku_log_fail "Already linked as $LINK"
|
||||
mkdir -p "$SERVICE_ROOT" || dokku_log_fail "Unable to create service directory"
|
||||
touch "$LINKS_FILE"
|
||||
echo "$APP" >> "$LINKS_FILE"
|
||||
sort "$LINKS_FILE" -u -o "$LINKS_FILE"
|
||||
|
||||
dokku_log_info1 "Restarting app $APP"
|
||||
dokku ps:restart "$APP"
|
||||
local ALIAS="$PLUGIN_DEFAULT_ALIAS"
|
||||
if [[ -n $DEFAULT_ALIAS ]]; then
|
||||
ALIAS=$(service_alternative_alias "$EXISTING_CONFIG")
|
||||
fi
|
||||
dokku docker-options:add "$APP" build,deploy,run "--link $SERVICE_NAME:$SERVICE_ALIAS"
|
||||
dokku config:set "$APP" "${ALIAS}_URL=$SERVICE_URL"
|
||||
}
|
||||
|
||||
service_alternative_alias() {
|
||||
local EXISTING_CONFIG="$1"
|
||||
local COLORS=(AQUA BLACK BLUE FUCHSIA GRAY GREEN LIME MAROON NAVY OLIVE PURPLE RED SILVER TEAL WHITE YELLOW)
|
||||
local ALIAS;
|
||||
|
||||
while [[ -z $ALIAS ]]; do
|
||||
local IDX=$((RANDOM % ${#COLORS[*]}))
|
||||
local COLOR=${COLORS[IDX]}
|
||||
ALIAS="${PLUGIN_ALT_ALIAS}_${COLOR}"
|
||||
local IN_USE=$(echo "$EXISTING_CONFIG" | grep "${ALIAS}_URL")
|
||||
if [[ -n $IN_USE ]]; then
|
||||
unset ALIAS
|
||||
fi
|
||||
done
|
||||
echo "$ALIAS"
|
||||
}
|
||||
|
||||
service_logs() {
|
||||
@@ -236,25 +258,23 @@ service_stop() {
|
||||
service_unlink() {
|
||||
local APP="$2"
|
||||
local SERVICE="$1"
|
||||
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||
local LINKS_FILE="$SERVICE_ROOT/LINKS"
|
||||
local SERVICE_URL=$(service_url "$SERVICE")
|
||||
local SERVICE_NAME=$(get_service_name "$SERVICE")
|
||||
local EXISTING_CONFIG=$(dokku config "$APP")
|
||||
local SERVICE_ALIAS=$(service_alias "$SERVICE")
|
||||
local LINK=($(echo "$EXISTING_CONFIG" | grep "$SERVICE_URL" | cut -d: -f1)) || true
|
||||
|
||||
mkdir -p "$SERVICE_ROOT" || dokku_log_fail "Unable to create service directory"
|
||||
touch "$LINKS_FILE"
|
||||
sed -i "/^$APP\$/d" "$LINKS_FILE"
|
||||
sort "$LINKS_FILE" -u -o "$LINKS_FILE"
|
||||
[[ -z ${LINK[*]} ]] && dokku_log_fail "Not linked to app $APP"
|
||||
remove_from_links_file "$SERVICE" "$APP"
|
||||
|
||||
dokku_log_info1 "Restarting app $APP"
|
||||
dokku ps:restart "$APP"
|
||||
dokku docker-options:remove "$APP" build,deploy,run "--link $SERVICE_NAME:$SERVICE_ALIAS"
|
||||
dokku config:unset "$APP" "${LINK[*]}"
|
||||
}
|
||||
|
||||
service_url() {
|
||||
local SERVICE="$1"
|
||||
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||
|
||||
local ID="$(cat "$SERVICE_ROOT/ID")"
|
||||
local IP="$(get_container_ip "$ID")"
|
||||
echo "$PLUGIN_SCHEME://$IP:${PLUGIN_DATASTORE_PORTS[0]}/0"
|
||||
local SERVICE_ALIAS="$(service_alias "$SERVICE")"
|
||||
echo "$PLUGIN_SCHEME://$SERVICE_ALIAS:${PLUGIN_DATASTORE_PORTS[0]}/0"
|
||||
}
|
||||
|
||||
is_container_status () {
|
||||
@@ -279,3 +299,46 @@ service_version() {
|
||||
local SERVICE_NAME="$(get_service_name "$SERVICE")"
|
||||
docker inspect -f '{{.Config.Image}}' "$SERVICE_NAME"
|
||||
}
|
||||
|
||||
get_url_from_config() {
|
||||
local EXISTING_CONFIG="$1"
|
||||
local CONFIG_VAR="$2"
|
||||
echo "$EXISTING_CONFIG" | grep "$CONFIG_VAR" | sed "s/$CONFIG_VAR:\s*//"
|
||||
}
|
||||
|
||||
promote() {
|
||||
local SERVICE="$1"
|
||||
local APP="$2"
|
||||
local PLUGIN_DEFAULT_CONFIG_VAR="${PLUGIN_DEFAULT_ALIAS}_URL"
|
||||
local EXISTING_CONFIG=$(dokku config "$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")
|
||||
|
||||
[[ -z ${CONFIG_VARS[*]} ]] && dokku_log_fail "Not linked to app $APP"
|
||||
[[ ${CONFIG_VARS[*]} =~ $PLUGIN_DEFAULT_CONFIG_VAR ]] && dokku_log_fail "Service $1 already promoted as $PLUGIN_DEFAULT_CONFIG_VAR"
|
||||
|
||||
local NEW_CONFIG_VARS=""
|
||||
if [[ -n $PREVIOUS_DEFAULT_URL ]]; then
|
||||
local PREVIOUS_ALIAS=$(echo "$EXISTING_CONFIG" | grep "$PREVIOUS_DEFAULT_URL" | grep -v "$PLUGIN_DEFAULT_CONFIG_VAR") || true
|
||||
if [[ -z $PREVIOUS_ALIAS ]]; then
|
||||
local ALIAS=$(service_alternative_alias "$EXISTING_CONFIG")
|
||||
NEW_CONFIG_VARS+="${ALIAS}_URL=$PREVIOUS_DEFAULT_URL "
|
||||
fi
|
||||
fi
|
||||
local PROMOTE_URL=$(get_url_from_config "$EXISTING_CONFIG" "${CONFIG_VARS[0]}")
|
||||
NEW_CONFIG_VARS+="$PLUGIN_DEFAULT_CONFIG_VAR=$PROMOTE_URL"
|
||||
dokku config:set "$APP" $NEW_CONFIG_VARS
|
||||
}
|
||||
|
||||
remove_from_links_file() {
|
||||
local SERVICE="$1"
|
||||
local APP="$2"
|
||||
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||
local LINKS_FILE="$SERVICE_ROOT/LINKS"
|
||||
|
||||
mkdir -p "$SERVICE_ROOT" || dokku_log_fail "Unable to create service directory"
|
||||
touch "$LINKS_FILE"
|
||||
sed -i "/^$APP\$/d" "$LINKS_FILE"
|
||||
sort "$LINKS_FILE" -u -o "$LINKS_FILE"
|
||||
}
|
||||
|
||||
16
pre-delete
Executable file
16
pre-delete
Executable file
@@ -0,0 +1,16 @@
|
||||
#!/usr/bin/env bash
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
PLUGIN_BASE_PATH="$PLUGIN_PATH"
|
||||
if [[ -n $DOKKU_API_VERSION ]]; then
|
||||
PLUGIN_BASE_PATH="$PLUGIN_ENABLED_PATH"
|
||||
fi
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$0")/functions"
|
||||
source "$(dirname "$0")/config"
|
||||
|
||||
APP="$1"
|
||||
for SERVICE in "$PLUGIN_DATA_ROOT"/*; do
|
||||
remove_from_links_file "$(basename "$SERVICE")" "$APP"
|
||||
done
|
||||
exit 0
|
||||
2
tests/bin/sudo
Executable file
2
tests/bin/sudo
Executable file
@@ -0,0 +1,2 @@
|
||||
#!/usr/bin/env bash
|
||||
exit 0
|
||||
20
tests/hook_pre_delete.bats
Executable file
20
tests/hook_pre_delete.bats
Executable file
@@ -0,0 +1,20 @@
|
||||
#!/usr/bin/env bats
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
dokku apps:create my_app >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app >&2
|
||||
}
|
||||
|
||||
teardown() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app >&2
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
rm "$DOKKU_ROOT/my_app" -rf
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:hook:pre-delete) removes app from links file when destroying app" {
|
||||
[[ -n $(< "$PLUGIN_DATA_ROOT/l/LINKS") ]]
|
||||
dokku --force apps:destroy my_app
|
||||
[[ -z $(< "$PLUGIN_DATA_ROOT/l/LINKS") ]]
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
#!/usr/bin/env bats
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
}
|
||||
|
||||
teardown() {
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:alias) error when there are no arguments" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:alias"
|
||||
assert_contains "${lines[*]}" "Please specify a name for the service"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:alias) error when alias is missing" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:alias" l
|
||||
assert_contains "${lines[*]}" "Please specify an alias for the service"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:alias) error when service does not exist" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:alias" not_existing_service MY_ALIAS
|
||||
assert_contains "${lines[*]}" "Redis service not_existing_service does not exist"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:alias) success" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:alias" l MY_ALIAS
|
||||
new_alias=$(cat "$PLUGIN_DATA_ROOT/l/ALIAS")
|
||||
[[ $new_alias == "MY_ALIAS" ]]
|
||||
}
|
||||
|
||||
@@ -21,5 +21,12 @@ teardown() {
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:info) success" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:info" l
|
||||
assert_contains "${lines[*]}" "DSN: redis://172.17.0.34:6379/0"
|
||||
assert_contains "${lines[*]}" "DSN: redis://dokku-redis-l:6379/0"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:info) replaces underscores by dash in hostname" {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" test_with_underscores
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:info" test_with_underscores
|
||||
assert_contains "${lines[*]}" "DSN: redis://dokku-redis-test-with-underscores:6379/0"
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" test_with_underscores
|
||||
}
|
||||
@@ -31,8 +31,30 @@ teardown() {
|
||||
assert_contains "${lines[*]}" "Redis service not_existing_service does not exist"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:link) success" {
|
||||
@test "($PLUGIN_COMMAND_PREFIX:link) error when the service is already linked to app" {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app
|
||||
links=$(cat "$PLUGIN_DATA_ROOT/l/LINKS")
|
||||
assert_equal "$links" "my_app"
|
||||
assert_contains "${lines[*]}" "Already linked as REDIS_URL"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:link) exports REDIS_URL to app" {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app
|
||||
url=$(dokku config:get my_app REDIS_URL)
|
||||
assert_contains "$url" "redis://dokku-redis-l:6379/0"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:link) generates an alternate config url when REDIS_URL already in use" {
|
||||
dokku config:set my_app REDIS_URL=redis://host:6379/0
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app
|
||||
run dokku config my_app
|
||||
assert_contains "${lines[*]}" "DOKKU_REDIS_"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:link) links to app with docker-options" {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app
|
||||
run dokku docker-options my_app
|
||||
assert_contains "${lines[*]}" "--link dokku.redis.l:dokku-redis-l"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
|
||||
}
|
||||
53
tests/service_promote.bats
Executable file
53
tests/service_promote.bats
Executable file
@@ -0,0 +1,53 @@
|
||||
#!/usr/bin/env bats
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:create" l >&2
|
||||
dokku apps:create my_app >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app
|
||||
}
|
||||
|
||||
teardown() {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
|
||||
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l >&2
|
||||
rm "$DOKKU_ROOT/my_app" -rf
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:promote) error when there are no arguments" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:promote"
|
||||
assert_contains "${lines[*]}" "Please specify a name for the service"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:promote) error when the app argument is missing" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:promote" l
|
||||
assert_contains "${lines[*]}" "Please specify an app to run the command on"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:promote) error when the app does not exist" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:promote" l not_existing_app
|
||||
assert_contains "${lines[*]}" "App not_existing_app does not exist"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:promote) error when the service does not exist" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:promote" not_existing_service my_app
|
||||
assert_contains "${lines[*]}" "service not_existing_service does not exist"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:promote) error when the service is already promoted" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:promote" l my_app
|
||||
assert_contains "${lines[*]}" "already promoted as REDIS_URL"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:promote) changes REDIS_URL" {
|
||||
dokku config:set my_app "REDIS_URL=redis://host:6379/db" "DOKKU_REDIS_BLUE_URL=redis://dokku-redis-l:6379/0"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:promote" l my_app
|
||||
url=$(dokku config:get my_app REDIS_URL)
|
||||
assert_equal "$url" "redis://dokku-redis-l:6379/0"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:promote) creates new config url when needed" {
|
||||
dokku config:set my_app "REDIS_URL=redis://host:6379/db" "DOKKU_REDIS_BLUE_URL=redis://dokku-redis-l:6379/0"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:promote" l my_app
|
||||
run dokku config my_app
|
||||
assert_contains "${lines[*]}" "DOKKU_REDIS_"
|
||||
}
|
||||
@@ -31,9 +31,21 @@ teardown() {
|
||||
assert_contains "${lines[*]}" "Redis service not_existing_service does not exist"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:unlink) success" {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app >&2
|
||||
@test "($PLUGIN_COMMAND_PREFIX:unlink) error when service not linked to app" {
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
|
||||
links=$(cat "$PLUGIN_DATA_ROOT/l/LINKS")
|
||||
assert_equal "$links" ""
|
||||
assert_contains "${lines[*]}" "Not linked to app my_app"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:unlink) removes link from docker-options" {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
|
||||
options=$(dokku docker-options my_app)
|
||||
assert_equal "$options" ""
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:unlink) unsets config url from app" {
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app >&2
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
|
||||
config=$(dokku config:get my_app REDIS_URL)
|
||||
assert_equal "$config" ""
|
||||
}
|
||||
@@ -1,6 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/test_helper.bash"
|
||||
|
||||
BIN_STUBS="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/bin"
|
||||
|
||||
if [[ ! -d $DOKKU_ROOT ]]; then
|
||||
git clone https://github.com/progrium/dokku.git $DOKKU_ROOT > /dev/null
|
||||
fi
|
||||
@@ -13,3 +15,10 @@ cd -
|
||||
rm -rf $DOKKU_ROOT/plugins/service
|
||||
mkdir -p $DOKKU_ROOT/plugins/service
|
||||
find ./ -maxdepth 1 -type f -exec cp '{}' $DOKKU_ROOT/plugins/service \;
|
||||
|
||||
if [[ ! -f $BIN_STUBS/plugn ]]; then
|
||||
wget -O- "$PLUGN_URL" | tar xzf - -C "$BIN_STUBS"
|
||||
plugn init
|
||||
ln -s "$DOKKU_ROOT"/plugins/* "$DOKKU_ROOT"/plugins/available
|
||||
ln -s "$DOKKU_ROOT"/plugins/* "$DOKKU_ROOT"/plugins/enabled
|
||||
fi
|
||||
|
||||
@@ -10,6 +10,7 @@ export PLUGIN_AVAILABLE_PATH="$PLUGIN_PATH"
|
||||
export PLUGIN_CORE_AVAILABLE_PATH="$PLUGIN_PATH"
|
||||
export REDIS_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/fixtures"
|
||||
export PLUGIN_DATA_ROOT="$REDIS_ROOT"
|
||||
export PLUGN_URL="https://github.com/progrium/plugn/releases/download/v0.1.0/plugn_0.1.0_linux_x86_64.tgz"
|
||||
|
||||
mkdir -p "$PLUGIN_DATA_ROOT"
|
||||
rm -rf "${PLUGIN_DATA_ROOT:?}"/*
|
||||
|
||||
Reference in New Issue
Block a user