With Minio Docker and Windows, the user ID needs to be set to `0:0` to avoid permission issues. This change ensures that the Minio container runs with root privileges on Windows, which is necessary for proper file access and management.
160 lines
4.3 KiB
Bash
160 lines
4.3 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
set -eo pipefail
|
|
|
|
REPO_DIR="$(cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd)"
|
|
UNSET_USER=0
|
|
|
|
TERRAFORM_DIRECTORY="./env.d/terraform"
|
|
COMPOSE_FILE="${REPO_DIR}/compose.yml"
|
|
|
|
|
|
# _set_user: set (or unset) default user id used to run docker commands
|
|
#
|
|
# usage: _set_user
|
|
#
|
|
# You can override default user ID (the current host user ID), by defining the
|
|
# USER_ID environment variable.
|
|
#
|
|
# To avoid running docker commands with a custom user, please set the
|
|
# $UNSET_USER environment variable to 1.
|
|
function _set_user() {
|
|
|
|
if [ $UNSET_USER -eq 1 ]; then
|
|
USER_ID=""
|
|
return
|
|
fi
|
|
|
|
# USER_ID = USER_ID or `id -u` if USER_ID is not set
|
|
USER_ID=${USER_ID:-$(id -u)}
|
|
|
|
echo "🙋(user) ID: ${USER_ID}"
|
|
}
|
|
|
|
# docker_compose: wrap docker compose command
|
|
#
|
|
# usage: docker_compose [options] [ARGS...]
|
|
#
|
|
# options: docker compose command options
|
|
# ARGS : docker compose command arguments
|
|
function _docker_compose() {
|
|
# Set DOCKER_USER for Windows compatibility with MinIO
|
|
if [[ "$OSTYPE" == "msys" || "$OSTYPE" == "cygwin" || -n "${WSL_DISTRO_NAME:-}" ]]; then
|
|
export DOCKER_USER="0:0"
|
|
fi
|
|
|
|
echo "🐳(compose) file: '${COMPOSE_FILE}'"
|
|
docker compose \
|
|
-f "${COMPOSE_FILE}" \
|
|
--project-directory "${REPO_DIR}" \
|
|
"$@"
|
|
}
|
|
|
|
# _dc_run: wrap docker compose run command
|
|
#
|
|
# usage: _dc_run [options] [ARGS...]
|
|
#
|
|
# options: docker compose run command options
|
|
# ARGS : docker compose run command arguments
|
|
function _dc_run() {
|
|
_set_user
|
|
|
|
user_args="--user=$USER_ID"
|
|
if [ -z $USER_ID ]; then
|
|
user_args=""
|
|
fi
|
|
|
|
_docker_compose run --rm $user_args "$@"
|
|
}
|
|
|
|
# _dc_exec: wrap docker compose exec command
|
|
#
|
|
# usage: _dc_exec [options] [ARGS...]
|
|
#
|
|
# options: docker compose exec command options
|
|
# ARGS : docker compose exec command arguments
|
|
function _dc_exec() {
|
|
_set_user
|
|
|
|
echo "🐳(compose) exec command: '\$@'"
|
|
|
|
user_args="--user=$USER_ID"
|
|
if [ -z $USER_ID ]; then
|
|
user_args=""
|
|
fi
|
|
|
|
_docker_compose exec $user_args "$@"
|
|
}
|
|
|
|
# _django_manage: wrap django's manage.py command with docker compose
|
|
#
|
|
# usage : _django_manage [ARGS...]
|
|
#
|
|
# ARGS : django's manage.py command arguments
|
|
function _django_manage() {
|
|
_dc_run "app-dev" python manage.py "$@"
|
|
}
|
|
|
|
# _set_openstack_project: select an OpenStack project from the openrc files defined in the
|
|
# terraform directory.
|
|
#
|
|
# usage: _set_openstack_project
|
|
#
|
|
# If necessary the script will prompt the user to choose a project from those available
|
|
function _set_openstack_project() {
|
|
|
|
declare prompt
|
|
declare -a projects
|
|
declare -i default=1
|
|
declare -i choice=0
|
|
declare -i n_projects
|
|
|
|
# List projects by looking in the "./env.d/terraform" directory
|
|
# and store them in an array
|
|
read -r -a projects <<< "$(
|
|
find "${TERRAFORM_DIRECTORY}" -maxdepth 1 -mindepth 1 -type d |
|
|
sed 's|'"${TERRAFORM_DIRECTORY}\/"'||' |
|
|
xargs
|
|
)"
|
|
nb_projects=${#projects[@]}
|
|
|
|
if [[ ${nb_projects} -le 0 ]]; then
|
|
echo "There are no OpenStack projects defined..." >&2
|
|
echo "To add one, create a subdirectory in \"${TERRAFORM_DIRECTORY}\" with the name" \
|
|
"of your project and copy your \"openrc.sh\" file into it." >&2
|
|
exit 10
|
|
fi
|
|
|
|
if [[ ${nb_projects} -gt 1 ]]; then
|
|
prompt="Select an OpenStack project to target:\\n"
|
|
for (( i=0; i<nb_projects; i++ )); do
|
|
prompt+="[$((i+1))] ${projects[$i]}"
|
|
if [[ $((i+1)) -eq ${default} ]]; then
|
|
prompt+=" (default)"
|
|
fi
|
|
prompt+="\\n"
|
|
done
|
|
prompt+="If your OpenStack project is not listed, add it to the \"env.d/terraform\" directory.\\n"
|
|
prompt+="Your choice: "
|
|
read -r -p "$(echo -e "${prompt}")" choice
|
|
|
|
if [[ ${choice} -gt nb_projects ]]; then
|
|
(>&2 echo "Invalid choice ${choice} (should be <= ${nb_projects})")
|
|
exit 11
|
|
fi
|
|
|
|
if [[ ${choice} -le 0 ]]; then
|
|
choice=${default}
|
|
fi
|
|
fi
|
|
|
|
project=${projects[$((choice-1))]}
|
|
# Check that the openrc.sh file exists for this project
|
|
if [ ! -f "${TERRAFORM_DIRECTORY}/${project}/openrc.sh" ]; then
|
|
(>&2 echo "Missing \"openrc.sh\" file in \"${TERRAFORM_DIRECTORY}/${project}\". Check documentation.")
|
|
exit 12
|
|
fi
|
|
|
|
echo "${project}"
|
|
}
|