#!/usr/bin/env bash set -eo pipefail [[ $DOKKU_TRACE ]] && set -x source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" source "$PLUGIN_AVAILABLE_PATH/config/functions" apps_create() { declare desc="verifies app name and creates an app" declare APP="$1" is_valid_app_name "$APP" apps_exists "$APP" >/dev/null 2>&1 && dokku_log_fail "Name is already taken" mkdir -p "$DOKKU_ROOT/$APP" dokku_log_info1_quiet "Creating $APP... done" plugn trigger post-create "$APP" } apps_destroy() { declare desc="destroys an app" declare APP="$1" verify_app_name "$APP" local IMAGE_TAG=$(get_running_image_tag "$APP") if [[ -z "$DOKKU_APPS_FORCE_DELETE" ]]; then dokku_log_warn "WARNING: Potentially Destructive Action" dokku_log_warn "This command will destroy $APP (including all add-ons)." dokku_log_warn "To proceed, type \"$APP\"" echo "" read -rp "> " app_name if [[ "$app_name" != "$APP" ]]; then dokku_log_fail "Confirmation did not match $APP. Aborted." fi fi dokku_log_info1 "Destroying $APP (including all add-ons)" plugn trigger pre-delete "$APP" "$IMAGE_TAG" local DOKKU_SCHEDULER=$(get_app_scheduler "$APP") local REMOVE_CONTAINERS="true" plugn trigger scheduler-stop "$DOKKU_SCHEDULER" "$APP" "$REMOVE_CONTAINERS" plugn trigger scheduler-post-delete "$DOKKU_SCHEDULER" "$APP" "$IMAGE_TAG" plugn trigger post-delete "$APP" "$IMAGE_TAG" docker_cleanup "$APP" "true" } apps_exists() { declare desc="checks if an app exists" declare APP="$1" is_valid_app_name "$APP" [[ -d "$DOKKU_ROOT/$APP" ]] || return 1 } apps_maybe_create() { declare desc="creates an app dir if allowed" declare APP="$1" if ! apps_exists "$APP" >/dev/null 2>&1; then DOKKU_GLOBAL_DISABLE_AUTOCREATE="$(config_get --global DOKKU_DISABLE_APP_AUTOCREATION || true)" if [[ "$DOKKU_GLOBAL_DISABLE_AUTOCREATE" == "true" ]]; then dokku_log_warn "App auto-creation disabled." dokku_log_fail " ! Re-enable app auto-creation or create an app with 'dokku apps:create ${APP}'" else suppress_output apps_create "$APP" fi fi }