From 6a32161049d4defa0d0558985ee0812cf5e7a500 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Mon, 23 Apr 2018 17:11:50 -0400 Subject: [PATCH] fix: properly handle use-iam flag. Closes dokku/dokku-redis#88 --- common-functions | 20 ++++++++++++++------ subcommands/backup | 2 +- subcommands/backup-schedule | 9 ++++++--- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/common-functions b/common-functions index 75d1f53..de36291 100755 --- a/common-functions +++ b/common-functions @@ -113,17 +113,20 @@ service_backup() { local AWS_SECRET_ACCESS_KEY_FILE="$BACKUP_CONFIG_ROOT/AWS_SECRET_ACCESS_KEY" local BACKUP_PARAMETERS="" - if [[ "$USE_IAM_OPTIONAL_FLAG" != "--use-iam" ]] && [[ "$USE_IAM_OPTIONAL_FLAG" != "-u" ]]; then + if [[ -z "$USE_IAM_OPTIONAL_FLAG" ]]; then [[ ! -f "$AWS_ACCESS_KEY_ID_FILE" ]] && dokku_log_fail "Missing AWS_ACCESS_KEY_ID file" [[ ! -f "$AWS_SECRET_ACCESS_KEY_FILE" ]] && dokku_log_fail "Missing AWS_SECRET_ACCESS_KEY file" BACKUP_PARAMETERS="$BACKUP_PARAMETERS -e AWS_ACCESS_KEY_ID=$(cat "$AWS_ACCESS_KEY_ID_FILE") -e AWS_SECRET_ACCESS_KEY=$(cat "$AWS_SECRET_ACCESS_KEY_FILE")" - else + elif [[ "$USE_IAM_OPTIONAL_FLAG" != "--use-iam" ]] && [[ "$USE_IAM_OPTIONAL_FLAG" != "-u" ]]; then dokku_log_fail "Provide AWS credentials or use the --use-iam flag" fi TMPDIR=$(mktemp -d) trap 'rm -rf "$TMPDIR" > /dev/null' RETURN INT TERM EXIT + docker inspect "$ID" &> /dev/null || dokku_log_fail "Service container does not exist" + is_container_status "$ID" "Running" || dokku_log_fail "Service container is not running" + (service_export "$SERVICE" > "${TMPDIR}/export") # Build parameter list for s3backup tool @@ -185,12 +188,16 @@ service_backup_deauth() { service_backup_schedule() { declare desc="schedules a backup of the service" - declare SERVICE="$1" SCHEDULE="$2" BUCKET_NAME="$3" + declare SERVICE="$1" SCHEDULE="$2" BUCKET_NAME="$3" USE_IAM_OPTIONAL_FLAG="$4" local DOKKU_BIN="$(which dokku)" local CRON_FILE="/etc/cron.d/dokku-${PLUGIN_COMMAND_PREFIX}-${SERVICE}" local TMP_CRON_FILE="${PLUGIN_DATA_ROOT}/.TMP_CRON_FILE" - echo "${SCHEDULE} dokku ${DOKKU_BIN} ${PLUGIN_COMMAND_PREFIX}:backup ${SERVICE} ${BUCKET_NAME}" > "$TMP_CRON_FILE" + if [[ -n "$USE_IAM_OPTIONAL_FLAG" ]] && [[ "$USE_IAM_OPTIONAL_FLAG" != "--use-iam" ]] && [[ "$USE_IAM_OPTIONAL_FLAG" != "-u" ]]; then + dokku_log_fail "Invalid flag provided, only '--use-iam' allowed" + fi + + echo "${SCHEDULE} dokku ${DOKKU_BIN} ${PLUGIN_COMMAND_PREFIX}:backup ${SERVICE} ${BUCKET_NAME} ${USE_IAM_OPTIONAL_FLAG}" > "$TMP_CRON_FILE" sudo /bin/mv "$TMP_CRON_FILE" "$CRON_FILE" sudo /bin/chown root:root "$CRON_FILE" sudo /bin/chmod 644 "$CRON_FILE" @@ -241,8 +248,8 @@ service_enter() { local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE" local ID="$(cat "$SERVICE_ROOT/ID")" - docker inspect "$ID" &> /dev/null || dokku_log_fail "Container does not exist" - is_container_status "$ID" "Running" || dokku_log_fail "Container is not running" + docker inspect "$ID" &> /dev/null || dokku_log_fail "Service container does not exist" + is_container_status "$ID" "Running" || dokku_log_fail "Service container is not running" local EXEC_CMD="" has_tty && local DOKKU_RUN_OPTS+=" -i -t" @@ -387,6 +394,7 @@ service_logs() { DOKKU_LOGS_ARGS="--follow" fi + docker inspect "$ID" &> /dev/null || dokku_log_fail "Service container does not exist" is_container_status "$ID" "Running" || dokku_log_warn "Service logs may not be output as service is not running" # shellcheck disable=SC2086 diff --git a/subcommands/backup b/subcommands/backup index 1dcd954..a35a71a 100755 --- a/subcommands/backup +++ b/subcommands/backup @@ -7,7 +7,7 @@ source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions" service-backup-cmd() { #E backup the 'lolipop' service to the 'my-s3-bucket' bucket on AWS #E dokku $PLUGIN_COMMAND_PREFIX:backup lolipop my-s3-bucket --use-iam - #F -i|--use-iam, use the IAM profile associated with the current server + #F -u|--use-iam, use the IAM profile associated with the current server #A service, service to run command against #A bucket-name, name of the s3 bucket to upload backups to declare desc="creates a backup of the $PLUGIN_SERVICE service to an existing s3 bucket" diff --git a/subcommands/backup-schedule b/subcommands/backup-schedule index 0b3b5e8..8e89877 100755 --- a/subcommands/backup-schedule +++ b/subcommands/backup-schedule @@ -7,19 +7,22 @@ source "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)")/functions" service-backup-schedule-cmd() { #E schedule a backup #E > 'schedule' is a crontab expression, eg. "0 3 * * *" for each day at 3am - #E dokku $PLUGIN_COMMAND_PREFIX:backup-deauth lolipop "0 3 * * *" my-s3-bucket + #E dokku $PLUGIN_COMMAND_PREFIX:backup-schedule lolipop "0 3 * * *" my-s3-bucket + #E schedule a backup and authenticate via iam + #E dokku $PLUGIN_COMMAND_PREFIX:backup-schedule lolipop "0 3 * * *" my-s3-bucket --use-iam + #F -u|--use-iam, use the IAM profile associated with the current server #A service, service to run command against #A schedule, a cron schedule to run backups on #A bucket-name, name of the s3 bucket to upload backups to 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" + declare SERVICE="$1" SCHEDULE="$2" BUCKET_NAME="$3" USE_IAM_OPTIONAL_FLAG="$4" [[ -z "$SERVICE" ]] && dokku_log_fail "Please specify a name for the service" [[ -z "$SCHEDULE" ]] && dokku_log_fail "Please specify a schedule for the backup" [[ -z "$BUCKET_NAME" ]] && dokku_log_fail "Please specify an aws bucket for the backup" verify_service_name "$SERVICE" - service_backup_schedule "$SERVICE" "$SCHEDULE" "$BUCKET_NAME" + service_backup_schedule "$SERVICE" "$SCHEDULE" "$BUCKET_NAME" "$USE_IAM_OPTIONAL_FLAG" } service-backup-schedule-cmd "$@"