Merge pull request #4809 from dokku/4805-ensure-directory
Implement storage:ensure-directory command
This commit is contained in:
27
plugins/storage/bin/chown-storage-dir
Executable file
27
plugins/storage/bin/chown-storage-dir
Executable file
@@ -0,0 +1,27 @@
|
||||
#!/usr/bin/env bash
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
main() {
|
||||
declare desc="chowns a storage directory"
|
||||
declare DIRECTORY="$1" CHOWN_ID="$2"
|
||||
|
||||
if [[ -z "$DIRECTORY" ]]; then
|
||||
echo " ! Please specify a directory to create" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! "$DIRECTORY" =~ ^[A-Za-z0-9\\_-]+$ ]]; then
|
||||
echo " ! Directory can only contain the following set of characters: [A-Za-z0-9_-]" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "$CHOWN_ID" != "32767" ]] && [[ "$CHOWN_ID" != "1000" ]] && [[ "$CHOWN_ID" != "2000" ]]; then
|
||||
echo " ! Unsupported chown permissions. Supported values: 32767, 1000, 2000"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
chown -R "$CHOWN_ID:$CHOWN_ID" "${DOKKU_LIB_ROOT}/data/storage/$DIRECTORY"
|
||||
}
|
||||
|
||||
main "$@"
|
||||
@@ -27,6 +27,7 @@ help_desc
|
||||
fn-help-content() {
|
||||
declare desc="return help content"
|
||||
cat <<help_content
|
||||
storage:ensure-directory [--chown option] <directory>, Creates a persistent storage directory in the recommended storage path
|
||||
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
|
||||
|
||||
@@ -5,9 +5,40 @@ set -eo pipefail
|
||||
trigger-storage-install() {
|
||||
declare desc="storage install trigger"
|
||||
declare trigger="install"
|
||||
local storage_directory="${DOKKU_LIB_ROOT}/data/storage"
|
||||
mkdir -p "${storage_directory}"
|
||||
chown dokku:dokku "${storage_directory}"
|
||||
|
||||
mkdir -p "${DOKKU_LIB_ROOT}/data/storage"
|
||||
chown dokku:dokku "${DOKKU_LIB_ROOT}/data/storage"
|
||||
STORAGE_SUDOERS_FILE="/etc/sudoers.d/dokku-storage"
|
||||
|
||||
case "$DOKKU_DISTRO" in
|
||||
debian)
|
||||
echo "%dokku ALL=(ALL) NOPASSWD:$PLUGIN_AVAILABLE_PATH/storage/bin/chown-storage-dir *" >"$STORAGE_SUDOERS_FILE"
|
||||
echo "Defaults env_keep += \"DOKKU_LIB_ROOT\"" >>"$STORAGE_SUDOERS_FILE"
|
||||
;;
|
||||
|
||||
ubuntu)
|
||||
echo "%dokku ALL=(ALL) NOPASSWD:$PLUGIN_AVAILABLE_PATH/storage/bin/chown-storage-dir *" >"$STORAGE_SUDOERS_FILE"
|
||||
echo "Defaults env_keep += \"DOKKU_LIB_ROOT\"" >>"$STORAGE_SUDOERS_FILE"
|
||||
;;
|
||||
|
||||
opensuse)
|
||||
echo "%dokku ALL=(ALL) NOPASSWD:$PLUGIN_AVAILABLE_PATH/storage/bin/chown-storage-dir *" >"$STORAGE_SUDOERS_FILE"
|
||||
echo "Defaults env_keep += \"DOKKU_LIB_ROOT\"" >>"$STORAGE_SUDOERS_FILE"
|
||||
;;
|
||||
|
||||
arch)
|
||||
echo "%dokku ALL=(ALL) NOPASSWD:$PLUGIN_AVAILABLE_PATH/storage/bin/chown-storage-dir *" >"$STORAGE_SUDOERS_FILE"
|
||||
echo "Defaults env_keep += \"DOKKU_LIB_ROOT\"" >>"$STORAGE_SUDOERS_FILE"
|
||||
;;
|
||||
|
||||
centos | fedora | rhel)
|
||||
echo "%dokku ALL=(ALL) NOPASSWD:$PLUGIN_AVAILABLE_PATH/storage/bin/chown-storage-dir *" >"$STORAGE_SUDOERS_FILE"
|
||||
echo "Defaults:dokku !requiretty" >>"$STORAGE_SUDOERS_FILE"
|
||||
echo "Defaults env_keep += \"DOKKU_LIB_ROOT\"" >>"$STORAGE_SUDOERS_FILE"
|
||||
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
trigger-storage-install "$@"
|
||||
|
||||
@@ -5,6 +5,62 @@ source "$PLUGIN_AVAILABLE_PATH/storage/functions"
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
|
||||
cmd-storage-ensure-directory() {
|
||||
declare desc="creates a persistent storage directory in the recommended storage path"
|
||||
declare cmd="storage:ensure-directory"
|
||||
[[ "$1" == "$cmd" ]] && shift 1
|
||||
declare DIRECTORY CHOWN_FLAG
|
||||
|
||||
CHOWN_FLAG=herokuish
|
||||
skip=false
|
||||
for arg in "$@"; do
|
||||
if [[ "$arg" == "--chown" ]]; then
|
||||
skip=true
|
||||
continue
|
||||
fi
|
||||
|
||||
if [[ "$skip" == "true" ]]; then
|
||||
CHOWN_FLAG="$arg"
|
||||
skip=false
|
||||
continue
|
||||
fi
|
||||
|
||||
if [[ -z "$DIRECTORY" ]]; then
|
||||
DIRECTORY="$arg"
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ -z "$DIRECTORY" ]]; then
|
||||
dokku_log_fail "Please specify a directory to create"
|
||||
fi
|
||||
|
||||
if [[ ! "$DIRECTORY" =~ ^[A-Za-z0-9\\_-]+$ ]]; then
|
||||
dokku_log_fail "Directory can only contain the following set of characters: [A-Za-z0-9_-]"
|
||||
fi
|
||||
|
||||
if [[ "$CHOWN_FLAG" == "herokuish" ]]; then
|
||||
CHOWN_FLAG="32767"
|
||||
elif [[ "$CHOWN_FLAG" == "heroku" ]]; then
|
||||
CHOWN_FLAG="1000"
|
||||
elif [[ "$CHOWN_FLAG" == "packeto" ]]; then
|
||||
CHOWN_FLAG="2000"
|
||||
elif [[ "$CHOWN_FLAG" == "false" ]]; then
|
||||
CHOWN_FLAG="false"
|
||||
else
|
||||
dokku_log_fail "Unsupported chown permissions"
|
||||
fi
|
||||
|
||||
local storage_directory="${DOKKU_LIB_ROOT}/data/storage/$DIRECTORY"
|
||||
dokku_log_info1 "Ensuring ${storage_directory} exists"
|
||||
mkdir -p "${storage_directory}"
|
||||
if [[ "$CHOWN_FLAG" != "false" ]]; then
|
||||
dokku_log_verbose_quiet "Setting directory ownership to $CHOWN_FLAG:$CHOWN_FLAG"
|
||||
sudo "$PLUGIN_AVAILABLE_PATH/storage/bin/chown-storage-dir" "$DIRECTORY" "$CHOWN_FLAG"
|
||||
fi
|
||||
|
||||
dokku_log_verbose_quiet "Directory ready for mounting"
|
||||
}
|
||||
|
||||
cmd-storage-report() {
|
||||
declare desc="displays a storage report for one or more apps"
|
||||
declare cmd="storage:report"
|
||||
|
||||
6
plugins/storage/subcommands/ensure-directory
Executable file
6
plugins/storage/subcommands/ensure-directory
Executable file
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_AVAILABLE_PATH/storage/internal-functions"
|
||||
|
||||
cmd-storage-ensure-directory "$@"
|
||||
Reference in New Issue
Block a user