diff --git a/update-containers.sh b/update-containers.sh new file mode 100755 index 0000000..fe05658 --- /dev/null +++ b/update-containers.sh @@ -0,0 +1,97 @@ +#!/bin/bash + +exec_update() { + docker-compose build --pull + docker-compose pull + docker-compose up -d +} + +exec_stop() { + docker-compose stop +} + +exec_start() { + docker-compose up -d +} + +is_service() { + [[ "$(ls $1/docker-compose.yml)" ]] +} +get_all_services() { + echo $(find . -maxdepth 2 -name docker-compose.yml | while read line; do echo $(dirname $line | sed 's:^./::'); done) +} + +#set default function +declare -A list +func=exec_update + +declare -i count=0 +if [[ -z "$1" ]]; then + list[$func]+=$(get_all_services) +fi + +while [[ "$1" ]]; do + + case $1 in + start) + func=exec_start + if [[ -z "$2" && $count == 0 ]]; then + list[$func]+=$(get_all_services) + fi + ;; + stop) + func=exec_stop + if [[ -z "$2" && $count == 0 ]]; then + list[$func]+=$(get_all_services) + fi + ;; + update) + func=exec_update + if [[ -z "$2" && $count == 0 ]]; then + list[$func]+=$(get_all_services) + fi + ;; + *) + if is_service $1; then + list[$func]+="$1 " + else + echo Error: $1 is not recognized as a service or command + fi + ;; + esac + shift + count+=1 +done + +declare -i count=0 +if [[ ${list[exec_update]} ]]; then + echo To update: ${list[exec_update]} + count+=$(echo ${list[exec_update]} | wc -w) +fi +if [[ ${list[exec_start]} ]]; then + echo To start: ${list[exec_start]} + count+=$(echo ${list[exec_start]} | wc -w) +fi +if [[ ${list[exec_stop]} ]]; then + echo To stop: ${list[exec_stop]} + count+=$(echo ${list[exec_stop]} | wc -w) +fi +if [[ $count == 0 ]]; then + echo Nothing to do +else + echo $count operations to run +fi + +for func in ${!list[@]}; do + for service in ${list[$func]}; do + pushd $service >/dev/null + echo + echo "#######" $(basename $PWD) do $func + $func + popd >/dev/null + done +done + +if [[ "${list[exec_update]}" ]]; then + docker image prune -f +fi