#!/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&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}" }