Compare commits

...

31 Commits

Author SHA1 Message Date
Jose Diaz-Gonzalez
c94658ea09 Release 1.4.12 2018-12-02 16:18:02 -05:00
Jose Diaz-Gonzalez
6ed6db2b3f fix: correct issues where docker ps is truncated
This should actually be refactored to avoid the grep call completely, but the current fix will correct the issue for now.

Refs dokku/dokku-postgres#131
2018-12-02 05:21:10 -05:00
Jose Diaz-Gonzalez
354309feec Merge pull request #154 from janis-vitols/bug/ps/grep/binary
Fix `No such container: Binary`
2018-12-02 05:14:36 -05:00
Jose Diaz-Gonzalez
26a1948e50 Update functions 2018-12-02 05:13:34 -05:00
Jose Diaz-Gonzalez
28a8a0f84e fix: ensure any backup cron files are deleted when the service is destroyed
Closes dokku/dokku-redis#118
2018-12-02 05:10:07 -05:00
Jose Diaz-Gonzalez
11435f7452 Merge branch 'master' into bug/ps/grep/binary 2018-12-02 04:57:41 -05:00
Jose Diaz-Gonzalez
f2a802819f Merge pull request #159 from johnspade/master
fix: remove dokkupaas/s3backup container after backup
2018-12-02 04:44:05 -05:00
Jose Diaz-Gonzalez
1465f6f3ca fix: correct documentation around the passphrase parameter
Closes dokku/dokku-mysql#101
2018-12-02 04:33:58 -05:00
ilopatin
c276507d3b fix: remove dokkupaas/s3backup container after backup 2018-10-18 11:30:47 +03:00
Jose Diaz-Gonzalez
98edfb9bb2 Release 1.4.11 2018-10-11 14:53:21 -04:00
Jose Diaz-Gonzalez
c32f4e92a1 fix: correct issue where help output isnt colorized by default 2018-10-11 14:20:03 -04:00
Jose Diaz-Gonzalez
1542a9556f fix: correct issues in upgrade and fix tests 2018-10-11 14:16:47 -04:00
Jose Diaz-Gonzalez
4948e2b91d Release 1.4.10 2018-10-11 00:05:32 -04:00
Jose Diaz-Gonzalez
621e018999 feat: skip upgrade if service is already up to date 2018-10-11 00:04:52 -04:00
Jose Diaz-Gonzalez
3641c2dc76 Release 1.4.9 2018-10-10 23:54:46 -04:00
Jose Diaz-Gonzalez
86a032a32f feat: allow removal of header from :list subcommand 2018-10-10 23:54:08 -04:00
Jose Diaz-Gonzalez
b68ae2d0bd Release 1.4.8 2018-10-10 23:48:52 -04:00
Jose Diaz-Gonzalez
30b033ee9d fix: respect various ways of not wanting 'fancy' output.
Closes dokku/dokku-daemon#19
Closes dokku/dokku-daemon#22
2018-10-10 23:47:46 -04:00
Jose Diaz-Gonzalez
9fac5a4ad4 Release 1.4.7 2018-10-10 23:32:33 -04:00
Jose Diaz-Gonzalez
73a8ccc085 fix: ensure flags are properly represented in help output 2018-10-10 23:31:52 -04:00
Jose Diaz-Gonzalez
c05aa74a3e Release 1.4.6 2018-10-10 23:27:36 -04:00
Jose Diaz-Gonzalez
d112144293 fix: correct issue where temp help output files were being placed in incorrect directory 2018-10-10 23:23:10 -04:00
Jose Diaz-Gonzalez
30de0727ab Release 1.4.5 2018-10-10 23:18:41 -04:00
Jose Diaz-Gonzalez
8823baf480 feat: add support for restarting containers to ensure links continue to work properly when the application has resolved dns of the link 2018-10-10 23:14:45 -04:00
Jose Diaz-Gonzalez
d470ade7a7 fix: handle case where container being removed does not exist 2018-10-10 22:03:44 -04:00
Jose Diaz-Gonzalez
66e8279dca Release 1.4.4 2018-10-10 09:40:45 -04:00
Jose Diaz-Gonzalez
969a9cdcb0 Release 1.4.3 2018-10-10 09:40:27 -04:00
Jose Diaz-Gonzalez
5620147f89 Merge pull request #145 from dpoirier/use_if_exists_with_import
Use --if-exists with import
2018-10-10 09:20:54 -04:00
Jānis Vītols
e6810fa7e0 Fix No such container: Binary problem
Ignore `docker ps` truncation. Looks like in new Docker version
(in my case Docker version 18.06.0-ce, build 0ffa825) long commands are truncated
and sometimes can return/contain binary output (truncation `...` symbols are binary).
Because of such output `grep -e` fails to find container.

Workaround was to use `--no-trunc` for `docker ps` command.
2018-08-28 10:29:12 +03:00
Dan Poirier
d143bb48b0 Update test to expect --if-exists on import 2018-04-30 14:29:30 -04:00
Jose Diaz-Gonzalez
e78cc9bd36 Use --if-exists with import
To resolve https://github.com/dokku/dokku-postgres/issues/142
2018-04-30 13:55:58 -04:00
10 changed files with 112 additions and 59 deletions

View File

@@ -23,7 +23,7 @@ postgres:backup-auth <name> <aws_access_key_id> <aws_secret_access_key> (<aws_de
postgres:backup-deauth <name> Removes backup authentication for the postgres service postgres:backup-deauth <name> Removes backup authentication for the postgres service
postgres:backup-schedule <name> <schedule> <bucket> Schedules a backup of the postgres service postgres:backup-schedule <name> <schedule> <bucket> Schedules a backup of the postgres service
postgres:backup-schedule-cat <name> Show the backup schedule for the service postgres:backup-schedule-cat <name> Show the backup schedule for the service
postgres:backup-set-encryption <name> <encryption_key> Sets up GPG encryption for future backups of the postgres service postgres:backup-set-encryption <name> <passphrase> Set a GPG passphrase for backups
postgres:backup-unschedule <name> Unschedules the backup of the postgres service postgres:backup-unschedule <name> Unschedules the backup of the postgres service
postgres:backup-unset-encryption <name> Removes backup encryption for future backups of the postgres service postgres:backup-unset-encryption <name> Removes backup encryption for future backups of the postgres service
postgres:clone <name> <new-name> Create container <new-name> then copy data from <name> into <new-name> postgres:clone <name> <new-name> Create container <new-name> then copy data from <name> into <new-name>

View File

@@ -183,7 +183,7 @@ service_backup() {
fi fi
# shellcheck disable=SC2086 # shellcheck disable=SC2086
docker run $BACKUP_PARAMETERS dokkupaas/s3backup:0.8.0 docker run --rm $BACKUP_PARAMETERS dokkupaas/s3backup:0.8.0
} }
service_backup_auth() { service_backup_auth() {
@@ -279,9 +279,13 @@ service_container_rm() {
local SERVICE_NAME="$(get_service_name "$SERVICE")" local SERVICE_NAME="$(get_service_name "$SERVICE")"
service_stop "$SERVICE" service_stop "$SERVICE"
local ID=$(docker inspect "$SERVICE_NAME" -f '{{ .ID }}' 2> /dev/null || true)
[[ -z "$ID" ]] && return 0
dokku_log_verbose_quiet "Removing container" dokku_log_verbose_quiet "Removing container"
docker update --restart=no "$SERVICE_NAME" > /dev/null 2>&1
if ! docker rm "$SERVICE_NAME" > /dev/null 2>&1; then if ! docker rm "$SERVICE_NAME" > /dev/null 2>&1; then
dokku_log_fail "Unable to remove container for service $SERVICE" dokku_log_fail "Unable to remove container for service $SERVICE"
fi fi
} }
@@ -437,7 +441,11 @@ service_list() {
if [[ -z $SERVICES ]]; then if [[ -z $SERVICES ]]; then
dokku_log_warn "There are no $PLUGIN_SERVICE services" dokku_log_warn "There are no $PLUGIN_SERVICE services"
else else
LIST="NAME,VERSION,STATUS,EXPOSED PORTS,LINKS\n" LIST=""
if [[ -z "$DOKKU_QUIET_OUTPUT" ]]; then
LIST="NAME,VERSION,STATUS,EXPOSED PORTS,LINKS\n"
fi
for SERVICE in $SERVICES; do for SERVICE in $SERVICES; do
LIST+="$SERVICE,$(service_version "$SERVICE"),$(service_status "$SERVICE"),$(service_exposed_ports "$SERVICE"),$(service_linked_apps "$SERVICE")\n" LIST+="$SERVICE,$(service_version "$SERVICE"),$(service_status "$SERVICE"),$(service_exposed_ports "$SERVICE"),$(service_linked_apps "$SERVICE")\n"
done done
@@ -471,24 +479,24 @@ service_parse_args() {
for arg in "$@"; do for arg in "$@"; do
shift shift
case "$arg" in case "$arg" in
"--config-options") set -- "$@" "-c" ;; "--alias") set -- "$@" "-a" ;;
"--custom-env") set -- "$@" "-C" ;; "--config-options") set -- "$@" "-c" ;;
"--image") set -- "$@" "-i" ;; "--custom-env") set -- "$@" "-C" ;;
"--image-version") set -- "$@" "-I" ;; "--database") set -- "$@" "-d" ;;
"--password") set -- "$@" "-p" ;; "--image-version") set -- "$@" "-I" ;;
"--root-password") set -- "$@" "-r" ;; "--image") set -- "$@" "-i" ;;
"--memory") set -- "$@" "-m" ;;
"--alias") set -- "$@" "-a" ;; "--password") set -- "$@" "-p" ;;
"--database") set -- "$@" "-d" ;; "--querystring") set -- "$@" "-q" ;;
"--memory") set -- "$@" "-m" ;; "--restart-apps") set -- "$@" "-R" ;;
"--querystring") set -- "$@" "-q" ;; "--root-password") set -- "$@" "-r" ;;
"--user") set -- "$@" "-u" ;; "--user") set -- "$@" "-u" ;;
*) set -- "$@" "$arg" *) set -- "$@" "$arg"
esac esac
done done
OPTIND=1 OPTIND=1
while getopts "a:c:C:d:i:I:m:p:q:r:u:" opt; do while getopts "a:c:C:d:i:I:m:p:q:R:r:u:" opt; do
case "$opt" in case "$opt" in
a) a)
SERVICE_ALIAS="${OPTARG^^}"; export SERVICE_ALIAS="${SERVICE_ALIAS%_URL}" SERVICE_ALIAS="${OPTARG^^}"; export SERVICE_ALIAS="${SERVICE_ALIAS%_URL}"
@@ -509,6 +517,8 @@ service_parse_args() {
;; ;;
q) export SERVICE_QUERYSTRING=${OPTARG#"?"} q) export SERVICE_QUERYSTRING=${OPTARG#"?"}
;; ;;
R) export SERVICE_RESTART_APPS=$OPTARG
;;
r) export SERVICE_ROOT_PASSWORD=$OPTARG r) export SERVICE_ROOT_PASSWORD=$OPTARG
;; ;;
u) export SERVICE_USER=$OPTARG u) export SERVICE_USER=$OPTARG
@@ -657,7 +667,7 @@ service_stop() {
declare SERVICE="$1" declare SERVICE="$1"
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"; local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE";
local SERVICE_NAME="$(get_service_name "$SERVICE")" local SERVICE_NAME="$(get_service_name "$SERVICE")"
local ID=$(docker ps -f status=running | grep -e "$SERVICE_NAME$" | awk '{print $1}') || true local ID=$(docker ps -f status=running --no-trunc | grep -e "$SERVICE_NAME$" | awk '{print $1}') || true
[[ -z $ID ]] && dokku_log_warn "Service is already stopped" && return 0 [[ -z $ID ]] && dokku_log_warn "Service is already stopped" && return 0
if [[ -n $ID ]]; then if [[ -n $ID ]]; then

View File

@@ -81,7 +81,7 @@ service_create_container() {
service_stop "$SERVICE" > /dev/null service_stop "$SERVICE" > /dev/null
docker run --rm -i -v "$SERVICE_HOST_ROOT/data:/var/lib/postgresql/data" "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" bash -s < "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/scripts/enable_ssl.sh" &> /dev/null docker run --rm -i -v "$SERVICE_HOST_ROOT/data:/var/lib/postgresql/data" "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" bash -s < "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/scripts/enable_ssl.sh" &> /dev/null
PREVIOUS_ID=$(docker ps -f status=exited | grep -e "$SERVICE_NAME$" | awk '{print $1}') || true PREVIOUS_ID=$(docker ps -f status=exited --no-trunc | grep -e "$SERVICE_NAME$" | awk '{print $1}') || true
docker start "$PREVIOUS_ID" > /dev/null docker start "$PREVIOUS_ID" > /dev/null
service_port_unpause "$SERVICE" service_port_unpause "$SERVICE"
@@ -114,7 +114,7 @@ service_import() {
if [[ -t 0 ]]; then if [[ -t 0 ]]; then
dokku_log_fail "No data provided on stdin." dokku_log_fail "No data provided on stdin."
fi fi
docker exec -i "$SERVICE_NAME" env PGPASSWORD="$PASSWORD" pg_restore -h localhost -cO -d "$DATABASE_NAME" -U postgres -w docker exec -i "$SERVICE_NAME" env PGPASSWORD="$PASSWORD" pg_restore -h localhost -cO --if-exists -d "$DATABASE_NAME" -U postgres -w
} }
service_start() { service_start() {
@@ -122,14 +122,14 @@ service_start() {
local QUIET="$2" local QUIET="$2"
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE" local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
local SERVICE_NAME="$(get_service_name "$SERVICE")" local SERVICE_NAME="$(get_service_name "$SERVICE")"
local ID=$(docker ps -f status=running | grep -e "$SERVICE_NAME$" | awk '{print $1}') || true local ID=$(docker ps -f status=running --no-trunc | grep -e "$SERVICE_NAME$" | awk '{print $1}') || true
if [[ -n $ID ]]; then if [[ -n $ID ]]; then
[[ -z $QUIET ]] && dokku_log_warn "Service is already started" [[ -z $QUIET ]] && dokku_log_warn "Service is already started"
return 0 return 0
fi fi
dokku_log_info2_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 PREVIOUS_ID=$(docker ps -f status=exited --no-trunc | grep -e "$SERVICE_NAME$" | awk '{print $1}') || true
local PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")" local PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")"
if [[ -n $PREVIOUS_ID ]]; then if [[ -n $PREVIOUS_ID ]]; then

View File

@@ -28,14 +28,14 @@ fn-help() {
fn-help-all() { fn-help-all() {
declare CMD="$1" SUBCOMMAND="$2" declare CMD="$1" SUBCOMMAND="$2"
local CMD_OUTPUT BLUE BOLD FULL_OUTPUT NORMAL local CMD_OUTPUT BLUE BOLD FULL_OUTPUT NORMAL
FULL_OUTPUT=true FULL_OUTPUT=true
if [[ "$CMD" = "$PLUGIN_COMMAND_PREFIX:help" ]] || [[ "$CMD" == "$PLUGIN_COMMAND_PREFIX" ]] || [[ "$CMD" == "$PLUGIN_COMMAND_PREFIX:default" ]] ; then if [[ "$CMD" = "$PLUGIN_COMMAND_PREFIX:help" ]] || [[ "$CMD" == "$PLUGIN_COMMAND_PREFIX" ]] || [[ "$CMD" == "$PLUGIN_COMMAND_PREFIX:default" ]] ; then
BOLD="$(tput bold)" BOLD="$(fn-help-fancy-tput bold)"
NORMAL="\033[m" NORMAL="$(fn-help-fancy-color "\033[m")"
BLUE="\033[0;34m" BLUE="$(fn-help-fancy-color "\033[0;34m")"
CYAN="\033[1;36m" CYAN="$(fn-help-fancy-color "\033[1;36m")"
if [[ -n "$SUBCOMMAND" ]] && [[ "$SUBCOMMAND" != "--all" ]]; then if [[ -n "$SUBCOMMAND" ]] && [[ "$SUBCOMMAND" != "--all" ]]; then
fn-help-contents-subcommand "$SUBCOMMAND" "$FULL_OUTPUT" fn-help-contents-subcommand "$SUBCOMMAND" "$FULL_OUTPUT"
return "$?" return "$?"
@@ -76,7 +76,7 @@ fn-help-contents() {
fn-help-contents-subcommand() { fn-help-contents-subcommand() {
declare SUBCOMMAND="$1" FULL_OUTPUT="$2" declare SUBCOMMAND="$1" FULL_OUTPUT="$2"
local TMPDIR=$(mktemp -d) local TMPDIR=$(mktemp -d)
local UNCLEAN_FILE="${TMPDIR}cmd-unclean" CLEAN_FILE="${TMPDIR}cmd-clean" local UNCLEAN_FILE="${TMPDIR}/cmd-unclean" CLEAN_FILE="${TMPDIR}/cmd-clean"
local BOLD CMD_OUTPUT CYAN EXAMPLE LIGHT_GRAY NORMAL local BOLD CMD_OUTPUT CYAN EXAMPLE LIGHT_GRAY NORMAL
trap 'rm -rf "$TMPDIR" > /dev/null' RETURN INT TERM EXIT trap 'rm -rf "$TMPDIR" > /dev/null' RETURN INT TERM EXIT
@@ -95,12 +95,12 @@ fn-help-contents-subcommand() {
desc="$(grep desc "$CLEAN_FILE" | head -1)" desc="$(grep desc "$CLEAN_FILE" | head -1)"
eval "$desc" eval "$desc"
BLUE="\033[0;34m" BLUE="$(fn-help-fancy-color "\033[0;34m")"
BOLD="$(tput bold)" BOLD="$(fn-help-fancy-tput bold)"
CYAN="\033[1;36m" CYAN="$(fn-help-fancy-color "\033[1;36m")"
NORMAL="\033[m" NORMAL="$(fn-help-fancy-color "\033[m")"
LIGHT_GRAY="\033[2;37m" LIGHT_GRAY="$(fn-help-fancy-color "\033[2;37m")"
LIGHT_RED="\033[1;31m" LIGHT_RED="$(fn-help-fancy-color "\033[1;31m")"
CMD_OUTPUT="$(echo -e " ${PLUGIN_COMMAND_PREFIX}${cmd_line}, ${LIGHT_GRAY}${desc}${NORMAL}")" CMD_OUTPUT="$(echo -e " ${PLUGIN_COMMAND_PREFIX}${cmd_line}, ${LIGHT_GRAY}${desc}${NORMAL}")"
if [[ "$FULL_OUTPUT" != "true" ]]; then if [[ "$FULL_OUTPUT" != "true" ]]; then
echo "$CMD_OUTPUT" echo "$CMD_OUTPUT"
@@ -139,6 +139,26 @@ fn-help-contents-subcommand() {
return 0 return 0
} }
fn-help-fancy-tput() {
declare desc="A wrapper around tput"
if [[ -n "$DOKKU_NO_COLOR" ]] || [[ "$TERM" = "unknown" ]] || [[ "$TERM" == "dumb" ]]; then
return
fi
tput "$@"
}
fn-help-fancy-color() {
declare desc="A wrapper around colors"
if [[ -n "$DOKKU_NO_COLOR" ]] || [[ "$TERM" = "unknown" ]] || [[ "$TERM" == "dumb" ]]; then
return
fi
echo "$@"
}
fn-help-list-example() { fn-help-list-example() {
# shellcheck disable=SC2034 # shellcheck disable=SC2034
declare desc="return $PLUGIN_COMMAND_PREFIX plugin help content" declare desc="return $PLUGIN_COMMAND_PREFIX plugin help content"
@@ -153,8 +173,8 @@ fn-help-subcommand-args() {
local argline arglist args argpos BLUE NORMAL local argline arglist args argpos BLUE NORMAL
if [[ "$FULL_OUTPUT" == "true" ]]; then if [[ "$FULL_OUTPUT" == "true" ]]; then
BLUE="\033[0;34m" BLUE="$(fn-help-fancy-color "\033[0;34m")"
NORMAL="\033[m" NORMAL="$(fn-help-fancy-color "\033[m")"
fi fi
argline=$(grep declare "$FUNC_FILE" | grep -v "declare desc" | head -1 || true) argline=$(grep declare "$FUNC_FILE" | grep -v "declare desc" | head -1 || true)
arglist=($(echo -e "${argline// /"\n"}" | awk -F= '/=/{print ""$1""}')) arglist=($(echo -e "${argline// /"\n"}" | awk -F= '/=/{print ""$1""}'))
@@ -199,12 +219,12 @@ fn-help-subcommand-example() {
return 0 return 0
fi fi
BOLD="$(tput bold)" BOLD="$(fn-help-fancy-tput bold)"
LAST_LINE="" LAST_LINE=""
LIGHT_GRAY="\033[2;37m" LIGHT_GRAY="$(fn-help-fancy-color "\033[2;37m")"
OTHER_GRAY="\033[7;37m" OTHER_GRAY="$(fn-help-fancy-color "\033[7;37m")"
NEWLINE="" NEWLINE=""
NORMAL="\033[m" NORMAL="$(fn-help-fancy-color "\033[m")"
_fn-help-apply-shell-expansion "$EXAMPLE" | while read -r line; do _fn-help-apply-shell-expansion "$EXAMPLE" | while read -r line; do
line="$(echo "$line" | cut -c 4-)" line="$(echo "$line" | cut -c 4-)"
if [[ "$line" == export* ]] || [[ "$line" == dokku* ]]; then if [[ "$line" == export* ]] || [[ "$line" == dokku* ]]; then
@@ -234,10 +254,10 @@ fn-help-subcommand-list-args() {
return 0 return 0
fi fi
NORMAL="\033[m" NORMAL="$(fn-help-fancy-color "\033[m")"
LIGHT_GRAY="\033[2;37m" LIGHT_GRAY="$(fn-help-fancy-color "\033[2;37m")"
_fn-help-apply-shell-expansion "$FLAGS" | while read -r line; do _fn-help-apply-shell-expansion "$FLAGS" | while read -r line; do
echo -e "$(echo "$line" | cut -d',' -f1),${LIGHT_GRAY}$(echo "$line" | cut -d',' -f2-)${NORMAL}" echo -e "$(echo "$line" | cut -d',' -f1),${LIGHT_GRAY}$(echo "$line" | cut -d',' -f2-)${NORMAL}"
done done
} }
@@ -251,10 +271,10 @@ fn-help-subcommand-list-flags() {
return 0 return 0
fi fi
NORMAL="\033[m" NORMAL="$(fn-help-fancy-color "\033[m")"
LIGHT_GRAY="\033[2;37m" LIGHT_GRAY="$(fn-help-fancy-color "\033[2;37m")"
_fn-help-apply-shell-expansion "$FLAGS" | while read -r line; do _fn-help-apply-shell-expansion "$FLAGS" | while read -r line; do
echo -e "$(echo "$line" | cut -d',' -f1),${LIGHT_GRAY}$(echo "$line" | cut -d',' -f2-)${NORMAL}" echo -e "$(echo "$line" | cut -d',' -f1),${LIGHT_GRAY}$(echo "$line" | cut -d',' -f2-)${NORMAL}"
done done
} }

View File

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

View File

@@ -5,19 +5,19 @@ source "$PLUGIN_BASE_PATH/common/functions"
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions" source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
service-backup-set-encryption-cmd() { service-backup-set-encryption-cmd() {
#E set a GPG encryption key for backups #E set a GPG passphrase for backups
#E dokku $PLUGIN_COMMAND_PREFIX:backup-set-encryption lolipop #E dokku $PLUGIN_COMMAND_PREFIX:backup-set-encryption lolipop
#A service, service to run command against #A service, service to run command against
#A encryption-key, a GPG encryption key #A passphrase, a GPG-compatible passphrase
declare desc="sets encryption for all future backups of $PLUGIN_SERVICE service" 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 local cmd="$PLUGIN_COMMAND_PREFIX:backup-set-encryption" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
declare SERVICE="$1" ENCRYPTION_KEY="$2" declare SERVICE="$1" PASSPHRASE="$2"
is_implemented_command "$cmd" || dokku_log_fail "Not yet implemented" is_implemented_command "$cmd" || dokku_log_fail "Not yet implemented"
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service" [[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
[[ -z "$ENCRYPTION_KEY" ]] && dokku_log_fail "Please specify a GPG encryption key" [[ -z "$PASSPHRASE" ]] && dokku_log_fail "Please specify a GPG backup passphrase"
verify_service_name "$SERVICE" verify_service_name "$SERVICE"
service_backup_set_encryption "$SERVICE" "$ENCRYPTION_KEY" service_backup_set_encryption "$SERVICE" "$PASSPHRASE"
} }
service-backup-set-encryption-cmd "$@" service-backup-set-encryption-cmd "$@"

View File

@@ -38,6 +38,7 @@ service-destroy-cmd() {
fi fi
dokku_log_info2_quiet "Deleting $SERVICE" dokku_log_info2_quiet "Deleting $SERVICE"
service_backup_unschedule "$SERVICE"
if [[ -n $(docker ps -aq -f name="$SERVICE_NAME") ]]; then if [[ -n $(docker ps -aq -f name="$SERVICE_NAME") ]]; then
dokku_log_verbose_quiet "Deleting container data" dokku_log_verbose_quiet "Deleting container data"
service_stop "$SERVICE" service_stop "$SERVICE"

View File

@@ -3,6 +3,7 @@ source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config"
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_BASE_PATH/common/functions" source "$PLUGIN_BASE_PATH/common/functions"
source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions" source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions"
source "$PLUGIN_AVAILABLE_PATH/ps/functions"
service-upgrade-cmd() { service-upgrade-cmd() {
#E you can upgrade an existing service to a new image or image-version #E you can upgrade an existing service to a new image or image-version
@@ -11,16 +12,15 @@ service-upgrade-cmd() {
#F -C|--custom-env "USER=alpha;HOST=beta", semi-colon delimited environment variables to start the service with #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 IMAGE, the image name to start the service with
#F -I|--image-version IMAGE_VERSION, the image version to start the service with #F -I|--image-version IMAGE_VERSION, the image version to start the service with
#F -R|--restart-apps "true", whether to force an app restart
declare desc="upgrade service <service> to the specified versions" declare desc="upgrade service <service> to the specified versions"
local cmd="$PLUGIN_COMMAND_PREFIX:upgrade" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1 local cmd="$PLUGIN_COMMAND_PREFIX:upgrade" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1
declare SERVICE="$1" UPGRADE_FLAG_LIST="${@:2}" declare SERVICE="$1" UPGRADE_FLAGS_LIST="${@:2}"
[[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service" [[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service"
verify_service_name "$SERVICE" verify_service_name "$SERVICE"
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$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"
service_parse_args "${@:2}" service_parse_args "${@:2}"
@@ -28,10 +28,33 @@ service-upgrade-cmd() {
dokku_log_fail "Unable to proceed with upgrade, image ${PLUGIN_IMAGE}:${PLUGIN_IMAGE_VERSION} does not exist" dokku_log_fail "Unable to proceed with upgrade, image ${PLUGIN_IMAGE}:${PLUGIN_IMAGE_VERSION} does not exist"
fi fi
dokku_log_info2 "Upgrading $SERVICE to $PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" local NEW_PLUGIN_IMAGE_TAG="$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION"
if [[ "$(service_version "$SERVICE")" == "$NEW_PLUGIN_IMAGE_TAG" ]]; then
dokku_log_info1 "Service $SERVICE already running $NEW_PLUGIN_IMAGE_TAG"
return
fi
dokku_log_info2 "Upgrading $SERVICE to $NEW_PLUGIN_IMAGE_TAG"
if [[ "$SERVICE_RESTART_APPS" == "true" ]]; then
dokku_log_info2 "Stopping all linked services"
for app in $(service_linked_apps "$SERVICE"); do
[[ "$app" == "-" ]] && continue
ps_stop "$app"
done
fi
dokku_log_info2 "Stopping $SERVICE" dokku_log_info2 "Stopping $SERVICE"
service_container_rm "$SERVICE" service_container_rm "$SERVICE"
service_start "$SERVICE" "${@:2}" service_start "$SERVICE" "${@:2}"
if [[ "$SERVICE_RESTART_APPS" == "true" ]]; then
dokku_log_info2 "Starting all linked services"
for app in $(service_linked_apps "$SERVICE"); do
[[ "$app" == "-" ]] && continue
ps_start "$app"
done
fi
dokku_log_info2 "Done" dokku_log_info2 "Done"
} }

View File

@@ -32,6 +32,6 @@ teardown() {
export ECHO_DOCKER_COMMAND="true" export ECHO_DOCKER_COMMAND="true"
run dokku "$PLUGIN_COMMAND_PREFIX:import" l < "$PLUGIN_DATA_ROOT/fake.dump" run dokku "$PLUGIN_COMMAND_PREFIX:import" l < "$PLUGIN_DATA_ROOT/fake.dump"
password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")" password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
assert_output "docker exec -i dokku.postgres.l env PGPASSWORD=$password pg_restore -h localhost -cO -d l -U postgres -w" assert_output "docker exec -i dokku.postgres.l env PGPASSWORD=$password pg_restore -h localhost -cO --if-exists -d l -U postgres -w"
} }

1
tests/test_helper.bash Normal file → Executable file
View File

@@ -1,5 +1,4 @@
#!/usr/bin/env bash #!/usr/bin/env bash
export DOKKU_QUIET_OUTPUT=1
export DOKKU_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/dokku" export DOKKU_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/dokku"
export DOKKU_VERSION=${DOKKU_VERSION:-"master"} export DOKKU_VERSION=${DOKKU_VERSION:-"master"}
export PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/bin:$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/dokku:$PATH" export PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/bin:$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/dokku:$PATH"