2019-09-09 18:20:09 +00:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
# usage
|
|
|
|
usage() {
|
|
|
|
USAGE=$(cat <<EOF
|
2023-01-25 22:27:38 +00:00
|
|
|
Usage: docker_compose_update
|
2019-09-09 18:20:09 +00:00
|
|
|
|
2023-01-25 22:27:38 +00:00
|
|
|
Utility to batch update docker-compose deployments residing in sub folders of a base directory. Please see man docker_compose_update.
|
2019-09-09 18:20:09 +00:00
|
|
|
EOF
|
|
|
|
)
|
|
|
|
echo "$USAGE";
|
|
|
|
}
|
|
|
|
|
|
|
|
set -e;
|
|
|
|
|
|
|
|
declare -A DOCKER_COMPOSE_UPDATE_COMMANDS;
|
|
|
|
|
|
|
|
# check for config file
|
2022-07-10 16:29:44 +00:00
|
|
|
apply_config() {
|
|
|
|
local config=$1;
|
|
|
|
|
|
|
|
if [[ ! -f "$config" ]]; then
|
|
|
|
echo "No config file specified";
|
|
|
|
echo "";
|
|
|
|
usage;
|
|
|
|
exit 1;
|
|
|
|
fi
|
|
|
|
|
|
|
|
set -a;
|
2022-07-10 18:47:46 +00:00
|
|
|
# shellcheck disable=SC1090
|
2022-07-10 16:29:44 +00:00
|
|
|
source "$config";
|
|
|
|
set +a;
|
|
|
|
}
|
|
|
|
|
2019-09-09 18:20:09 +00:00
|
|
|
source_config() {
|
2023-01-25 22:27:38 +00:00
|
|
|
local configFallback=$1;
|
|
|
|
local configGlobalFallback=$2;
|
2022-07-10 16:29:44 +00:00
|
|
|
|
|
|
|
if [[ -f "$configFallback" ]]; then
|
|
|
|
apply_config "$configFallback";
|
2022-07-10 16:33:00 +00:00
|
|
|
return;
|
2022-07-10 16:29:44 +00:00
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ -f "$configGlobalFallback" ]]; then
|
|
|
|
apply_config "$configGlobalFallback";
|
2022-07-10 16:33:00 +00:00
|
|
|
return;
|
2022-07-10 16:29:44 +00:00
|
|
|
fi
|
2019-09-09 18:20:09 +00:00
|
|
|
}
|
2022-07-10 16:29:44 +00:00
|
|
|
|
2019-09-09 18:20:09 +00:00
|
|
|
apply_defaults() {
|
|
|
|
[[ -z ${DOCKER_COMPOSE_UPDATE_IGNORES} ]] && DOCKER_COMPOSE_UPDATE_IGNORES=();
|
2021-12-11 12:34:01 +00:00
|
|
|
[[ -z ${DOCKER_COMPOSE_UPDATE_COMMAND} ]] && DOCKER_COMPOSE_UPDATE_COMMAND="docker-compose down; docker-compose pull; docker-compose up -d;"
|
2019-09-09 18:20:09 +00:00
|
|
|
[[ -z ${DOCKER_COMPOSE_UPDATE_FAIL_ON_UPDATE_ERROR} ]] && DOCKER_COMPOSE_UPDATE_FAIL_ON_UPDATE_ERROR="false";
|
|
|
|
}
|
|
|
|
check_required() {
|
|
|
|
if [[ -z ${DOCKER_COMPOSE_UPDATE_BASEDIR} ]]; then
|
|
|
|
echo "DOCKER_COMPOSE_UPDATE_BASEDIR is required"
|
|
|
|
exit 1;
|
|
|
|
fi
|
|
|
|
if [[ -z ${DOCKER_COMPOSE_UPDATE_COMMAND} ]]; then
|
|
|
|
echo "DOCKER_COMPOSE_UPDATE_COMMAND is required"
|
|
|
|
exit 1;
|
|
|
|
fi
|
2023-01-25 08:42:22 +00:00
|
|
|
|
|
|
|
type docker-compose &> /dev/null || { echo "Requiring 'docker-compose' but it's not installed"; exit 1; }
|
2019-09-09 18:20:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
# check requirements
|
|
|
|
FALLBACK_CONFIG_FILE="${HOME}/.docker_compose_update.conf";
|
2022-07-10 16:29:44 +00:00
|
|
|
FALLBACK_CONFIG_GLOBAL_FILE="/etc/docker_compose_update.conf";
|
2023-01-25 22:27:38 +00:00
|
|
|
source_config "${FALLBACK_CONFIG_FILE}" "${FALLBACK_CONFIG_GLOBAL_FILE}";
|
2019-09-09 18:20:09 +00:00
|
|
|
apply_defaults;
|
|
|
|
check_required;
|
|
|
|
|
|
|
|
# DO NOT TOUCH BELOW
|
|
|
|
currentDir=$(pwd)
|
2022-07-10 18:47:46 +00:00
|
|
|
echo "Current directory is '${currentDir}'"
|
2019-09-09 18:20:09 +00:00
|
|
|
cd "${DOCKER_COMPOSE_UPDATE_BASEDIR}";
|
|
|
|
|
|
|
|
for dir in *; do
|
|
|
|
if [ -d "${dir}" ]; then
|
|
|
|
basename=$(basename "${dir}")
|
|
|
|
|
|
|
|
ignore=false;
|
|
|
|
for ignorePattern in "${DOCKER_COMPOSE_UPDATE_IGNORES[@]}"; do
|
|
|
|
if [[ "${basename}" == *"${ignorePattern}"* ]]; then
|
|
|
|
ignore=true;
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
if [[ "${ignore}" == "true" ]]; then
|
|
|
|
echo "Ignoring '${basename}'";
|
|
|
|
continue;
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo "Handling '${basename}'";
|
|
|
|
|
|
|
|
updateCommand=""
|
|
|
|
for cmd in "${!DOCKER_COMPOSE_UPDATE_COMMANDS[@]}"; do
|
|
|
|
if [[ "${cmd}" == "${basename}" ]]; then
|
|
|
|
updateCommand="${DOCKER_COMPOSE_UPDATE_COMMANDS[$cmd]}";
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
if [[ -n "${updateCommand}" ]]; then
|
|
|
|
echo "Using custom command '${updateCommand}'";
|
|
|
|
else
|
|
|
|
updateCommand="${DOCKER_COMPOSE_UPDATE_COMMAND}";
|
|
|
|
echo "Using command '${DOCKER_COMPOSE_UPDATE_COMMAND}'";
|
|
|
|
fi
|
|
|
|
|
|
|
|
cd "${basename}";
|
|
|
|
|
|
|
|
if [[ "${DOCKER_COMPOSE_UPDATE_FAIL_ON_UPDATE_ERROR}" == "false" ]]; then
|
|
|
|
set +e;
|
|
|
|
fi
|
|
|
|
|
2022-07-10 18:47:46 +00:00
|
|
|
# shellcheck disable=SC2034
|
2019-09-09 18:20:09 +00:00
|
|
|
res=$(eval "${updateCommand}")
|
|
|
|
|
|
|
|
if [[ "${DOCKER_COMPOSE_UPDATE_FAIL_ON_UPDATE_ERROR}" == "false" ]]; then
|
|
|
|
set -e;
|
|
|
|
fi
|
|
|
|
cd "../";
|
|
|
|
echo "";
|
|
|
|
fi
|
|
|
|
done
|