mirror of
https://github.com/dokku/dokku.git
synced 2026-02-24 12:12:08 +01:00
This allows users to quickly show the state of any configured application, as well as the state of their server. In doing so, we make it easy for them to provide information necessary for debugging in a single command.
112 lines
3.4 KiB
Bash
Executable File
112 lines
3.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
|
source "$PLUGIN_AVAILABLE_PATH/docker-options/functions"
|
|
source "$PLUGIN_AVAILABLE_PATH/storage/functions"
|
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
|
|
|
cmd-storage-report() {
|
|
declare desc="displays a storage report for one or more apps"
|
|
local cmd="storage:report"
|
|
local INSTALLED_APPS=$(dokku_apps)
|
|
local APP="$2" INFO_FLAG="$3"
|
|
|
|
if [[ -n "$APP" ]] && [[ "$APP" == --* ]]; then
|
|
INFO_FLAG="$APP"
|
|
APP=""
|
|
fi
|
|
|
|
if [[ -z "$APP" ]] && [[ -z "$INFO_FLAG" ]]; then
|
|
INFO_FLAG="true"
|
|
fi
|
|
|
|
if [[ -z "$APP" ]]; then
|
|
for app in $INSTALLED_APPS; do
|
|
cmd-storage-report-single "$app" "$INFO_FLAG" | tee || true
|
|
done
|
|
else
|
|
cmd-storage-report-single "$APP" "$INFO_FLAG"
|
|
fi
|
|
}
|
|
|
|
cmd-storage-report-single() {
|
|
declare APP="$1" INFO_FLAG="$2"
|
|
if [[ "$INFO_FLAG" == "true" ]]; then
|
|
INFO_FLAG=""
|
|
fi
|
|
verify_app_name "$APP"
|
|
local flag_map=(
|
|
"--storage-build-mounts: $(fn-storage-bind-mounts "$APP" build)"
|
|
"--storage-deploy-mounts: $(fn-storage-bind-mounts "$APP" deploy)"
|
|
"--storage-run-mounts: $(fn-storage-bind-mounts "$APP" run)"
|
|
)
|
|
|
|
if [[ -z "$INFO_FLAG" ]]; then
|
|
dokku_log_info2_quiet "$APP storage information"
|
|
for flag in "${flag_map[@]}"; do
|
|
key="$(echo "${flag#--}" | cut -f1 -d' ' | tr - ' ')"
|
|
dokku_log_verbose "$(printf "%-30s %-25s" "${key^}" "${flag#*: }")"
|
|
done
|
|
else
|
|
local match=false; local value_exists=false
|
|
for flag in "${flag_map[@]}"; do
|
|
valid_flags="${valid_flags} $(echo "$flag" | cut -d':' -f1)"
|
|
if [[ "$flag" == "${INFO_FLAG}:"* ]]; then
|
|
value=${flag#*: }
|
|
size="${#value}"
|
|
if [[ "$size" -ne 0 ]]; then
|
|
echo "$value" && match=true && value_exists=true
|
|
else
|
|
match=true
|
|
fi
|
|
fi
|
|
done
|
|
[[ "$match" == "true" ]] || dokku_log_fail "Invalid flag passed, valid flags:${valid_flags}"
|
|
[[ "$value_exists" == "true" ]] || dokku_log_fail "not deployed"
|
|
fi
|
|
}
|
|
|
|
fn-storage-bind-mounts() {
|
|
declare APP="$1" PHASE="$2"
|
|
local PHASE_FILE="$(fn-get-phase-file-path "$APP" "$PHASE")"
|
|
if [[ -r "$PHASE_FILE" ]]; then
|
|
sed -e '/^-v/!d' "$PHASE_FILE" | tr '\n' ' '
|
|
fi
|
|
}
|
|
|
|
storage_help_content_func() {
|
|
declare desc="return storage plugin help content"
|
|
cat<<help_content
|
|
storage:list <app>, List bind mounts for app's container(s) (host:container)
|
|
storage:mount <app> <host-dir:container-dir>, Create a new bind mount
|
|
storage:report [<app>] [<flag>], Displays a checks report for one or more apps
|
|
storage:unmount <app> <host-dir:container-dir>, Remove an existing bind mount
|
|
help_content
|
|
}
|
|
|
|
storage_help_cmd() {
|
|
if [[ $1 = "storage:help" ]] ; then
|
|
echo -e 'Usage: dokku storage[:COMMAND]'
|
|
echo ''
|
|
echo 'Mount local volume / directories inside containers.'
|
|
echo ''
|
|
echo 'Additional commands:'
|
|
storage_help_content_func | sort | column -c2 -t -s,
|
|
elif [[ $(ps -o command= $PPID) == *"--all"* ]]; then
|
|
storage_help_content_func
|
|
else
|
|
cat<<help_desc
|
|
storage, Mount local volume / directories inside containers
|
|
help_desc
|
|
fi
|
|
}
|
|
|
|
storage_list_cmd() {
|
|
declare desc="List all bound mounts"
|
|
local cmd="storage:list"
|
|
local passed_phases="deploy"
|
|
[[ -z $2 ]] && dokku_log_fail "Please specify an app to run the command on"
|
|
verify_app_name "$2" && local APP="$2"
|
|
echo "$APP volume bind-mounts:"
|
|
get_bind_mounts "$(get_phase_file_path "$passed_phases")"
|
|
}
|