From 3ed0c73bd99e12e60ca42815655bf05ef292aa05 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Sun, 15 May 2016 18:36:44 -0400 Subject: [PATCH 1/7] Move setting of PLUGIN_BASE_PATH to config --- commands | 4 ---- config | 4 ++++ 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/commands b/commands index 1fb3772..e92d87f 100755 --- a/commands +++ b/commands @@ -3,10 +3,6 @@ source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/config" [[ " help $PLUGIN_COMMAND_PREFIX:help " == *" $1 "* ]] || [[ "$1" == "$PLUGIN_COMMAND_PREFIX:"* ]] || exit "$DOKKU_NOT_IMPLEMENTED_EXIT" 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 "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/functions" diff --git a/config b/config index 12b3224..2a76551 100644 --- a/config +++ b/config @@ -13,3 +13,7 @@ export PLUGIN_IMAGE=$MONGO_IMAGE export PLUGIN_IMAGE_VERSION=$MONGO_IMAGE_VERSION export PLUGIN_SCHEME="mongodb" export PLUGIN_SERVICE="MongoDB" +export PLUGIN_BASE_PATH="$PLUGIN_PATH" +if [[ -n $DOKKU_API_VERSION ]]; then + export PLUGIN_BASE_PATH="$PLUGIN_ENABLED_PATH" +fi From 38e1805b5594d5304df51bcc32f9ab35969fd65d Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Sun, 15 May 2016 18:58:01 -0400 Subject: [PATCH 2/7] Fix test setup to create proper directory structure for plugin --- tests/setup.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tests/setup.sh b/tests/setup.sh index 5bd208d..a3a5103 100644 --- a/tests/setup.sh +++ b/tests/setup.sh @@ -12,9 +12,11 @@ echo "Dokku version $DOKKU_VERSION" git checkout $DOKKU_VERSION > /dev/null cd - -rm -rf $DOKKU_ROOT/plugins/service -mkdir -p $DOKKU_ROOT/plugins/service -find ./ -maxdepth 1 -type f -exec cp '{}' $DOKKU_ROOT/plugins/service \; +source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/config" +rm -rf $DOKKU_ROOT/plugins/$PLUGIN_COMMAND_PREFIX +mkdir -p $DOKKU_ROOT/plugins/$PLUGIN_COMMAND_PREFIX $DOKKU_ROOT/plugins/$PLUGIN_COMMAND_PREFIX/subcommands +find ./ -maxdepth 1 -type f -exec cp '{}' $DOKKU_ROOT/plugins/$PLUGIN_COMMAND_PREFIX \; +find ./subcommands -maxdepth 1 -type f -exec cp '{}' $DOKKU_ROOT/plugins/$PLUGIN_COMMAND_PREFIX/subcommands \; if [[ ! -f $BIN_STUBS/plugn ]]; then wget -O- "$PLUGN_URL" | tar xzf - -C "$BIN_STUBS" From 8840d944978008204b2a17317ee60905a05ebf92 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Sun, 15 May 2016 19:13:02 -0400 Subject: [PATCH 3/7] Upgrade help output for dokku 0.5.x Also completely drop support for help output on 0.3.x --- commands | 57 +++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 40 insertions(+), 17 deletions(-) diff --git a/commands b/commands index e92d87f..afd149b 100755 --- a/commands +++ b/commands @@ -204,30 +204,53 @@ case "$1" in ;; help | $PLUGIN_COMMAND_PREFIX:help) - HELP=$(cat< , Create container then copy data from into + $PLUGIN_COMMAND_PREFIX:connect , Connect via telnet to a $PLUGIN_SERVICE service $PLUGIN_COMMAND_PREFIX:create , Create a $PLUGIN_SERVICE service $PLUGIN_COMMAND_PREFIX:destroy , Delete the $PLUGIN_SERVICE service and stop its container if there are no links left - $PLUGIN_COMMAND_PREFIX:link , Link the $PLUGIN_SERVICE service to the app - $PLUGIN_COMMAND_PREFIX:unlink , Unlink the $PLUGIN_SERVICE service from the app $PLUGIN_COMMAND_PREFIX:export , Export a dump of the $PLUGIN_SERVICE service database - $PLUGIN_COMMAND_PREFIX:import < , Import a dump into the $PLUGIN_SERVICE service database - $PLUGIN_COMMAND_PREFIX:connect , Connect via telnet to a $PLUGIN_SERVICE service - $PLUGIN_COMMAND_PREFIX:logs [-t], Print the most recent log(s) for this service - $PLUGIN_COMMAND_PREFIX:restart , Graceful shutdown and restart of the $PLUGIN_SERVICE service container - $PLUGIN_COMMAND_PREFIX:info , Print the connection information - $PLUGIN_COMMAND_PREFIX:list, List all $PLUGIN_SERVICE services - $PLUGIN_COMMAND_PREFIX:clone , Create container then copy data from into $PLUGIN_COMMAND_PREFIX:expose [port], Expose a $PLUGIN_SERVICE service on custom port if provided (random port otherwise) - $PLUGIN_COMMAND_PREFIX:unexpose , Unexpose a previously exposed $PLUGIN_SERVICE service + $PLUGIN_COMMAND_PREFIX:import < , Import a dump into the $PLUGIN_SERVICE service database + $PLUGIN_COMMAND_PREFIX:info , Print the connection information + $PLUGIN_COMMAND_PREFIX:link , Link the $PLUGIN_SERVICE service to the app + $PLUGIN_COMMAND_PREFIX:list, List all $PLUGIN_SERVICE services + $PLUGIN_COMMAND_PREFIX:logs [-t], Print the most recent log(s) for this service + $PLUGIN_COMMAND_PREFIX:promote , Promote service as ${PLUGIN_DEFAULT_ALIAS}_URL in + $PLUGIN_COMMAND_PREFIX:restart , Graceful shutdown and restart of the $PLUGIN_SERVICE service container $PLUGIN_COMMAND_PREFIX:start , Start a previously stopped $PLUGIN_SERVICE service $PLUGIN_COMMAND_PREFIX:stop , Stop a running $PLUGIN_SERVICE service - $PLUGIN_COMMAND_PREFIX:promote , Promote service as ${PLUGIN_DEFAULT_ALIAS}_URL in -EOF -) - if [[ -n $DOKKU_API_VERSION ]]; then - echo "$HELP" + $PLUGIN_COMMAND_PREFIX:unexpose , Unexpose a previously exposed $PLUGIN_SERVICE service + $PLUGIN_COMMAND_PREFIX:unlink , Unlink the $PLUGIN_SERVICE service from the app +help_content + } + + help_list_func() { + # shellcheck disable=SC2034 + declare desc="return $PLUGIN_COMMAND_PREFIX plugin help content" + cat< Date: Sun, 15 May 2016 19:29:37 -0400 Subject: [PATCH 4/7] Use docker-options functions directly to avoid setting DOKKU_APP_NAME twice --- functions | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/functions b/functions index be7f565..869f1d9 100755 --- a/functions +++ b/functions @@ -2,6 +2,7 @@ source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/config" set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x source "$PLUGIN_AVAILABLE_PATH/config/functions" +source "$PLUGIN_AVAILABLE_PATH/docker-options/functions" get_random_ports() { local iterations="${1:-1}" @@ -91,7 +92,10 @@ service_link() { 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" + + # shellcheck disable=SC2034 + local passed_phases=(build deploy run) + add_passed_docker_option passed_phases[@] "--link $SERVICE_NAME:$SERVICE_ALIAS" config_set "$APP" "${ALIAS}_URL=$SERVICE_URL" } @@ -266,7 +270,7 @@ service_create_container() { echo "db.createUser({user:'admin',pwd:'$ROOTPASSWORD',roles:[{role:'userAdminAnyDatabase',db:'admin'}]})" | docker exec -i "$SERVICE_NAME" mongo admin > /dev/null echo "db.createUser({user:'$SERVICE',pwd:'$PASSWORD',roles:[{role:'readWrite',db:'$SERVICE'}]})" | docker exec -i "$SERVICE_NAME" mongo -u admin -p "$ROOTPASSWORD" --authenticationDatabase admin "$SERVICE" > /dev/null dokku_log_info2 "$PLUGIN_SERVICE container created: $SERVICE" - dokku "$PLUGIN_COMMAND_PREFIX:info" "$SERVICE" + service_info "$SERVICE" } service_stop() { @@ -299,7 +303,9 @@ service_unlink() { [[ -z ${LINK[*]} ]] && dokku_log_fail "Not linked to app $APP" remove_from_links_file "$SERVICE" "$APP" - dokku docker-options:remove "$APP" build,deploy,run "--link $SERVICE_NAME:$SERVICE_ALIAS" + # shellcheck disable=SC2034 + local passed_phases=(build deploy run) + remove_passed_docker_option passed_phases[@] "--link $SERVICE_NAME:$SERVICE_ALIAS" config_unset "$APP" "${LINK[*]}" } From e2f6d6b04552c3e397100a2e111c6b741a779698 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Sun, 15 May 2016 22:12:43 -0400 Subject: [PATCH 5/7] Move all commands into subcommand structure --- commands | 218 ++++++++++--------------------------------- subcommands/clone | 19 ++++ subcommands/connect | 18 ++++ subcommands/create | 32 +++++++ subcommands/destroy | 48 ++++++++++ subcommands/export | 21 +++++ subcommands/expose | 13 +++ subcommands/import | 20 ++++ subcommands/info | 13 +++ subcommands/link | 15 +++ subcommands/list | 11 +++ subcommands/logs | 13 +++ subcommands/promote | 15 +++ subcommands/restart | 15 +++ subcommands/start | 13 +++ subcommands/stop | 13 +++ subcommands/unexpose | 13 +++ subcommands/unlink | 15 +++ 18 files changed, 356 insertions(+), 169 deletions(-) create mode 100755 subcommands/clone create mode 100755 subcommands/connect create mode 100755 subcommands/create create mode 100755 subcommands/destroy create mode 100755 subcommands/export create mode 100755 subcommands/expose create mode 100755 subcommands/import create mode 100755 subcommands/info create mode 100755 subcommands/link create mode 100755 subcommands/list create mode 100755 subcommands/logs create mode 100755 subcommands/promote create mode 100755 subcommands/restart create mode 100755 subcommands/start create mode 100755 subcommands/stop create mode 100755 subcommands/unexpose create mode 100755 subcommands/unlink diff --git a/commands b/commands index afd149b..f38310e 100755 --- a/commands +++ b/commands @@ -15,192 +15,72 @@ if [[ -d "$PLUGIN_DATA_ROOT/*" ]]; then fi case "$1" in - $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" - SERVICE="$2"; SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"; LINKS_FILE="$SERVICE_ROOT/LINKS" - - if ! docker images | grep -e "^$PLUGIN_IMAGE " | grep -q " $PLUGIN_IMAGE_VERSION " ; then - docker pull "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" || dokku_log_fail "$PLUGIN_SERVICE image $PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION pull failed" - fi - - 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" - rootpassword=$(openssl rand -hex 16) - password=$(openssl rand -hex 16) - echo "$rootpassword" > "$SERVICE_ROOT/ROOTPASSWORD" - echo "$password" > "$SERVICE_ROOT/PASSWORD" - touch "$LINKS_FILE" - - if [[ -n $MONGO_CUSTOM_ENV ]]; then - echo "$MONGO_CUSTOM_ENV" | tr ';' "\n" > "$SERVICE_ROOT/ENV" - else - echo "" > "$SERVICE_ROOT/ENV" - fi - service_create_container "$SERVICE" - ;; - - $PLUGIN_COMMAND_PREFIX:destroy) - [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" - verify_service_name "$2" - SERVICE="$2"; SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"; LINKS_FILE="$SERVICE_ROOT/LINKS" - SERVICE_NAME="$(get_service_name "$SERVICE")" - - [[ -s "$LINKS_FILE" ]] && dokku_log_fail "Cannot delete linked service" - - [[ "$3" == "force" ]] && DOKKU_APPS_FORCE_DELETE=1 - if [[ -z "$DOKKU_APPS_FORCE_DELETE" ]]; then - dokku_log_warn "WARNING: Potentially Destructive Action" - dokku_log_warn "This command will destroy $SERVICE $PLUGIN_SERVICE service." - dokku_log_warn "To proceed, type \"$SERVICE\"" - echo "" - - read -rp "> " service_name - if [[ "$service_name" != "$SERVICE" ]]; then - dokku_log_warn "Confirmation did not match $SERVICE. Aborted." - exit 1 - fi - fi - - dokku_log_info1 "Deleting $SERVICE" - if [[ -n $(docker ps -aq -f name="$SERVICE_NAME") ]]; then - service_stop "$SERVICE" - sleep 1 - - dokku_log_verbose_quiet "Removing container" - docker rm -v "$SERVICE_NAME" > /dev/null - sleep 1 - else - dokku_log_verbose_quiet "No container exists for $SERVICE" - fi - - dokku_log_verbose_quiet "Removing data" - docker run --rm -v "$SERVICE_ROOT/data:/data" "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" chmod 777 -R /data - rm -rf "$SERVICE_ROOT" - - dokku_log_info2 "$PLUGIN_SERVICE container deleted: $SERVICE" - ;; - - $PLUGIN_COMMAND_PREFIX:link) - [[ -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_app_name "$3" - verify_service_name "$2" - service_link "$2" "$3" - ;; - - $PLUGIN_COMMAND_PREFIX:unlink) - [[ -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_app_name "$3" - verify_service_name "$2" - service_unlink "$2" "$3" - ;; - - $PLUGIN_COMMAND_PREFIX:export) - [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" - verify_service_name "$2" - SERVICE="$2"; SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE" - SERVICE_NAME="$(get_service_name "$SERVICE")" - PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")" - - [[ -n $SSH_TTY ]] && stty -opost - docker exec "$SERVICE_NAME" bash -c "DIR=\$(mktemp -d) && mongodump -d $SERVICE -o \"\$DIR\" -u \"$SERVICE\" -p \"$PASSWORD\" --authenticationDatabase \"$SERVICE\" 1>&2 && tar cf - -C \"\$DIR\" . && rm -rf \"\$DIR\"" - status=$? - [[ -n $SSH_TTY ]] && stty opost - exit $status - ;; - - $PLUGIN_COMMAND_PREFIX:import) - [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" - verify_service_name "$2" - SERVICE="$2"; SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE" - SERVICE_NAME="$(get_service_name "$SERVICE")" - PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")" - - if [[ -t 0 ]]; then - dokku_log_fail "No data provided on stdin." - fi - docker exec -i "$SERVICE_NAME" bash -c "DIR=\$(mktemp -d) && tar xf - -C \"\$DIR\" && mongorestore -d $SERVICE -u \"$SERVICE\" -p \"$PASSWORD\" --authenticationDatabase \"$SERVICE\" \$(find \"\$DIR\" -mindepth 1 -maxdepth 1 -type d | head -n1) && rm -rf \"\$DIR\"" - ;; - - $PLUGIN_COMMAND_PREFIX:logs) - [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" - verify_service_name "$2" - service_logs "$2" "$3" - ;; - - $PLUGIN_COMMAND_PREFIX:start) - [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" - verify_service_name "$2" - service_start "$2" - ;; - - $PLUGIN_COMMAND_PREFIX:stop) - [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" - verify_service_name "$2" - service_stop "$2" - ;; - - $PLUGIN_COMMAND_PREFIX:restart) - [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" - verify_service_name "$2" - service_stop "$2" - service_start "$2" - dokku_log_info1 "Please call dokku ps:restart on all linked apps" + $PLUGIN_COMMAND_PREFIX:clone) + "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/subcommands/clone" "$@" ;; $PLUGIN_COMMAND_PREFIX:connect) - [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" - verify_service_name "$2" - SERVICE="$2"; SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE" - SERVICE_NAME="$(get_service_name "$SERVICE")" - PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")" - has_tty && SERVICE_TTY_OPTS="-t" - - docker exec -i $SERVICE_TTY_OPTS "$SERVICE_NAME" mongo -u "$SERVICE" -p "$PASSWORD" --authenticationDatabase "$SERVICE" "$SERVICE" + "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/subcommands/connect" "$@" ;; - $PLUGIN_COMMAND_PREFIX:info) - [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" - verify_service_name "$2" - service_info "$2" + $PLUGIN_COMMAND_PREFIX:create) + "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/subcommands/create" "$@" ;; - $PLUGIN_COMMAND_PREFIX:list) - service_list + $PLUGIN_COMMAND_PREFIX:destroy) + "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/subcommands/destroy" "$@" ;; - $PLUGIN_COMMAND_PREFIX:clone) - [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" - [[ -z $3 ]] && dokku_log_fail "Please specify a name for the new service" - verify_service_name "$2" - SERVICE="$2" - NEW_SERVICE="$3" - dokku "$PLUGIN_COMMAND_PREFIX:create" "$NEW_SERVICE" - dokku_log_info1 "Copying data from $SERVICE to $NEW_SERVICE" - dokku "$PLUGIN_COMMAND_PREFIX:export" "$SERVICE" | dokku "$PLUGIN_COMMAND_PREFIX:import" "$NEW_SERVICE" > /dev/null 2>&1 || true - dokku_log_info1 "Done" + $PLUGIN_COMMAND_PREFIX:export) + "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/subcommands/export" "$@" ;; $PLUGIN_COMMAND_PREFIX:expose) - [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" - verify_service_name "$2" - service_port_expose "$2" "${@:3}" + "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/subcommands/expose" "$@" ;; - $PLUGIN_COMMAND_PREFIX:unexpose) - [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" - verify_service_name "$2" - service_port_unexpose "$2" + $PLUGIN_COMMAND_PREFIX:import) + "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/subcommands/import" "$@" + ;; + + $PLUGIN_COMMAND_PREFIX:info) + "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/subcommands/info" "$@" + ;; + + $PLUGIN_COMMAND_PREFIX:link) + "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/subcommands/link" "$@" + ;; + + $PLUGIN_COMMAND_PREFIX:list) + "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/subcommands/list" "$@" + ;; + + $PLUGIN_COMMAND_PREFIX:logs) + "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/subcommands/logs" "$@" ;; $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" + "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/subcommands/promote" "$@" + ;; + + $PLUGIN_COMMAND_PREFIX:restart) + "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/subcommands/restart" "$@" + ;; + + $PLUGIN_COMMAND_PREFIX:start) + "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/subcommands/start" "$@" + ;; + + $PLUGIN_COMMAND_PREFIX:stop) + "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/subcommands/stop" "$@" + ;; + + $PLUGIN_COMMAND_PREFIX:unexpose) + "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/subcommands/unexpose" "$@" + ;; + + $PLUGIN_COMMAND_PREFIX:unlink) + "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/subcommands/unlink" "$@" ;; help | $PLUGIN_COMMAND_PREFIX:help) diff --git a/subcommands/clone b/subcommands/clone new file mode 100755 index 0000000..a8f60d3 --- /dev/null +++ b/subcommands/clone @@ -0,0 +1,19 @@ +#!/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" + +mongo-clone-cmd() { + [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" + [[ -z $3 ]] && dokku_log_fail "Please specify a name for the new service" + verify_service_name "$2" + SERVICE="$2" + NEW_SERVICE="$3" + dokku "$PLUGIN_COMMAND_PREFIX:create" "$NEW_SERVICE" + dokku_log_info1 "Copying data from $SERVICE to $NEW_SERVICE" + dokku "$PLUGIN_COMMAND_PREFIX:export" "$SERVICE" | dokku "$PLUGIN_COMMAND_PREFIX:import" "$NEW_SERVICE" > /dev/null 2>&1 || true + dokku_log_info1 "Done" +} + +mongo-clone-cmd "$@" diff --git a/subcommands/connect b/subcommands/connect new file mode 100755 index 0000000..59d50c6 --- /dev/null +++ b/subcommands/connect @@ -0,0 +1,18 @@ +#!/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" + +mongo-connect-cmd() { + [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" + verify_service_name "$2" + SERVICE="$2"; SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE" + SERVICE_NAME="$(get_service_name "$SERVICE")" + PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")" + has_tty && SERVICE_TTY_OPTS="-t" + + docker exec -i $SERVICE_TTY_OPTS "$SERVICE_NAME" mongo -u "$SERVICE" -p "$PASSWORD" --authenticationDatabase "$SERVICE" "$SERVICE" +} + +mongo-connect-cmd "$@" diff --git a/subcommands/create b/subcommands/create new file mode 100755 index 0000000..30b48a1 --- /dev/null +++ b/subcommands/create @@ -0,0 +1,32 @@ +#!/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" + +mongo-create-cmd() { + [[ -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" + SERVICE="$2"; SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"; LINKS_FILE="$SERVICE_ROOT/LINKS" + + if ! docker images | grep -e "^$PLUGIN_IMAGE " | grep -q " $PLUGIN_IMAGE_VERSION " ; then + docker pull "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" || dokku_log_fail "$PLUGIN_SERVICE image $PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION pull failed" + fi + + 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" + rootpassword=$(openssl rand -hex 16) + password=$(openssl rand -hex 16) + echo "$rootpassword" > "$SERVICE_ROOT/ROOTPASSWORD" + echo "$password" > "$SERVICE_ROOT/PASSWORD" + touch "$LINKS_FILE" + + if [[ -n $MONGO_CUSTOM_ENV ]]; then + echo "$MONGO_CUSTOM_ENV" | tr ';' "\n" > "$SERVICE_ROOT/ENV" + else + echo "" > "$SERVICE_ROOT/ENV" + fi + service_create_container "$SERVICE" +} + +mongo-create-cmd "$@" diff --git a/subcommands/destroy b/subcommands/destroy new file mode 100755 index 0000000..3cacf76 --- /dev/null +++ b/subcommands/destroy @@ -0,0 +1,48 @@ +#!/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" + +mongo-destroy-cmd() { + [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" + verify_service_name "$2" + SERVICE="$2"; SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"; LINKS_FILE="$SERVICE_ROOT/LINKS" + SERVICE_NAME="$(get_service_name "$SERVICE")" + + [[ -s "$LINKS_FILE" ]] && dokku_log_fail "Cannot delete linked service" + + [[ "$3" == "force" ]] && DOKKU_APPS_FORCE_DELETE=1 + if [[ -z "$DOKKU_APPS_FORCE_DELETE" ]]; then + dokku_log_warn "WARNING: Potentially Destructive Action" + dokku_log_warn "This command will destroy $SERVICE $PLUGIN_SERVICE service." + dokku_log_warn "To proceed, type \"$SERVICE\"" + echo "" + + read -rp "> " service_name + if [[ "$service_name" != "$SERVICE" ]]; then + dokku_log_warn "Confirmation did not match $SERVICE. Aborted." + exit 1 + fi + fi + + dokku_log_info1 "Deleting $SERVICE" + if [[ -n $(docker ps -aq -f name="$SERVICE_NAME") ]]; then + service_stop "$SERVICE" + sleep 1 + + dokku_log_verbose_quiet "Removing container" + docker rm -v "$SERVICE_NAME" > /dev/null + sleep 1 + else + dokku_log_verbose_quiet "No container exists for $SERVICE" + fi + + dokku_log_verbose_quiet "Removing data" + docker run --rm -v "$SERVICE_ROOT/data:/data" "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" chmod 777 -R /data + rm -rf "$SERVICE_ROOT" + + dokku_log_info2 "$PLUGIN_SERVICE container deleted: $SERVICE" +} + +mongo-destroy-cmd "$@" diff --git a/subcommands/export b/subcommands/export new file mode 100755 index 0000000..faf62c2 --- /dev/null +++ b/subcommands/export @@ -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" + +mongo-export-cmd() { + [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" + verify_service_name "$2" + SERVICE="$2"; SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE" + SERVICE_NAME="$(get_service_name "$SERVICE")" + PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")" + + [[ -n $SSH_TTY ]] && stty -opost + docker exec "$SERVICE_NAME" bash -c "DIR=\$(mktemp -d) && mongodump -d $SERVICE -o \"\$DIR\" -u \"$SERVICE\" -p \"$PASSWORD\" --authenticationDatabase \"$SERVICE\" 1>&2 && tar cf - -C \"\$DIR\" . && rm -rf \"\$DIR\"" + status=$? + [[ -n $SSH_TTY ]] && stty opost + exit $status +} + +mongo-export-cmd "$@" diff --git a/subcommands/expose b/subcommands/expose new file mode 100755 index 0000000..2791cd5 --- /dev/null +++ b/subcommands/expose @@ -0,0 +1,13 @@ +#!/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" + +mongo-expose-cmd() { + [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" + verify_service_name "$2" + service_port_expose "$2" "${@:3}" +} + +mongo-expose-cmd "$@" diff --git a/subcommands/import b/subcommands/import new file mode 100755 index 0000000..32b9f99 --- /dev/null +++ b/subcommands/import @@ -0,0 +1,20 @@ +#!/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" + +mongo-import-cmd() { + [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" + verify_service_name "$2" + SERVICE="$2"; SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE" + SERVICE_NAME="$(get_service_name "$SERVICE")" + PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")" + + if [[ -t 0 ]]; then + dokku_log_fail "No data provided on stdin." + fi + docker exec -i "$SERVICE_NAME" bash -c "DIR=\$(mktemp -d) && tar xf - -C \"\$DIR\" && mongorestore -d $SERVICE -u \"$SERVICE\" -p \"$PASSWORD\" --authenticationDatabase \"$SERVICE\" \$(find \"\$DIR\" -mindepth 1 -maxdepth 1 -type d | head -n1) && rm -rf \"\$DIR\"" +} + +mongo-import-cmd "$@" diff --git a/subcommands/info b/subcommands/info new file mode 100755 index 0000000..a2c6f85 --- /dev/null +++ b/subcommands/info @@ -0,0 +1,13 @@ +#!/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" + +mongo-info-cmd() { + [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" + verify_service_name "$2" + service_info "$2" +} + +mongo-info-cmd "$@" diff --git a/subcommands/link b/subcommands/link new file mode 100755 index 0000000..0d8e43c --- /dev/null +++ b/subcommands/link @@ -0,0 +1,15 @@ +#!/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" + +mongo-link-cmd() { + [[ -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_app_name "$3" + verify_service_name "$2" + service_link "$2" "$3" +} + +mongo-link-cmd "$@" diff --git a/subcommands/list b/subcommands/list new file mode 100755 index 0000000..f4b50f3 --- /dev/null +++ b/subcommands/list @@ -0,0 +1,11 @@ +#!/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" + +mongo-list-cmd() { + service_list +} + +mongo-list-cmd "$@" diff --git a/subcommands/logs b/subcommands/logs new file mode 100755 index 0000000..5383b83 --- /dev/null +++ b/subcommands/logs @@ -0,0 +1,13 @@ +#!/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" + +mongo-logs-cmd() { + [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" + verify_service_name "$2" + service_logs "$2" "$3" +} + +mongo-logs-cmd "$@" diff --git a/subcommands/promote b/subcommands/promote new file mode 100755 index 0000000..33912e9 --- /dev/null +++ b/subcommands/promote @@ -0,0 +1,15 @@ +#!/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" + +mongo-promote-cmd() { + [[ -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" +} + +mongo-promote-cmd "$@" diff --git a/subcommands/restart b/subcommands/restart new file mode 100755 index 0000000..a9ef4d5 --- /dev/null +++ b/subcommands/restart @@ -0,0 +1,15 @@ +#!/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" + +mongo-restart-cmd() { + [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" + verify_service_name "$2" + service_stop "$2" + service_start "$2" + dokku_log_info1 "Please call dokku ps:restart on all linked apps" +} + +mongo-restart-cmd "$@" diff --git a/subcommands/start b/subcommands/start new file mode 100755 index 0000000..7394151 --- /dev/null +++ b/subcommands/start @@ -0,0 +1,13 @@ +#!/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" + +mongo-start-cmd() { + [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" + verify_service_name "$2" + service_start "$2" +} + +mongo-start-cmd "$@" diff --git a/subcommands/stop b/subcommands/stop new file mode 100755 index 0000000..b496eda --- /dev/null +++ b/subcommands/stop @@ -0,0 +1,13 @@ +#!/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" + +mongo-stop-cmd() { + [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" + verify_service_name "$2" + service_stop "$2" +} + +mongo-stop-cmd "$@" diff --git a/subcommands/unexpose b/subcommands/unexpose new file mode 100755 index 0000000..5326221 --- /dev/null +++ b/subcommands/unexpose @@ -0,0 +1,13 @@ +#!/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" + +mongo-unexpose-cmd() { + [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" + verify_service_name "$2" + service_port_unexpose "$2" +} + +mongo-unexpose-cmd "$@" diff --git a/subcommands/unlink b/subcommands/unlink new file mode 100755 index 0000000..eb315b9 --- /dev/null +++ b/subcommands/unlink @@ -0,0 +1,15 @@ +#!/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" + +mongo-unlink-cmd() { + [[ -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_app_name "$3" + verify_service_name "$2" + service_unlink "$2" "$3" +} + +mongo-unlink-cmd "$@" From ddf428c035f9cc655a66a902893f18830f991e11 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Sun, 15 May 2016 23:56:32 -0400 Subject: [PATCH 6/7] Conform to function declaration standards - declare desc variable - declare all positional arguments - set the cmd - properly handle DOKKU_APP_NAME --- commands | 2 +- subcommands/clone | 13 ++++++++----- subcommands/connect | 10 +++++++--- subcommands/create | 10 +++++++--- subcommands/destroy | 13 +++++++++---- subcommands/export | 10 +++++++--- subcommands/expose | 10 +++++++--- subcommands/import | 10 +++++++--- subcommands/info | 10 +++++++--- subcommands/link | 15 ++++++++++----- subcommands/list | 3 +++ subcommands/logs | 10 +++++++--- subcommands/promote | 15 ++++++++++----- subcommands/restart | 12 ++++++++---- subcommands/start | 10 +++++++--- subcommands/stop | 10 +++++++--- subcommands/unexpose | 10 +++++++--- subcommands/unlink | 15 ++++++++++----- 18 files changed, 129 insertions(+), 59 deletions(-) diff --git a/commands b/commands index f38310e..450327f 100755 --- a/commands +++ b/commands @@ -89,7 +89,7 @@ case "$1" in declare desc="return $PLUGIN_COMMAND_PREFIX plugin help content" cat< , Create container then copy data from into - $PLUGIN_COMMAND_PREFIX:connect , Connect via telnet to a $PLUGIN_SERVICE service + $PLUGIN_COMMAND_PREFIX:connect , Connect via mongo to a $PLUGIN_SERVICE service $PLUGIN_COMMAND_PREFIX:create , Create a $PLUGIN_SERVICE service $PLUGIN_COMMAND_PREFIX:destroy , Delete the $PLUGIN_SERVICE service and stop its container if there are no links left $PLUGIN_COMMAND_PREFIX:export , Export a dump of the $PLUGIN_SERVICE service database diff --git a/subcommands/clone b/subcommands/clone index a8f60d3..fecc7ed 100755 --- a/subcommands/clone +++ b/subcommands/clone @@ -5,11 +5,14 @@ source "$PLUGIN_BASE_PATH/common/functions" source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions" mongo-clone-cmd() { - [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" - [[ -z $3 ]] && dokku_log_fail "Please specify a name for the new service" - verify_service_name "$2" - SERVICE="$2" - NEW_SERVICE="$3" + declare desc="create container then copy data from into " + local cmd="$PLUGIN_COMMAND_PREFIX:clone" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1 + declare SERVICE="$1" NEW_SERVICE="$2" + + [[ -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" dokku "$PLUGIN_COMMAND_PREFIX:create" "$NEW_SERVICE" dokku_log_info1 "Copying data from $SERVICE to $NEW_SERVICE" dokku "$PLUGIN_COMMAND_PREFIX:export" "$SERVICE" | dokku "$PLUGIN_COMMAND_PREFIX:import" "$NEW_SERVICE" > /dev/null 2>&1 || true diff --git a/subcommands/connect b/subcommands/connect index 59d50c6..2ae3dcc 100755 --- a/subcommands/connect +++ b/subcommands/connect @@ -5,9 +5,13 @@ source "$PLUGIN_BASE_PATH/common/functions" source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions" mongo-connect-cmd() { - [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" - verify_service_name "$2" - SERVICE="$2"; SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE" + declare desc="connect via mongo to a $PLUGIN_SERVICE service" + local cmd="$PLUGIN_COMMAND_PREFIX:connect" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1 + declare SERVICE="$1" + + [[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service" + verify_service_name "$SERVICE" + SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE" SERVICE_NAME="$(get_service_name "$SERVICE")" PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")" has_tty && SERVICE_TTY_OPTS="-t" diff --git a/subcommands/create b/subcommands/create index 30b48a1..11ee3d8 100755 --- a/subcommands/create +++ b/subcommands/create @@ -5,9 +5,13 @@ source "$PLUGIN_BASE_PATH/common/functions" source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions" mongo-create-cmd() { - [[ -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" - SERVICE="$2"; SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"; LINKS_FILE="$SERVICE_ROOT/LINKS" + declare desc="create a $PLUGIN_SERVICE service" + local cmd="$PLUGIN_COMMAND_PREFIX:create" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1 + declare SERVICE="$1" + + [[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service" + [[ ! -d "$PLUGIN_DATA_ROOT/$SERVICE" ]] || dokku_log_fail "$PLUGIN_SERVICE service $SERVICE already exists" + SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"; LINKS_FILE="$SERVICE_ROOT/LINKS" if ! docker images | grep -e "^$PLUGIN_IMAGE " | grep -q " $PLUGIN_IMAGE_VERSION " ; then docker pull "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" || dokku_log_fail "$PLUGIN_SERVICE image $PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION pull failed" diff --git a/subcommands/destroy b/subcommands/destroy index 3cacf76..cd8e34c 100755 --- a/subcommands/destroy +++ b/subcommands/destroy @@ -5,14 +5,18 @@ source "$PLUGIN_BASE_PATH/common/functions" source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions" mongo-destroy-cmd() { - [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" - verify_service_name "$2" - SERVICE="$2"; SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"; LINKS_FILE="$SERVICE_ROOT/LINKS" + declare desc="delete the $PLUGIN_SERVICE service and stop its container if there are no links left" + local cmd="$PLUGIN_COMMAND_PREFIX:destroy" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1 + declare SERVICE="$1" FORCE_DESTROY="$2" + + [[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service" + verify_service_name "$SERVICE" + SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"; LINKS_FILE="$SERVICE_ROOT/LINKS" SERVICE_NAME="$(get_service_name "$SERVICE")" [[ -s "$LINKS_FILE" ]] && dokku_log_fail "Cannot delete linked service" - [[ "$3" == "force" ]] && DOKKU_APPS_FORCE_DELETE=1 + [[ "$FORCE_DESTROY" == "force" ]] && DOKKU_APPS_FORCE_DELETE=1 if [[ -z "$DOKKU_APPS_FORCE_DELETE" ]]; then dokku_log_warn "WARNING: Potentially Destructive Action" dokku_log_warn "This command will destroy $SERVICE $PLUGIN_SERVICE service." @@ -28,6 +32,7 @@ mongo-destroy-cmd() { dokku_log_info1 "Deleting $SERVICE" if [[ -n $(docker ps -aq -f name="$SERVICE_NAME") ]]; then + dokku_log_verbose_quiet "Deleting container data" service_stop "$SERVICE" sleep 1 diff --git a/subcommands/export b/subcommands/export index faf62c2..35407c7 100755 --- a/subcommands/export +++ b/subcommands/export @@ -5,9 +5,13 @@ source "$PLUGIN_BASE_PATH/common/functions" source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions" mongo-export-cmd() { - [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" - verify_service_name "$2" - SERVICE="$2"; SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE" + 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" + + [[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service" + verify_service_name "$SERVICE" + SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE" SERVICE_NAME="$(get_service_name "$SERVICE")" PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")" diff --git a/subcommands/expose b/subcommands/expose index 2791cd5..7bde056 100755 --- a/subcommands/expose +++ b/subcommands/expose @@ -5,9 +5,13 @@ source "$PLUGIN_BASE_PATH/common/functions" source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions" mongo-expose-cmd() { - [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" - verify_service_name "$2" - service_port_expose "$2" "${@:3}" + declare desc="expose a $PLUGIN_SERVICE service on custom port if provided (random port otherwise)" + local cmd="$PLUGIN_COMMAND_PREFIX:expose" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1 + declare SERVICE="$1" + + [[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service" + verify_service_name "$SERVICE" + service_port_expose "$SERVICE" "${@:2}" } mongo-expose-cmd "$@" diff --git a/subcommands/import b/subcommands/import index 32b9f99..6279a05 100755 --- a/subcommands/import +++ b/subcommands/import @@ -5,9 +5,13 @@ source "$PLUGIN_BASE_PATH/common/functions" source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions" mongo-import-cmd() { - [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" - verify_service_name "$2" - SERVICE="$2"; SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE" + 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" + + [[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service" + verify_service_name "$SERVICE" + SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE" SERVICE_NAME="$(get_service_name "$SERVICE")" PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")" diff --git a/subcommands/info b/subcommands/info index a2c6f85..daf1cd8 100755 --- a/subcommands/info +++ b/subcommands/info @@ -5,9 +5,13 @@ source "$PLUGIN_BASE_PATH/common/functions" source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions" mongo-info-cmd() { - [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" - verify_service_name "$2" - service_info "$2" + declare desc="print the connection information" + local cmd="$PLUGIN_COMMAND_PREFIX:info" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1 + declare SERVICE="$1" + + [[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service" + verify_service_name "$SERVICE" + service_info "$SERVICE" } mongo-info-cmd "$@" diff --git a/subcommands/link b/subcommands/link index 0d8e43c..1671724 100755 --- a/subcommands/link +++ b/subcommands/link @@ -5,11 +5,16 @@ source "$PLUGIN_BASE_PATH/common/functions" source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions" mongo-link-cmd() { - [[ -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_app_name "$3" - verify_service_name "$2" - service_link "$2" "$3" + 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" + 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_link "$SERVICE" "$APP" } mongo-link-cmd "$@" diff --git a/subcommands/list b/subcommands/list index f4b50f3..b4547e4 100755 --- a/subcommands/list +++ b/subcommands/list @@ -5,6 +5,9 @@ source "$PLUGIN_BASE_PATH/common/functions" source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions" mongo-list-cmd() { + declare desc="list all $PLUGIN_SERVICE services" + local cmd="$PLUGIN_COMMAND_PREFIX:list" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1 + service_list } diff --git a/subcommands/logs b/subcommands/logs index 5383b83..c39489b 100755 --- a/subcommands/logs +++ b/subcommands/logs @@ -5,9 +5,13 @@ source "$PLUGIN_BASE_PATH/common/functions" source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions" mongo-logs-cmd() { - [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" - verify_service_name "$2" - service_logs "$2" "$3" + declare desc="print the most recent log(s) for this service" + local cmd="$PLUGIN_COMMAND_PREFIX:logs" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1 + declare SERVICE="$1" TAIL="$2" + + [[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service" + verify_service_name "$SERVICE" + service_logs "$SERVICE" "$TAIL" } mongo-logs-cmd "$@" diff --git a/subcommands/promote b/subcommands/promote index 33912e9..23bc919 100755 --- a/subcommands/promote +++ b/subcommands/promote @@ -5,11 +5,16 @@ source "$PLUGIN_BASE_PATH/common/functions" source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions" mongo-promote-cmd() { - [[ -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" + declare desc="promote service as ${PLUGIN_DEFAULT_ALIAS}_URL in " + local cmd="$PLUGIN_COMMAND_PREFIX:promote" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1 + declare SERVICE="$1" APP="$2" + 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_service_name "$SERVICE" + verify_app_name "$APP" + promote "$SERVICE" "$APP" } mongo-promote-cmd "$@" diff --git a/subcommands/restart b/subcommands/restart index a9ef4d5..62f576c 100755 --- a/subcommands/restart +++ b/subcommands/restart @@ -5,10 +5,14 @@ source "$PLUGIN_BASE_PATH/common/functions" source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions" mongo-restart-cmd() { - [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" - verify_service_name "$2" - service_stop "$2" - service_start "$2" + declare desc="graceful shutdown and restart of the $PLUGIN_SERVICE service container" + local cmd="$PLUGIN_COMMAND_PREFIX:restart" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1 + declare SERVICE="$1" + + [[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service" + verify_service_name "$SERVICE" + service_stop "$SERVICE" + service_start "$SERVICE" dokku_log_info1 "Please call dokku ps:restart on all linked apps" } diff --git a/subcommands/start b/subcommands/start index 7394151..53362d6 100755 --- a/subcommands/start +++ b/subcommands/start @@ -5,9 +5,13 @@ source "$PLUGIN_BASE_PATH/common/functions" source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions" mongo-start-cmd() { - [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" - verify_service_name "$2" - service_start "$2" + declare desc="start a previously stopped $PLUGIN_SERVICE service" + local cmd="$PLUGIN_COMMAND_PREFIX:start" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1 + declare SERVICE="$1" + + [[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service" + verify_service_name "$SERVICE" + service_start "$SERVICE" } mongo-start-cmd "$@" diff --git a/subcommands/stop b/subcommands/stop index b496eda..d9293ab 100755 --- a/subcommands/stop +++ b/subcommands/stop @@ -5,9 +5,13 @@ source "$PLUGIN_BASE_PATH/common/functions" source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions" mongo-stop-cmd() { - [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" - verify_service_name "$2" - service_stop "$2" + declare desc="stop a running $PLUGIN_SERVICE service" + local cmd="$PLUGIN_COMMAND_PREFIX:stop" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1 + declare SERVICE="$1" + + [[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service" + verify_service_name "$SERVICE" + service_stop "$SERVICE" } mongo-stop-cmd "$@" diff --git a/subcommands/unexpose b/subcommands/unexpose index 5326221..9ddccea 100755 --- a/subcommands/unexpose +++ b/subcommands/unexpose @@ -5,9 +5,13 @@ source "$PLUGIN_BASE_PATH/common/functions" source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions" mongo-unexpose-cmd() { - [[ -z $2 ]] && dokku_log_fail "Please specify a name for the service" - verify_service_name "$2" - service_port_unexpose "$2" + declare desc="unexpose a previously exposed $PLUGIN_SERVICE service" + local cmd="$PLUGIN_COMMAND_PREFIX:unexpose" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1 + declare SERVICE="$1" + + [[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service" + verify_service_name "$SERVICE" + service_port_unexpose "$SERVICE" } mongo-unexpose-cmd "$@" diff --git a/subcommands/unlink b/subcommands/unlink index eb315b9..61d3ab8 100755 --- a/subcommands/unlink +++ b/subcommands/unlink @@ -5,11 +5,16 @@ source "$PLUGIN_BASE_PATH/common/functions" source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions" mongo-unlink-cmd() { - [[ -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_app_name "$3" - verify_service_name "$2" - service_unlink "$2" "$3" + declare desc="unlink the $PLUGIN_SERVICE service from the app" + local cmd="$PLUGIN_COMMAND_PREFIX:unlink" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1 + declare SERVICE="$1" APP="$2" + 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_unlink "$SERVICE" "$APP" } mongo-unlink-cmd "$@" From e6308b317274ec77469309034f87d7200d1e227f Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Mon, 16 May 2016 00:24:51 -0400 Subject: [PATCH 7/7] Remove remaining direct dokku calls --- functions | 51 ++++++++++++++++++++++++++++++++++++++++++++++ subcommands/clone | 4 ++-- subcommands/create | 23 +-------------------- subcommands/export | 10 +-------- subcommands/import | 9 +------- 5 files changed, 56 insertions(+), 41 deletions(-) diff --git a/functions b/functions index 869f1d9..0154594 100755 --- a/functions +++ b/functions @@ -38,6 +38,19 @@ service_alias() { echo "$SERVICE_NAME" | tr ._ - } +service_export() { + local SERVICE="$1" + local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE" + local SERVICE_NAME="$(get_service_name "$SERVICE")" + local PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")" + + [[ -n $SSH_TTY ]] && stty -opost + docker exec "$SERVICE_NAME" bash -c "DIR=\$(mktemp -d) && mongodump -d $SERVICE -o \"\$DIR\" -u \"$SERVICE\" -p \"$PASSWORD\" --authenticationDatabase \"$SERVICE\" 1>&2 && tar cf - -C \"\$DIR\" . && rm -rf \"\$DIR\"" + status=$? + [[ -n $SSH_TTY ]] && stty opost + exit $status +} + service_info() { local SERVICE="$1" local SERVICE_URL=$(service_url "$SERVICE") @@ -45,6 +58,18 @@ service_info() { echo " DSN: $SERVICE_URL" } +service_import() { + local SERVICE="$1" + SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE" + SERVICE_NAME="$(get_service_name "$SERVICE")" + PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")" + + if [[ -t 0 ]]; then + dokku_log_fail "No data provided on stdin." + fi + docker exec -i "$SERVICE_NAME" bash -c "DIR=\$(mktemp -d) && tar xf - -C \"\$DIR\" && mongorestore -d $SERVICE -u \"$SERVICE\" -p \"$PASSWORD\" --authenticationDatabase \"$SERVICE\" \$(find \"\$DIR\" -mindepth 1 -maxdepth 1 -type d | head -n1) && rm -rf \"\$DIR\"" +} + service_list() { local SERVICES=$(ls "$PLUGIN_DATA_ROOT" 2> /dev/null) if [[ -z $SERVICES ]]; then @@ -253,6 +278,32 @@ service_start() { fi } +service_create() { + local SERVICE="$1" + [[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service" + [[ ! -d "$PLUGIN_DATA_ROOT/$SERVICE" ]] || dokku_log_fail "$PLUGIN_SERVICE service $SERVICE already exists" + SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"; LINKS_FILE="$SERVICE_ROOT/LINKS" + + if ! docker images | grep -e "^$PLUGIN_IMAGE " | grep -q " $PLUGIN_IMAGE_VERSION " ; then + docker pull "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" || dokku_log_fail "$PLUGIN_SERVICE image $PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION pull failed" + fi + + 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" + rootpassword=$(openssl rand -hex 16) + password=$(openssl rand -hex 16) + echo "$rootpassword" > "$SERVICE_ROOT/ROOTPASSWORD" + echo "$password" > "$SERVICE_ROOT/PASSWORD" + touch "$LINKS_FILE" + + if [[ -n $MONGO_CUSTOM_ENV ]]; then + echo "$MONGO_CUSTOM_ENV" | tr ';' "\n" > "$SERVICE_ROOT/ENV" + else + echo "" > "$SERVICE_ROOT/ENV" + fi + service_create_container "$SERVICE" +} + service_create_container() { local SERVICE="$1" local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE" diff --git a/subcommands/clone b/subcommands/clone index fecc7ed..ba648af 100755 --- a/subcommands/clone +++ b/subcommands/clone @@ -13,9 +13,9 @@ mongo-clone-cmd() { [[ -z "$NEW_SERVICE" ]] && dokku_log_fail "Please specify a name for the new service" verify_service_name "$SERVICE" - dokku "$PLUGIN_COMMAND_PREFIX:create" "$NEW_SERVICE" + service_create "$NEW_SERVICE" dokku_log_info1 "Copying data from $SERVICE to $NEW_SERVICE" - dokku "$PLUGIN_COMMAND_PREFIX:export" "$SERVICE" | dokku "$PLUGIN_COMMAND_PREFIX:import" "$NEW_SERVICE" > /dev/null 2>&1 || true + service_export "$SERVICE" | service_import "$NEW_SERVICE" > /dev/null 2>&1 || true dokku_log_info1 "Done" } diff --git a/subcommands/create b/subcommands/create index 11ee3d8..6d87a90 100755 --- a/subcommands/create +++ b/subcommands/create @@ -9,28 +9,7 @@ mongo-create-cmd() { local cmd="$PLUGIN_COMMAND_PREFIX:create" argv=("$@"); [[ ${argv[0]} == "$cmd" ]] && shift 1 declare SERVICE="$1" - [[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service" - [[ ! -d "$PLUGIN_DATA_ROOT/$SERVICE" ]] || dokku_log_fail "$PLUGIN_SERVICE service $SERVICE already exists" - SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"; LINKS_FILE="$SERVICE_ROOT/LINKS" - - if ! docker images | grep -e "^$PLUGIN_IMAGE " | grep -q " $PLUGIN_IMAGE_VERSION " ; then - docker pull "$PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION" || dokku_log_fail "$PLUGIN_SERVICE image $PLUGIN_IMAGE:$PLUGIN_IMAGE_VERSION pull failed" - fi - - 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" - rootpassword=$(openssl rand -hex 16) - password=$(openssl rand -hex 16) - echo "$rootpassword" > "$SERVICE_ROOT/ROOTPASSWORD" - echo "$password" > "$SERVICE_ROOT/PASSWORD" - touch "$LINKS_FILE" - - if [[ -n $MONGO_CUSTOM_ENV ]]; then - echo "$MONGO_CUSTOM_ENV" | tr ';' "\n" > "$SERVICE_ROOT/ENV" - else - echo "" > "$SERVICE_ROOT/ENV" - fi - service_create_container "$SERVICE" + service_create "$SERVICE" } mongo-create-cmd "$@" diff --git a/subcommands/export b/subcommands/export index 35407c7..46d7ce1 100755 --- a/subcommands/export +++ b/subcommands/export @@ -11,15 +11,7 @@ mongo-export-cmd() { [[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service" verify_service_name "$SERVICE" - SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE" - SERVICE_NAME="$(get_service_name "$SERVICE")" - PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")" - - [[ -n $SSH_TTY ]] && stty -opost - docker exec "$SERVICE_NAME" bash -c "DIR=\$(mktemp -d) && mongodump -d $SERVICE -o \"\$DIR\" -u \"$SERVICE\" -p \"$PASSWORD\" --authenticationDatabase \"$SERVICE\" 1>&2 && tar cf - -C \"\$DIR\" . && rm -rf \"\$DIR\"" - status=$? - [[ -n $SSH_TTY ]] && stty opost - exit $status + service_export "$SERVICE" } mongo-export-cmd "$@" diff --git a/subcommands/import b/subcommands/import index 6279a05..37777d6 100755 --- a/subcommands/import +++ b/subcommands/import @@ -11,14 +11,7 @@ mongo-import-cmd() { [[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service" verify_service_name "$SERVICE" - SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE" - SERVICE_NAME="$(get_service_name "$SERVICE")" - PASSWORD="$(cat "$SERVICE_ROOT/PASSWORD")" - - if [[ -t 0 ]]; then - dokku_log_fail "No data provided on stdin." - fi - docker exec -i "$SERVICE_NAME" bash -c "DIR=\$(mktemp -d) && tar xf - -C \"\$DIR\" && mongorestore -d $SERVICE -u \"$SERVICE\" -p \"$PASSWORD\" --authenticationDatabase \"$SERVICE\" \$(find \"\$DIR\" -mindepth 1 -maxdepth 1 -type d | head -n1) && rm -rf \"\$DIR\"" + service_import "$SERVICE" } mongo-import-cmd "$@"