Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3020346caa | ||
|
|
57554f6288 | ||
|
|
f30db928fb | ||
|
|
b15dcbf1c4 | ||
|
|
0cb8bd5f9a | ||
|
|
603a0c6e80 | ||
|
|
ad62febd59 | ||
|
|
7b5ed48a5f | ||
|
|
527b3bc54b | ||
|
|
a66c040cbc | ||
|
|
a2b1fbb737 | ||
|
|
d28412ee32 | ||
|
|
8bb81a3084 | ||
|
|
c897ff488d | ||
|
|
106acfb75b |
@@ -1,4 +1,4 @@
|
||||
Copyright (C) 2015 Jose Diaz-Gonzalez
|
||||
Copyright (C) 2018 Jose Diaz-Gonzalez
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# dokku postgres (beta) [](https://travis-ci.org/dokku/dokku-postgres) [](https://webchat.freenode.net/?channels=dokku)
|
||||
# dokku postgres [](https://travis-ci.org/dokku/dokku-postgres) [](https://webchat.freenode.net/?channels=dokku)
|
||||
|
||||
Official postgres plugin for dokku. Currently defaults to installing [postgres 10.2](https://hub.docker.com/_/postgres/).
|
||||
|
||||
@@ -17,6 +17,7 @@ sudo dokku plugin:install https://github.com/dokku/dokku-postgres.git postgres
|
||||
## commands
|
||||
|
||||
```
|
||||
postgres:app-links <app> List all postgres service links for a given app
|
||||
postgres:backup <name> <bucket> (--use-iam) Create a backup of the postgres service to an existing s3 bucket
|
||||
postgres:backup-auth <name> <aws_access_key_id> <aws_secret_access_key> (<aws_default_region>) (<aws_signature_version>) (<endpoint_url>) Sets up authentication for backups on the postgres service
|
||||
postgres:backup-deauth <name> Removes backup authentication for the postgres service
|
||||
|
||||
@@ -67,6 +67,22 @@ is_container_status() {
|
||||
return 1
|
||||
}
|
||||
|
||||
is_implemented_command() {
|
||||
declare desc="return true if value ($1) is in list (all other arguments)"
|
||||
declare CMD="$1"
|
||||
CMD="$(echo "$CMD" | cut -d ':' -f2)"
|
||||
|
||||
if [[ ${#PLUGIN_UNIMPLEMENTED_SUBCOMMANDS[@]} -eq 0 ]]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
local e
|
||||
for e in "${PLUGIN_UNIMPLEMENTED_SUBCOMMANDS[@]}"; do
|
||||
[[ "$e" == "$CMD" ]] && return 1
|
||||
done
|
||||
return 0
|
||||
}
|
||||
|
||||
remove_from_links_file() {
|
||||
declare desc="Removes an app from the service link file"
|
||||
declare SERVICE="$1" APP="$2"
|
||||
@@ -79,7 +95,7 @@ remove_from_links_file() {
|
||||
sort "$LINKS_FILE" -u -o "$LINKS_FILE"
|
||||
}
|
||||
|
||||
service_alias() {
|
||||
service_dns_hostname() {
|
||||
declare desc="Retrieves the alias of a service"
|
||||
declare SERVICE="$1"
|
||||
local SERVICE_NAME="$(get_service_name "$SERVICE")"
|
||||
@@ -92,9 +108,7 @@ service_alternative_alias() {
|
||||
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]}
|
||||
for COLOR in "${COLORS[@]}"; do
|
||||
ALIAS="${PLUGIN_ALT_ALIAS}_${COLOR}"
|
||||
local IN_USE=$(echo "$EXISTING_CONFIG" | grep "${ALIAS}_URL")
|
||||
if [[ -n $IN_USE ]]; then
|
||||
@@ -104,6 +118,22 @@ service_alternative_alias() {
|
||||
echo "$ALIAS"
|
||||
}
|
||||
|
||||
service_app_links() {
|
||||
declare desc="Outputs all service links for a given app"
|
||||
declare APP="$1"
|
||||
local SERVICE LINKED_APP
|
||||
|
||||
pushd "$PLUGIN_DATA_ROOT" > /dev/null
|
||||
for SERVICE in *; do
|
||||
[[ -f "$SERVICE/LINKS" ]] || continue
|
||||
for LINKED_APP in $(<"$SERVICE/LINKS"); do
|
||||
if [[ "$LINKED_APP" == "$APP" ]] ; then
|
||||
echo "$SERVICE"
|
||||
fi
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
service_backup() {
|
||||
declare desc="Creates a backup of a service to an existing s3 bucket"
|
||||
declare SERVICE="$1" BUCKET_NAME="$2" USE_IAM_OPTIONAL_FLAG="$3"
|
||||
@@ -332,9 +362,22 @@ service_link() {
|
||||
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||
local EXISTING_CONFIG=$(config_all "$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 SERVICE_DNS_HOSTNAME=$(service_dns_hostname "$SERVICE")
|
||||
local LINKS_FILE="$SERVICE_ROOT/LINKS"
|
||||
local ALIAS="$PLUGIN_DEFAULT_ALIAS"
|
||||
local DEFAULT_ALIAS
|
||||
|
||||
if [[ -n "$SERVICE_ALIAS" ]]; then
|
||||
ALIAS="$SERVICE_ALIAS"
|
||||
ALIAS_IN_USE=$(echo "$EXISTING_CONFIG" | grep "${ALIAS}_URL") || true
|
||||
[[ -n "$ALIAS_IN_USE" ]] && dokku_log_fail "Specified alias $ALIAS already in use"
|
||||
else
|
||||
DEFAULT_ALIAS=$(echo "$EXISTING_CONFIG" | grep "${PLUGIN_DEFAULT_ALIAS}_URL") || true
|
||||
if [[ -n "$DEFAULT_ALIAS" ]]; then
|
||||
ALIAS=$(service_alternative_alias "$EXISTING_CONFIG")
|
||||
fi
|
||||
[[ -z "$ALIAS" ]] && dokku_log_fail "Unable to use default or generated URL alias"
|
||||
fi
|
||||
|
||||
[[ -n $LINK ]] && dokku_log_fail "Already linked as $LINK"
|
||||
mkdir -p "$SERVICE_ROOT" || dokku_log_fail "Unable to create service directory"
|
||||
@@ -342,18 +385,14 @@ service_link() {
|
||||
echo "$APP" >> "$LINKS_FILE"
|
||||
sort "$LINKS_FILE" -u -o "$LINKS_FILE"
|
||||
|
||||
local ALIAS="$PLUGIN_DEFAULT_ALIAS"
|
||||
if [[ -n $DEFAULT_ALIAS ]]; then
|
||||
ALIAS=$(service_alternative_alias "$EXISTING_CONFIG")
|
||||
fi
|
||||
|
||||
if declare -f -F add_passed_docker_option > /dev/null; then
|
||||
# shellcheck disable=SC2034
|
||||
local passed_phases=(build deploy run)
|
||||
add_passed_docker_option passed_phases[@] "--link $SERVICE_NAME:$SERVICE_ALIAS"
|
||||
add_passed_docker_option passed_phases[@] "--link $SERVICE_NAME:$SERVICE_DNS_HOSTNAME"
|
||||
else
|
||||
dokku docker-options:add "$APP" build,deploy,run "--link $SERVICE_NAME:$SERVICE_ALIAS"
|
||||
dokku docker-options:add "$APP" build,deploy,run "--link $SERVICE_NAME:$SERVICE_DNS_HOSTNAME"
|
||||
fi
|
||||
[[ -n "$SERVICE_QUERYSTRING" ]] && SERVICE_URL="${SERVICE_URL}?${SERVICE_QUERYSTRING}"
|
||||
config_set "$APP" "${ALIAS}_URL=$SERVICE_URL"
|
||||
}
|
||||
|
||||
@@ -428,7 +467,8 @@ service_parse_args() {
|
||||
OPTIND=1
|
||||
while getopts "a:c:C:d:i:I:m:p:q:r:u:" opt; do
|
||||
case "$opt" in
|
||||
a) export SERVICE_ALIAS=$OPTARG
|
||||
a)
|
||||
SERVICE_ALIAS="${OPTARG^^}"; export SERVICE_ALIAS="${SERVICE_ALIAS%_URL}"
|
||||
;;
|
||||
c) export PLUGIN_CONFIG_OPTIONS=$OPTARG
|
||||
;;
|
||||
@@ -444,7 +484,7 @@ service_parse_args() {
|
||||
;;
|
||||
p) export SERVICE_PASSWORD=$OPTARG
|
||||
;;
|
||||
q) export SERVICE_QUERYSTRING=$OPTARG
|
||||
q) export SERVICE_QUERYSTRING=${OPTARG#"?"}
|
||||
;;
|
||||
r) export SERVICE_ROOT_PASSWORD=$OPTARG
|
||||
;;
|
||||
@@ -598,10 +638,10 @@ service_stop() {
|
||||
[[ -z $ID ]] && dokku_log_warn "Service is already stopped" && return 0
|
||||
|
||||
if [[ -n $ID ]]; then
|
||||
dokku_log_info1_quiet "Stopping container"
|
||||
dokku_log_info2_quiet "Stopping container"
|
||||
docker stop "$SERVICE_NAME" > /dev/null
|
||||
service_port_pause "$SERVICE"
|
||||
dokku_log_info2 "Container stopped"
|
||||
dokku_log_verbose_quiet "Container stopped"
|
||||
else
|
||||
dokku_log_verbose_quiet "No container exists for $SERVICE"
|
||||
fi
|
||||
@@ -614,7 +654,7 @@ service_unlink() {
|
||||
local SERVICE_URL=$(service_url "$SERVICE")
|
||||
local SERVICE_NAME="$(get_service_name "$SERVICE")"
|
||||
local EXISTING_CONFIG=$(config_all "$APP")
|
||||
local SERVICE_ALIAS=$(service_alias "$SERVICE")
|
||||
local SERVICE_DNS_HOSTNAME=$(service_dns_hostname "$SERVICE")
|
||||
local LINK=($(echo "$EXISTING_CONFIG" | grep "$SERVICE_URL" | cut -d: -f1)) || true
|
||||
|
||||
remove_from_links_file "$SERVICE" "$APP"
|
||||
@@ -622,9 +662,9 @@ service_unlink() {
|
||||
if declare -f -F add_passed_docker_option > /dev/null; then
|
||||
# shellcheck disable=SC2034
|
||||
local passed_phases=(build deploy run)
|
||||
remove_passed_docker_option passed_phases[@] "--link $SERVICE_NAME:$SERVICE_ALIAS"
|
||||
remove_passed_docker_option passed_phases[@] "--link $SERVICE_NAME:$SERVICE_DNS_HOSTNAME"
|
||||
else
|
||||
dokku docker-options:remove "$APP" build,deploy,run "--link $SERVICE_NAME:$SERVICE_ALIAS"
|
||||
dokku docker-options:remove "$APP" build,deploy,run "--link $SERVICE_NAME:$SERVICE_DNS_HOSTNAME"
|
||||
fi
|
||||
|
||||
[[ -z ${LINK[*]} ]] && dokku_log_fail "Not linked to app $APP"
|
||||
|
||||
1
config
1
config
@@ -4,6 +4,7 @@ export POSTGRES_IMAGE_VERSION=${POSTGRES_IMAGE_VERSION:="10.2"}
|
||||
export POSTGRES_ROOT=${POSTGRES_ROOT:="/var/lib/dokku/services/postgres"}
|
||||
export POSTGRES_HOST_ROOT=${POSTGRES_HOST_ROOT:=$POSTGRES_ROOT}
|
||||
|
||||
export PLUGIN_UNIMPLEMENTED_SUBCOMMANDS=()
|
||||
export PLUGIN_COMMAND_PREFIX="postgres"
|
||||
export PLUGIN_CONFIG_ROOT=${PLUGIN_CONFIG_ROOT:="$DOKKU_LIB_ROOT/config/$PLUGIN_COMMAND_PREFIX"}
|
||||
export PLUGIN_DATA_ROOT=$POSTGRES_ROOT
|
||||
|
||||
@@ -128,7 +128,7 @@ service_start() {
|
||||
return 0
|
||||
fi
|
||||
|
||||
dokku_log_info1_quiet "Starting container"
|
||||
dokku_log_info2_quiet "Starting container"
|
||||
local PREVIOUS_ID=$(docker ps -f status=exited | grep -e "$SERVICE_NAME$" | awk '{print $1}') || true
|
||||
local IMAGE_EXISTS=$(docker images | grep -e "^$PLUGIN_IMAGE " | grep -q " $PLUGIN_IMAGE_VERSION " && true)
|
||||
local PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")"
|
||||
@@ -150,6 +150,6 @@ service_url() {
|
||||
|
||||
local PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")"
|
||||
local DATABASE_NAME="$(get_database_name "$SERVICE")"
|
||||
local SERVICE_ALIAS="$(service_alias "$SERVICE")"
|
||||
echo "$PLUGIN_SCHEME://postgres:$PASSWORD@$SERVICE_ALIAS:${PLUGIN_DATASTORE_PORTS[0]}/$DATABASE_NAME"
|
||||
local SERVICE_DNS_HOSTNAME="$(service_dns_hostname "$SERVICE")"
|
||||
echo "$PLUGIN_SCHEME://postgres:$PASSWORD@$SERVICE_DNS_HOSTNAME:${PLUGIN_DATASTORE_PORTS[0]}/$DATABASE_NAME"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common-functions"
|
||||
export SUBCOMMAND_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/subcommands"
|
||||
|
||||
fn-help() {
|
||||
@@ -83,7 +84,7 @@ fn-help-contents-subcommand() {
|
||||
cat "$SUBCOMMAND_ROOT/$SUBCOMMAND" > "$UNCLEAN_FILE"
|
||||
|
||||
fn-help-subcommand-sanitize "$UNCLEAN_FILE" "$CLEAN_FILE"
|
||||
if [[ "$(fn-help-is-subcommand-unimplemented "$CLEAN_FILE")" == true ]]; then
|
||||
if ! is_implemented_command "$SUBCOMMAND"; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
@@ -138,18 +139,6 @@ fn-help-contents-subcommand() {
|
||||
return 0
|
||||
}
|
||||
|
||||
fn-help-is-subcommand-unimplemented() {
|
||||
declare FUNC_FILE="$1"
|
||||
local UNIMPLEMENTED
|
||||
|
||||
UNIMPLEMENTED="$(grep "Not yet implemented" "$FUNC_FILE" | head -1 || true)"
|
||||
if [[ -n "$UNIMPLEMENTED" ]]; then
|
||||
echo true
|
||||
else
|
||||
echo false
|
||||
fi
|
||||
}
|
||||
|
||||
fn-help-list-example() {
|
||||
# shellcheck disable=SC2034
|
||||
declare desc="return $PLUGIN_COMMAND_PREFIX plugin help content"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[plugin]
|
||||
description = "dokku postgres service plugin"
|
||||
version = "1.2.5"
|
||||
version = "1.3.0"
|
||||
[plugin.config]
|
||||
|
||||
21
subcommands/app-links
Executable file
21
subcommands/app-links
Executable file
@@ -0,0 +1,21 @@
|
||||
#!/usr/bin/env bash
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
|
||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_BASE_PATH/common/functions"
|
||||
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
|
||||
|
||||
service-app-links-cmd() {
|
||||
#E list all $PLUGIN_COMMAND_PREFIX services that are linked to the 'playground' app.
|
||||
#E dokku $PLUGIN_COMMAND_PREFIX:app-links playground
|
||||
#A app, app to run command against
|
||||
declare desc="list all $PLUGIN_SERVICE service links for a given app"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:app-links" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare APP="$1"
|
||||
APP=${APP:="$DOKKU_APP_NAME"}
|
||||
|
||||
[[ -z "$APP" ]] && dokku_log_fail "Please specify an app to run the command on"
|
||||
verify_app_name "$APP"
|
||||
service_app_links "$APP"
|
||||
}
|
||||
|
||||
service-app-links-cmd "$@"
|
||||
@@ -13,6 +13,7 @@ service-backup-cmd() {
|
||||
declare desc="creates a backup of the $PLUGIN_SERVICE service to an existing s3 bucket"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:backup" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1" BUCKET_NAME="$2" USE_IAM_OPTIONAL_FLAG="$3"
|
||||
is_implemented_command "$cmd" || dokku_log_fail "Not yet implemented"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$BUCKET_NAME" ]] && dokku_log_fail "Please specify an aws bucket for the backup"
|
||||
|
||||
@@ -22,6 +22,7 @@ service-backup-auth-cmd() {
|
||||
declare desc="sets up authentication for backups on the $PLUGIN_SERVICE service"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:backup-auth" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1" AWS_ACCESS_KEY_ID="$2" AWS_SECRET_ACCESS_KEY="$3" AWS_DEFAULT_REGION="$4" AWS_SIGNATURE_VERSION="$5" ENDPOINT_URL="$6"
|
||||
is_implemented_command "$cmd" || dokku_log_fail "Not yet implemented"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$AWS_ACCESS_KEY_ID" ]] && dokku_log_fail "Please specify an aws access key id"
|
||||
|
||||
@@ -11,6 +11,7 @@ service-backup-deauth-cmd() {
|
||||
declare desc="removes backup authentication for the $PLUGIN_SERVICE service"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:backup-deauth" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1"
|
||||
is_implemented_command "$cmd" || dokku_log_fail "Not yet implemented"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
verify_service_name "$SERVICE"
|
||||
|
||||
@@ -17,6 +17,7 @@ service-backup-schedule-cmd() {
|
||||
declare desc="schedules a backup of the $PLUGIN_SERVICE service"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:backup-schedule" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1" SCHEDULE="$2" BUCKET_NAME="$3" USE_IAM_OPTIONAL_FLAG="$4"
|
||||
is_implemented_command "$cmd" || dokku_log_fail "Not yet implemented"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$SCHEDULE" ]] && dokku_log_fail "Please specify a schedule for the backup"
|
||||
|
||||
@@ -12,6 +12,7 @@ service-backup-set-encryption-cmd() {
|
||||
declare desc="sets encryption for all future backups of $PLUGIN_SERVICE service"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:backup-set-encryption" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1" ENCRYPTION_KEY="$2"
|
||||
is_implemented_command "$cmd" || dokku_log_fail "Not yet implemented"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$ENCRYPTION_KEY" ]] && dokku_log_fail "Please specify a GPG encryption key"
|
||||
|
||||
@@ -11,6 +11,7 @@ service-backup-unschedule-cmd() {
|
||||
declare desc="unschedules the backup of the $PLUGIN_SERVICE service"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:backup-unschedule" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1"
|
||||
is_implemented_command "$cmd" || dokku_log_fail "Not yet implemented"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
verify_service_name "$SERVICE"
|
||||
|
||||
@@ -11,6 +11,7 @@ service-backup-unset-encryption-cmd() {
|
||||
declare desc="unsets encryption for future backups of the $PLUGIN_SERVICE service"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:backup-unset-encryption" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1"
|
||||
is_implemented_command "$cmd" || dokku_log_fail "Not yet implemented"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
verify_service_name "$SERVICE"
|
||||
|
||||
@@ -9,21 +9,34 @@ service-clone-cmd() {
|
||||
#E dokku $PLUGIN_COMMAND_PREFIX:clone lolipop lolipop-2
|
||||
#A service, service to run command against
|
||||
#A new-service, name of new service
|
||||
#F -c|--custom-env "USER=alpha;HOST=beta", semi-colon delimited environment variables to start the service with
|
||||
#F -i|--image IMAGE, the image name to start the service with
|
||||
#F -i|--image-version IMAGE_VERSION, the image version to start the service with
|
||||
#F -p|--password PASSWORD, override the user-level service password
|
||||
#F -r|--root-password PASSWORD, override the root-level service password
|
||||
declare desc="create container <new-name> then copy data from <name> into <new-name>"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:clone" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1" NEW_SERVICE="$2" CLONE_FLAGS_LIST="${@:3}"
|
||||
is_implemented_command "$cmd" || dokku_log_fail "Not yet implemented"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$NEW_SERVICE" ]] && dokku_log_fail "Please specify a name for the new service"
|
||||
verify_service_name "$SERVICE"
|
||||
|
||||
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
|
||||
local ID="$(cat "$SERVICE_ROOT/ID")"
|
||||
is_container_status "$ID" "Running" || dokku_log_fail "Service ${SERVICE} container is not running"
|
||||
|
||||
PLUGIN_IMAGE=$(service_version "$SERVICE" | grep -o "^.*:" | sed -r "s/://g")
|
||||
PLUGIN_IMAGE_VERSION=$(service_version "$SERVICE" | grep -o ":.*$" | sed -r "s/://g")
|
||||
|
||||
service_parse_args "${@:3}"
|
||||
|
||||
dokku_log_info2 "Cloning $SERVICE to $NEW_SERVICE @ $PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION"
|
||||
service_create "$NEW_SERVICE" "${@:3}"
|
||||
dokku_log_info1 "Copying data from $SERVICE to $NEW_SERVICE"
|
||||
service_export "$SERVICE" | service_import "$NEW_SERVICE" > /dev/null 2>&1 || true
|
||||
dokku_log_info1 "Done"
|
||||
dokku_log_info2 "Done"
|
||||
}
|
||||
|
||||
service-clone-cmd "$@"
|
||||
|
||||
@@ -8,9 +8,10 @@ service-connect-cmd() {
|
||||
#E connect to the service via the $PLUGIN_COMMAND_PREFIX connection tool
|
||||
#E dokku $PLUGIN_COMMAND_PREFIX:connect lolipop
|
||||
#A service, service to run command against
|
||||
declare desc="connect via psql to a $PLUGIN_SERVICE service"
|
||||
declare desc="connect to the service via the $PLUGIN_COMMAND_PREFIX connection tool"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:connect" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1"
|
||||
is_implemented_command "$cmd" || dokku_log_fail "Not yet implemented"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
verify_service_name "$SERVICE"
|
||||
|
||||
@@ -37,7 +37,7 @@ service-destroy-cmd() {
|
||||
fi
|
||||
fi
|
||||
|
||||
dokku_log_info1 "Deleting $SERVICE"
|
||||
dokku_log_info2_quiet "Deleting $SERVICE"
|
||||
if [[ -n $(docker ps -aq -f name="$SERVICE_NAME") ]]; then
|
||||
dokku_log_verbose_quiet "Deleting container data"
|
||||
service_stop "$SERVICE"
|
||||
@@ -51,7 +51,7 @@ service-destroy-cmd() {
|
||||
fi
|
||||
|
||||
dokku_log_verbose_quiet "Removing data"
|
||||
docker run --rm -v "$SERVICE_HOST_ROOT/data:/data" -v "$SERVICE_HOST_ROOT/config:/config" "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" chmod 777 -R /config /data
|
||||
docker run --rm -v "$SERVICE_HOST_ROOT/data:/data" -v "$SERVICE_HOST_ROOT/config:/config" busybox chmod 777 -R /config /data
|
||||
rm -rf "$SERVICE_ROOT"
|
||||
|
||||
dokku_log_info2 "$PLUGIN_SERVICE container deleted: $SERVICE"
|
||||
|
||||
@@ -13,6 +13,7 @@ service-export-cmd() {
|
||||
declare desc="export a dump of the $PLUGIN_SERVICE service database"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:export" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1"
|
||||
is_implemented_command "$cmd" || dokku_log_fail "Not yet implemented"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
verify_service_name "$SERVICE"
|
||||
|
||||
@@ -11,6 +11,7 @@ service-import-cmd() {
|
||||
declare desc="import a dump into the $PLUGIN_SERVICE service database"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:import" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1"
|
||||
is_implemented_command "$cmd" || dokku_log_fail "Not yet implemented"
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
verify_service_name "$SERVICE"
|
||||
|
||||
@@ -39,15 +39,19 @@ service-link-cmd() {
|
||||
#E ${PLUGIN_SCHEME}2://lolipop:SOME_PASSWORD@dokku-${PLUGIN_COMMAND_PREFIX}-lolipop:${PLUGIN_DATASTORE_PORTS[0]}/lolipop
|
||||
#A service, service to run command against
|
||||
#A app, app to run command against
|
||||
#F -a|--alias "BLUE_DATABASE", an alternative alias to use for linking to an app via environment variable
|
||||
#F -q|--querystring "pool=5", ampersand delimited querystring arguments to append to the service link
|
||||
declare desc="link the $PLUGIN_SERVICE service to the app"
|
||||
local cmd="$PLUGIN_COMMAND_PREFIX:link" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
|
||||
declare SERVICE="$1" APP="$2"
|
||||
declare SERVICE="$1" APP="$2" LINK_FLAGS_LIST="${@:3}"
|
||||
APP=${APP:="$DOKKU_APP_NAME"}
|
||||
|
||||
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
|
||||
[[ -z "$APP" ]] && dokku_log_fail "Please specify an app to run the command on"
|
||||
verify_app_name "$APP"
|
||||
verify_service_name "$SERVICE"
|
||||
|
||||
service_parse_args "${@:3}"
|
||||
service_link "$SERVICE" "$APP"
|
||||
}
|
||||
|
||||
|
||||
@@ -68,3 +68,18 @@ teardown() {
|
||||
assert_contains "$url" "postgres2://postgres:$password@dokku-postgres-l:5432/l"
|
||||
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)
|
||||
assert_contains "$url" "?pool=5"
|
||||
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)
|
||||
password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
|
||||
assert_contains "$url" "postgres://postgres:$password@dokku-postgres-l:5432/l"
|
||||
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
|
||||
}
|
||||
|
||||
@@ -24,11 +24,11 @@ teardown() {
|
||||
@test "($PLUGIN_COMMAND_PREFIX:logs) success when not tailing" {
|
||||
export ECHO_DOCKER_COMMAND="true"
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:logs" l
|
||||
assert_output "docker logs --tail 100 testid"
|
||||
assert_contains "docker logs --tail 100 testid"
|
||||
}
|
||||
|
||||
@test "($PLUGIN_COMMAND_PREFIX:logs) success when tailing" {
|
||||
export ECHO_DOCKER_COMMAND="true"
|
||||
run dokku "$PLUGIN_COMMAND_PREFIX:logs" l -t
|
||||
assert_output "docker logs --follow testid"
|
||||
assert_contains "docker logs --follow testid"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user