Files
dokku/plugins/storage/internal-functions
Jose Diaz-Gonzalez 4aac1fd936 feat: add report trigger
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.
2018-04-07 04:49:21 -04:00

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")"
}