From cb3b5bdc28638aa9c030fb51c52700f3faec3c11 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Mon, 5 Nov 2018 01:20:34 -0500 Subject: [PATCH] feat: add ability to check on app lock status via apps:locked command This allows users to further introspect on the state of the application. --- docs/deployment/application-management.md | 22 +++++++++++++++--- plugins/apps/internal-functions | 7 +++--- plugins/apps/subcommands/lock | 2 +- plugins/apps/subcommands/locked | 20 +++++++++++++++++ plugins/apps/subcommands/unlock | 6 ++--- plugins/common/functions | 27 +++++++++++++---------- tests/unit/10_apps.bats | 12 +++++++++- 7 files changed, 73 insertions(+), 23 deletions(-) create mode 100755 plugins/apps/subcommands/locked diff --git a/docs/deployment/application-management.md b/docs/deployment/application-management.md index 6fdbaa249..2c5395343 100644 --- a/docs/deployment/application-management.md +++ b/docs/deployment/application-management.md @@ -8,10 +8,11 @@ apps:create # Create a new app apps:destroy # Permanently destroy an app apps:exists # Checks if an app exists apps:list # List your apps -apps:lock # Creates a '.deploy.lock' file in an application's repo +apps:lock # Locks an app for deployment +apps:locked # Checks if an app is locked for deployment apps:rename # Rename an app apps:report [] [] # Display report about an app -apps:unlock # Removes the '.deploy.lock' file from an application's repo +apps:unlock # Unlocks an app for deployment ``` ## Usage @@ -193,10 +194,25 @@ dokku apps:unlock node-js-app ``` ! A deploy may be in progress. - ! Removing the application lock will not stop in progress deploys. + ! Removing the app lock will not stop in progress deploys. -----> Deploy lock removed. ``` +### Checking lock status + +> New as of 0.13.0 + +In some cases, you may wish to inspect the state of an app lock. To do so, you can issue an `apps:lock` command. This will exit non-zero if there is no app lock in place. + + +```shell +dokku apps:locked node-js-app +``` + +``` +Deploy lock does not exist +``` + ### Displaying reports about an app > New as of 0.8.1 diff --git a/plugins/apps/internal-functions b/plugins/apps/internal-functions index 741334949..bc91a5d6b 100755 --- a/plugins/apps/internal-functions +++ b/plugins/apps/internal-functions @@ -85,10 +85,11 @@ apps_help_content_func() { apps:create , Create a new app apps:destroy , Permanently destroy an app apps:list, List your apps - apps:lock , Creates a '.deploy.lock' file in an application's repo + apps:lock , Locks an app for deployment + apps:locked , Checks if an app is locked for deployment apps:rename , Rename an app apps:report [] [], Display report about an app - apps:unlock , Removes the '.deploy.lock' file from an application's repo + apps:unlock , Unlocks an app for deployment help_content } @@ -137,4 +138,4 @@ apps_is_locked() { fi echo "$LOCKED" -} \ No newline at end of file +} diff --git a/plugins/apps/subcommands/lock b/plugins/apps/subcommands/lock index bbe6f017a..a54ff4f98 100755 --- a/plugins/apps/subcommands/lock +++ b/plugins/apps/subcommands/lock @@ -4,7 +4,7 @@ source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" source "$PLUGIN_AVAILABLE_PATH/apps/internal-functions" apps_lock_cmd() { - declare desc="creates a '.deploy.lock' file in an application's repo" + declare desc="locks an app for deployment" declare cmd="apps:lock" [[ "$1" == "$cmd" ]] && shift 1 declare APP="$1"; verify_app_name "$APP" diff --git a/plugins/apps/subcommands/locked b/plugins/apps/subcommands/locked new file mode 100755 index 000000000..50bf5522b --- /dev/null +++ b/plugins/apps/subcommands/locked @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x +source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" +source "$PLUGIN_AVAILABLE_PATH/apps/internal-functions" + +apps_locked_cmd() { + declare desc="checks if an app is locked for deployment" + declare cmd="apps:locked" + [[ "$1" == "$cmd" ]] && shift 1 + declare APP="$1"; verify_app_name "$APP" + local LOCKED="$(apps_is_locked "$APP")" + + if [[ "$LOCKED" != "true" ]] ; then + dokku_log_fail_quiet "Deploy lock does not exist" + fi + + dokku_log_quiet "Deploy lock exists" +} + +apps_locked_cmd "$@" diff --git a/plugins/apps/subcommands/unlock b/plugins/apps/subcommands/unlock index 4eac17eb3..85165ca3f 100755 --- a/plugins/apps/subcommands/unlock +++ b/plugins/apps/subcommands/unlock @@ -4,19 +4,19 @@ source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" source "$PLUGIN_AVAILABLE_PATH/apps/internal-functions" apps_unlock_cmd() { - declare desc="removes the '.deploy.lock' file from an application's repo" + declare desc="unlocks an app for deployment" declare cmd="apps:unlock" [[ "$1" == "$cmd" ]] && shift 1 declare APP="$1"; verify_app_name "$APP" if [[ -f "$DOKKU_ROOT/$APP/.deploy.lock" ]]; then dokku_log_warn "A deploy may be in progress." - dokku_log_warn "Removing the application lock will not stop in progress deploys." + dokku_log_warn "Removing the app lock will not stop in progress deploys." fi rm -f "$DOKKU_ROOT/$APP/.deploy.lock" || dokku_log_fail "Unable to remove deploy lock" - dokku_log_info1 "Deploy lock removed." + dokku_log_info1 "Deploy lock removed" } apps_unlock_cmd "$@" diff --git a/plugins/common/functions b/plugins/common/functions index 75694ac82..c96792d51 100755 --- a/plugins/common/functions +++ b/plugins/common/functions @@ -37,8 +37,6 @@ dokku_log_info1_quiet() { declare desc="log info1 formatter (with quiet option)" if [[ -z "$DOKKU_QUIET_OUTPUT" ]]; then echo "-----> $*" - else - return 0 fi } @@ -46,8 +44,6 @@ dokku_log_info2_quiet() { declare desc="log info2 formatter (with quiet option)" if [[ -z "$DOKKU_QUIET_OUTPUT" ]]; then echo "=====> $*" - else - return 0 fi } @@ -60,8 +56,6 @@ dokku_col_log_info1_quiet() { declare desc="columnar log info1 formatter (with quiet option)" if [[ -z "$DOKKU_QUIET_OUTPUT" ]]; then printf "%-6s %-18s %-25s %-25s %-25s\n" "----->" "$@" - else - return 0 fi } @@ -74,8 +68,6 @@ dokku_col_log_info2_quiet() { declare desc="columnar log info2 formatter (with quiet option)" if [[ -z "$DOKKU_QUIET_OUTPUT" ]]; then printf "%-6s %-18s %-25s %-25s %-25s\n" "=====>" "$@" - else - return 0 fi } @@ -88,8 +80,6 @@ dokku_col_log_msg_quiet() { declare desc="columnar log formatter (with quiet option)" if [[ -z "$DOKKU_QUIET_OUTPUT" ]]; then printf "%-25s %-25s %-25s %-25s\n" "$@" - else - return 0 fi } @@ -97,8 +87,6 @@ dokku_log_verbose_quiet() { declare desc="log verbose formatter (with quiet option)" if [[ -z "$DOKKU_QUIET_OUTPUT" ]]; then echo " $*" - else - return 0 fi } @@ -107,11 +95,26 @@ dokku_log_verbose() { echo " $*" } +dokku_log_warn_quiet() { + declare desc="log warning formatter" + if [[ -z "$DOKKU_QUIET_OUTPUT" ]]; then + echo " ! $*" 1>&2 + fi +} + dokku_log_warn() { declare desc="log warning formatter" echo " ! $*" 1>&2 } +dokku_log_fail_quiet() { + declare desc="log fail formatter" + if [[ -z "$DOKKU_QUIET_OUTPUT" ]]; then + echo "$@" 1>&2 + fi + exit 1 +} + dokku_log_fail() { declare desc="log fail formatter" echo "$@" 1>&2 diff --git a/tests/unit/10_apps.bats b/tests/unit/10_apps.bats index 1fce0c5be..92463619e 100644 --- a/tests/unit/10_apps.bats +++ b/tests/unit/10_apps.bats @@ -197,7 +197,7 @@ teardown () { } -@test "(apps) apps:lock/unlock" { +@test "(apps) apps:lock/locked/unlock" { create_app run bash -c "dokku apps:report $TEST_APP --locked" @@ -205,6 +205,11 @@ teardown () { echo "status: "$status assert_output "false" + run bash -c "dokku apps:locked $TEST_APP" + echo "output: "$output + echo "status: "$status + assert_failure + run bash -c "dokku apps:lock $TEST_APP" echo "output: "$output echo "status: "$status @@ -215,6 +220,11 @@ teardown () { echo "status: "$status assert_output "true" + run bash -c "dokku apps:locked $TEST_APP" + echo "output: "$output + echo "status: "$status + assert_success + run bash -c "dokku apps:unlock $TEST_APP" echo "output: "$output echo "status: "$status