Compare commits

...

18 Commits

Author SHA1 Message Date
Jose Diaz-Gonzalez
0be882b8a4 Release 1.12.0 2021-04-24 00:32:16 -04:00
Jose Diaz-Gonzalez
0769fd1fd3 feat: add dependabot config to all repositories 2021-04-24 00:10:33 -04:00
Jose Diaz-Gonzalez
ab1e14b986 Merge pull request #224 from dokku/dockerfile-update
Pull image from Dockerfile
2021-04-23 23:55:43 -04:00
Jose Diaz-Gonzalez
5aea44f11c tests: refactor source again 2021-02-26 00:45:09 -05:00
Jose Diaz-Gonzalez
832a8045d5 tests: fix path to Dockerfile when sourcing config for tests 2021-02-26 00:27:52 -05:00
Jose Diaz-Gonzalez
d25e6e6483 docs: handle image and version correctly 2021-02-26 00:11:16 -05:00
Jose Diaz-Gonzalez
f309f16c7b refactor: move base image reference to Dockerfile
This will allow us to take advantage of automatic update software to auto-pull new versions when they are released to docker hub.
2021-02-25 23:16:23 -05:00
Jose Diaz-Gonzalez
1a0f6815ca tests: use dash instead of underscore 2021-02-25 20:32:57 -05:00
Jose Diaz-Gonzalez
76cfd9a091 feat: add plugin trigger for service creation and deletion 2021-02-25 19:54:59 -05:00
Jose Diaz-Gonzalez
4e808c6ff9 refactor: use pre/post triggers for service-action naming
This is a bit more clear as the links aren't always idempotent and may have errors - this allows users to reconcile at what point a link may have failed so that they can take further action.
2021-02-25 16:05:24 -05:00
Jose Diaz-Gonzalez
9974da1abe feat: add service-action plugin trigger for link/unlink
This can be used to track in alternate systems when a service is linked/unlinked from an app by implementing the custom trigger.
2021-02-25 15:58:31 -05:00
Jose Diaz-Gonzalez
e414eaccec Release 1.11.6 2021-01-17 21:16:25 -05:00
Jose Diaz-Gonzalez
6f1ad4c20e fix: do not shadow TMPDIR variable
This enables usage of the plugin with libpam-tmpdir.

Refs dokku/dokku#3149
2021-01-17 21:02:28 -05:00
Jose Diaz-Gonzalez
b7030307ef fix: correct image link 2020-09-27 12:38:52 -04:00
Jose Diaz-Gonzalez
9ab0660b14 Merge pull request #198 from dokku/configurable-config
fix: allow config directory to be configurable
2020-05-16 12:57:05 -04:00
Jose Diaz-Gonzalez
56f688e8aa fix: allow config directory to be configurable
For postgres, the config directory doesn't actually exist, so adding this configurability allows the plugin's info command to report correctly.
2020-05-16 02:49:34 -04:00
Jose Diaz-Gonzalez
ba24332367 Release 1.11.5 2020-05-15 00:59:24 -04:00
Jose Diaz-Gonzalez
5fd0ca4be7 fix: respect the TMPDIR environment variable
Refs dokku/dokku-redis#143
2020-05-15 00:57:21 -04:00
14 changed files with 141 additions and 82 deletions

6
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,6 @@
version: 2
updates:
- package-ecosystem: "docker"
directory: "/"
schedule:
interval: "daily"

1
Dockerfile Normal file
View File

@@ -0,0 +1 @@
FROM postgres:11.6

View File

@@ -5,12 +5,20 @@ import os
import re
def compile(service, version, variable, alias, image, scheme, ports, unimplemented, dokku_version):
def compile(service, version, variable, alias, image, scheme, ports, sponsors, unimplemented, dokku_version):
prefix = "\n\n".join([
header(service),
description(service, image, version),
])
if len(sponsors) > 0:
prefix += "\n\n"
prefix += sponsors_section(service, sponsors)
return (
"\n\n".join(
[
header(service),
description(service, version),
prefix,
requirements_section(dokku_version),
installation_section(service, dokku_version),
commands_section(service, variable, alias, image, scheme, ports, unimplemented),
@@ -33,8 +41,26 @@ def header(service):
)
def description(service, version):
return f"Official {service} plugin for dokku. Currently defaults to installing [{service} {version}](https://hub.docker.com/_/{service}/)."
def description(service, full_image, version):
base = "_"
image = full_image
if "/" in full_image:
base = "r/" + full_image.split("/")[0]
image = full_image.split("/")[1]
return f"Official {service} plugin for dokku. Currently defaults to installing [{full_image} {version}](https://hub.docker.com/{base}/{image}/)."
def sponsors_section(service, sponsors):
if len(sponsors) == 0:
return ""
sponsor_data = ["## Sponsors", "", f"The {service} plugin was generously sponsored by the following:", ""]
sponsor_data.extend([f"- [{s}](https://github.com/{s})" for s in sponsors])
return "\n".join(
sponsor_data
)
def requirements_section(dokku_version):
@@ -448,12 +474,16 @@ def main():
image = None
alias = None
unimplemented = []
with open("Dockerfile") as f:
for line in f.readlines():
if "FROM " in line:
image, version = line.split(" ")[1].split(":")
image = image.strip()
version = version.strip()
with open("config") as f:
for line in f.readlines():
if "IMAGE_VERSION=${" in line:
version = re.search('"(.+)"', line).group(1)
if "_IMAGE=${" in line:
image = re.search('"(.+)"', line).group(1)
if "PLUGIN_COMMAND_PREFIX=" in line:
service = re.search('"(.+)"', line).group(1)
if "PLUGIN_DEFAULT_ALIAS=" in line:
@@ -469,7 +499,14 @@ def main():
if match is not None:
unimplemented = [s.strip('"') for s in match.group(1).split(" ")]
text = compile(service, version, variable, alias, image, scheme, ports, unimplemented, "0.12.x+")
sponsors = []
with open("plugin.toml") as f:
for line in f.readlines():
if line.startswith("sponsors"):
sponsors = re.search("\[([\"\w\s,_-]+)\]", line).group(1)
sponsors = [s.strip("\"") for s in sponsors.split(",")]
text = compile(service, version, variable, alias, image, scheme, ports, sponsors, unimplemented, "0.12.x+")
base_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
readme_file = os.path.join(base_path, "README.md")

View File

@@ -188,18 +188,18 @@ service_backup() {
dokku_log_fail "Provide AWS credentials or use the --use-iam flag"
fi
TMPDIR=$(mktemp -d)
trap 'rm -rf "$TMPDIR" > /dev/null' RETURN INT TERM EXIT
BACKUP_TMPDIR=$(mktemp -d --tmpdir)
trap 'rm -rf "$BACKUP_TMPDIR" > /dev/null' RETURN INT TERM EXIT
docker inspect "$ID" &>/dev/null || dokku_log_fail "Service container does not exist"
is_container_status "$ID" "Running" || dokku_log_fail "Service container is not running"
(service_export "$SERVICE" >"${TMPDIR}/export")
(service_export "$SERVICE" >"${BACKUP_TMPDIR}/export")
# Build parameter list for s3backup tool
BACKUP_PARAMETERS="$BACKUP_PARAMETERS -e BUCKET_NAME=$BUCKET_NAME"
BACKUP_PARAMETERS="$BACKUP_PARAMETERS -e BACKUP_NAME=${PLUGIN_COMMAND_PREFIX}-${SERVICE}"
BACKUP_PARAMETERS="$BACKUP_PARAMETERS -v ${TMPDIR}:/backup"
BACKUP_PARAMETERS="$BACKUP_PARAMETERS -v ${BACKUP_TMPDIR}:/backup"
if [[ -f "$SERVICE_BACKUP_ROOT/AWS_DEFAULT_REGION" ]]; then
BACKUP_PARAMETERS="$BACKUP_PARAMETERS -e AWS_DEFAULT_REGION=$(cat "$SERVICE_BACKUP_ROOT/AWS_DEFAULT_REGION")"
@@ -383,7 +383,7 @@ service_info() {
local flag key valid_flags
local flag_map=(
"--config-dir: ${SERVICE_ROOT}/config"
"--config-dir: ${SERVICE_ROOT}/${PLUGIN_CONFIG_SUFFIX}"
"--data-dir: ${SERVICE_ROOT}/data"
"--dsn: ${SERVICE_URL}"
"--exposed-ports: $(service_exposed_ports "$SERVICE")"
@@ -453,6 +453,7 @@ service_link() {
fi
[[ -n $LINK ]] && dokku_log_fail "Already linked as $LINK"
plugn trigger service-action pre-link "$SERVICE" "$APP"
touch "$LINKS_FILE"
echo "$APP" >>"$LINKS_FILE"
sort "$LINKS_FILE" -u -o "$LINKS_FILE"
@@ -465,7 +466,9 @@ service_link() {
dokku docker-options:add "$APP" build,deploy,run "--link $SERVICE_NAME:$SERVICE_DNS_HOSTNAME"
fi
[[ -n "$SERVICE_QUERYSTRING" ]] && SERVICE_URL="${SERVICE_URL}?${SERVICE_QUERYSTRING}"
plugn trigger service-action post-link "$SERVICE" "$APP"
config_set "$APP" "${ALIAS}_URL=$SERVICE_URL"
plugn trigger service-action post-link-complete "$SERVICE" "$APP"
}
service_linked_apps() {
@@ -771,6 +774,7 @@ service_unlink() {
local SERVICE_DNS_HOSTNAME=$(service_dns_hostname "$SERVICE")
local LINK=($(echo "$EXISTING_CONFIG" | grep "$SERVICE_URL" | cut -d: -f1)) || true
plugn trigger service-action pre-unlink "$SERVICE" "$APP"
remove_from_links_file "$SERVICE" "$APP"
if declare -f -F add_passed_docker_option >/dev/null; then
@@ -782,7 +786,9 @@ service_unlink() {
fi
[[ -z ${LINK[*]} ]] && dokku_log_fail "Not linked to app $APP"
plugn trigger service-action post-unlink "$SERVICE" "$APP"
config_unset "$APP" "${LINK[*]}"
plugn trigger service-action post-unlink-complete "$SERVICE" "$APP"
}
service_version() {

6
config
View File

@@ -1,6 +1,7 @@
#!/usr/bin/env bash
export POSTGRES_IMAGE=${POSTGRES_IMAGE:="postgres"}
export POSTGRES_IMAGE_VERSION=${POSTGRES_IMAGE_VERSION:="11.6"}
_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
export POSTGRES_IMAGE=${POSTGRES_IMAGE:="$(awk -F '[ :]' '{print $2}' "${_DIR}/Dockerfile")"}
export POSTGRES_IMAGE_VERSION=${POSTGRES_IMAGE_VERSION:="$(awk -F '[ :]' '{print $3}' "${_DIR}/Dockerfile")"}
export POSTGRES_ROOT=${POSTGRES_ROOT:="$DOKKU_LIB_ROOT/services/postgres"}
export POSTGRES_HOST_ROOT=${POSTGRES_HOST_ROOT:=$POSTGRES_ROOT}
@@ -21,6 +22,7 @@ export PLUGIN_SCHEME="postgres"
export PLUGIN_SERVICE="Postgres"
export PLUGIN_VARIABLE="POSTGRES"
export PLUGIN_BASE_PATH="$PLUGIN_PATH"
export PLUGIN_CONFIG_SUFFIX="data"
if [[ -n $DOKKU_API_VERSION ]]; then
export PLUGIN_BASE_PATH="$PLUGIN_ENABLED_PATH"
fi

View File

@@ -40,6 +40,7 @@ service_create() {
docker pull "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" || dokku_log_fail "$PLUGIN_SERVICE image $PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION pull failed"
fi
plugn trigger service-action pre-create "$SERVICE"
mkdir -p "$SERVICE_ROOT" || dokku_log_fail "Unable to create service directory"
mkdir -p "$SERVICE_ROOT/data" || dokku_log_fail "Unable to create service data directory"
touch "$LINKS_FILE"
@@ -60,7 +61,9 @@ service_create() {
fi
write_database_name "$SERVICE"
plugn trigger service-action post-create "$SERVICE"
service_create_container "$SERVICE"
plugn trigger service-action post-create-complete "$SERVICE"
}
service_create_container() {

View File

@@ -76,10 +76,10 @@ fn-help-contents() {
fn-help-contents-subcommand() {
declare SUBCOMMAND="$1" FULL_OUTPUT="$2"
local TMPDIR=$(mktemp -d)
local UNCLEAN_FILE="${TMPDIR}/cmd-unclean" CLEAN_FILE="${TMPDIR}/cmd-clean"
local HELP_TMPDIR=$(mktemp -d --tmpdir)
local UNCLEAN_FILE="${HELP_TMPDIR}/cmd-unclean" CLEAN_FILE="${HELP_TMPDIR}/cmd-clean"
local BOLD CMD_OUTPUT CYAN EXAMPLE LIGHT_GRAY NORMAL
trap 'rm -rf "$TMPDIR" > /dev/null' RETURN INT TERM EXIT
trap 'rm -rf "$HELP_TMPDIR" > /dev/null' RETURN INT TERM EXIT
rm -rf "$UNCLEAN_FILE" "$CLEAN_FILE"
cat "$SUBCOMMAND_ROOT/$SUBCOMMAND" >"$UNCLEAN_FILE"

View File

@@ -1,4 +1,4 @@
[plugin]
description = "dokku postgres service plugin"
version = "1.11.4"
version = "1.12.0"
[plugin.config]

View File

@@ -41,13 +41,15 @@ service-destroy-cmd() {
fi
dokku_log_info2_quiet "Deleting $SERVICE"
plugn trigger service-action pre-delete "$SERVICE"
service_backup_unschedule "$SERVICE"
service_container_rm "$SERVICE"
dokku_log_verbose_quiet "Removing data"
docker run --rm -v "$SERVICE_HOST_ROOT/data:/data" -v "$SERVICE_HOST_ROOT/config:/config" "$PLUGIN_BUSYBOX_IMAGE" chmod 777 -R /config /data
docker run --rm -v "$SERVICE_HOST_ROOT/data:/data" -v "$SERVICE_HOST_ROOT/$PLUGIN_CONFIG_SUFFIX:/config" "$PLUGIN_BUSYBOX_IMAGE" chmod 777 -R /config /data
rm -rf "$SERVICE_ROOT"
plugn trigger service-action post-delete "$SERVICE"
dokku_log_info2 "$PLUGIN_SERVICE container deleted: $SERVICE"
}

View File

@@ -2,18 +2,18 @@
load test_helper
setup() {
dokku apps:create my_app
dokku apps:create my-app
dokku "$PLUGIN_COMMAND_PREFIX:create" l
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app >&2
dokku "$PLUGIN_COMMAND_PREFIX:link" l my-app >&2
}
teardown() {
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app >&2
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my-app >&2
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
}
@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
dokku --force apps:destroy my-app
[[ -z $(< "$PLUGIN_DATA_ROOT/l/LINKS") ]]
}

View File

@@ -4,13 +4,13 @@ load test_helper
setup() {
dokku "$PLUGIN_COMMAND_PREFIX:create" l
dokku "$PLUGIN_COMMAND_PREFIX:create" m
dokku apps:create my_app
dokku apps:create my-app
}
teardown() {
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" m
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
dokku --force apps:destroy my_app
dokku --force apps:destroy my-app
}
@@ -39,7 +39,7 @@ teardown() {
}
@test "($PLUGIN_COMMAND_PREFIX:link) error when the service does not exist" {
run dokku "$PLUGIN_COMMAND_PREFIX:link" not_existing_service my_app
run dokku "$PLUGIN_COMMAND_PREFIX:link" not_existing_service my-app
echo "output: $output"
echo "status: $status"
assert_contains "${lines[*]}" "service not_existing_service does not exist"
@@ -47,73 +47,73 @@ teardown() {
}
@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
dokku "$PLUGIN_COMMAND_PREFIX:link" l my-app
run dokku "$PLUGIN_COMMAND_PREFIX:link" l my-app
echo "output: $output"
echo "status: $status"
assert_contains "${lines[*]}" "Already linked as DATABASE_URL"
assert_failure
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my-app
}
@test "($PLUGIN_COMMAND_PREFIX:link) exports DATABASE_URL to app" {
run dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app
run dokku "$PLUGIN_COMMAND_PREFIX:link" l my-app
echo "output: $output"
echo "status: $status"
url=$(dokku config:get my_app DATABASE_URL)
url=$(dokku config:get my-app DATABASE_URL)
password="$(sudo cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
assert_contains "$url" "postgres://postgres:$password@dokku-postgres-l:5432/l"
assert_success
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my-app
}
@test "($PLUGIN_COMMAND_PREFIX:link) generates an alternate config url when DATABASE_URL already in use" {
dokku config:set my_app DATABASE_URL=postgres://user:pass@host:5432/db
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app
run dokku config my_app
dokku config:set my-app DATABASE_URL=postgres://user:pass@host:5432/db
dokku "$PLUGIN_COMMAND_PREFIX:link" l my-app
run dokku config my-app
assert_contains "${lines[*]}" "DOKKU_POSTGRES_AQUA_URL"
assert_success
dokku "$PLUGIN_COMMAND_PREFIX:link" m my_app
run dokku config my_app
dokku "$PLUGIN_COMMAND_PREFIX:link" m my-app
run dokku config my-app
assert_contains "${lines[*]}" "DOKKU_POSTGRES_BLACK_URL"
assert_success
dokku "$PLUGIN_COMMAND_PREFIX:unlink" m my_app
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
dokku "$PLUGIN_COMMAND_PREFIX:unlink" m my-app
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:report my_app
dokku "$PLUGIN_COMMAND_PREFIX:link" l my-app
run dokku docker-options:report my-app
assert_contains "${lines[*]}" "--link dokku.postgres.l:dokku-postgres-l"
assert_success
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my-app
}
@test "($PLUGIN_COMMAND_PREFIX:link) uses apps POSTGRES_DATABASE_SCHEME variable" {
dokku config:set my_app POSTGRES_DATABASE_SCHEME=postgres2
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app
url=$(dokku config:get my_app DATABASE_URL)
dokku config:set my-app POSTGRES_DATABASE_SCHEME=postgres2
dokku "$PLUGIN_COMMAND_PREFIX:link" l my-app
url=$(dokku config:get my-app DATABASE_URL)
password="$(sudo cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
assert_contains "$url" "postgres2://postgres:$password@dokku-postgres-l:5432/l"
assert_success
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my-app
}
@test "($PLUGIN_COMMAND_PREFIX:link) adds a querystring" {
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app --querystring "pool=5"
url=$(dokku config:get my_app DATABASE_URL)
dokku "$PLUGIN_COMMAND_PREFIX:link" l my-app --querystring "pool=5"
url=$(dokku config:get my-app DATABASE_URL)
assert_contains "$url" "?pool=5"
assert_success
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my-app
}
@test "($PLUGIN_COMMAND_PREFIX:link) uses a specified config url when alias is specified" {
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app --alias "ALIAS"
url=$(dokku config:get my_app ALIAS_URL)
dokku "$PLUGIN_COMMAND_PREFIX:link" l my-app --alias "ALIAS"
url=$(dokku config:get my-app ALIAS_URL)
password="$(sudo cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
assert_contains "$url" "postgres://postgres:$password@dokku-postgres-l:5432/l"
assert_success
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my-app
}

View File

@@ -3,14 +3,14 @@ load test_helper
setup() {
dokku "$PLUGIN_COMMAND_PREFIX:create" l
dokku apps:create my_app
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app
dokku apps:create my-app
dokku "$PLUGIN_COMMAND_PREFIX:link" l my-app
}
teardown() {
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my-app
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
dokku --force apps:destroy my_app
dokku --force apps:destroy my-app
}
@test "($PLUGIN_COMMAND_PREFIX:promote) error when there are no arguments" {
@@ -29,34 +29,34 @@ teardown() {
}
@test "($PLUGIN_COMMAND_PREFIX:promote) error when the service does not exist" {
run dokku "$PLUGIN_COMMAND_PREFIX:promote" not_existing_service my_app
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
run dokku "$PLUGIN_COMMAND_PREFIX:promote" l my-app
assert_contains "${lines[*]}" "already promoted as DATABASE_URL"
}
@test "($PLUGIN_COMMAND_PREFIX:promote) changes DATABASE_URL" {
password="$(sudo cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
dokku config:set my_app "DATABASE_URL=postgres://u:p@host:5432/db" "DOKKU_POSTGRES_BLUE_URL=postgres://postgres:$password@dokku-postgres-l:5432/l"
dokku "$PLUGIN_COMMAND_PREFIX:promote" l my_app
url=$(dokku config:get my_app DATABASE_URL)
dokku config:set my-app "DATABASE_URL=postgres://u:p@host:5432/db" "DOKKU_POSTGRES_BLUE_URL=postgres://postgres:$password@dokku-postgres-l:5432/l"
dokku "$PLUGIN_COMMAND_PREFIX:promote" l my-app
url=$(dokku config:get my-app DATABASE_URL)
assert_equal "$url" "postgres://postgres:$password@dokku-postgres-l:5432/l"
}
@test "($PLUGIN_COMMAND_PREFIX:promote) creates new config url when needed" {
password="$(sudo cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
dokku config:set my_app "DATABASE_URL=postgres://u:p@host:5432/db" "DOKKU_POSTGRES_BLUE_URL=postgres://postgres:$password@dokku-postgres-l:5432/l"
dokku "$PLUGIN_COMMAND_PREFIX:promote" l my_app
run dokku config my_app
dokku config:set my-app "DATABASE_URL=postgres://u:p@host:5432/db" "DOKKU_POSTGRES_BLUE_URL=postgres://postgres:$password@dokku-postgres-l:5432/l"
dokku "$PLUGIN_COMMAND_PREFIX:promote" l my-app
run dokku config my-app
assert_contains "${lines[*]}" "DOKKU_POSTGRES_"
}
@test "($PLUGIN_COMMAND_PREFIX:promote) uses POSTGRES_DATABASE_SCHEME variable" {
password="$(sudo cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
dokku config:set my_app "POSTGRES_DATABASE_SCHEME=postgres2" "DATABASE_URL=postgres://u:p@host:5432/db" "DOKKU_POSTGRES_BLUE_URL=postgres2://postgres:$password@dokku-postgres-l:5432/l"
dokku "$PLUGIN_COMMAND_PREFIX:promote" l my_app
url=$(dokku config:get my_app DATABASE_URL)
dokku config:set my-app "POSTGRES_DATABASE_SCHEME=postgres2" "DATABASE_URL=postgres://u:p@host:5432/db" "DOKKU_POSTGRES_BLUE_URL=postgres2://postgres:$password@dokku-postgres-l:5432/l"
dokku "$PLUGIN_COMMAND_PREFIX:promote" l my-app
url=$(dokku config:get my-app DATABASE_URL)
assert_contains "$url" "postgres2://postgres:$password@dokku-postgres-l:5432/l"
}

View File

@@ -2,13 +2,13 @@
load test_helper
setup() {
dokku apps:create my_app
dokku apps:create my-app
dokku "$PLUGIN_COMMAND_PREFIX:create" l
}
teardown() {
dokku --force "$PLUGIN_COMMAND_PREFIX:destroy" l
dokku --force apps:destroy my_app
dokku --force apps:destroy my-app
}
@test "($PLUGIN_COMMAND_PREFIX:unlink) error when there are no arguments" {
@@ -27,27 +27,27 @@ teardown() {
}
@test "($PLUGIN_COMMAND_PREFIX:unlink) error when the service does not exist" {
run dokku "$PLUGIN_COMMAND_PREFIX:unlink" not_existing_service my_app
run dokku "$PLUGIN_COMMAND_PREFIX:unlink" not_existing_service my-app
assert_contains "${lines[*]}" "service not_existing_service does not exist"
}
@test "($PLUGIN_COMMAND_PREFIX:unlink) error when service not linked to app" {
run dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
assert_contains "${lines[*]}" "Not linked to app my_app"
run dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my-app
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
dokku "$PLUGIN_COMMAND_PREFIX:link" l my-app >&2
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my-app
check_value="Docker options build: Docker options deploy: --restart=on-failure:10 Docker options run:"
options=$(dokku --quiet docker-options:report my_app | xargs)
options=$(dokku --quiet docker-options:report my-app | xargs)
assert_equal "$options" "$check_value"
}
@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 DATABASE_URL || true)
dokku "$PLUGIN_COMMAND_PREFIX:link" l my-app >&2
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my-app
config=$(dokku config:get my-app DATABASE_URL || true)
assert_equal "$config" ""
}

View File

@@ -19,7 +19,9 @@ echo "Dokku version $DOKKU_VERSION"
export DOKKU_LIB_ROOT="/var/lib/dokku"
export DOKKU_PLUGINS_ROOT="$DOKKU_LIB_ROOT/plugins/available"
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
pushd "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")" >/dev/null
source "config"
popd >/dev/null
sudo rm -rf "$DOKKU_PLUGINS_ROOT/$PLUGIN_COMMAND_PREFIX"
sudo mkdir -p "$DOKKU_PLUGINS_ROOT/$PLUGIN_COMMAND_PREFIX" "$DOKKU_PLUGINS_ROOT/$PLUGIN_COMMAND_PREFIX/subcommands" "$DOKKU_PLUGINS_ROOT/$PLUGIN_COMMAND_PREFIX/scripts"
sudo find ./ -maxdepth 1 -type f -exec cp '{}' "$DOKKU_PLUGINS_ROOT/$PLUGIN_COMMAND_PREFIX" \;