From 35bfb4a499d35fc2617e3e074e0a367e999a72f5 Mon Sep 17 00:00:00 2001 From: Josef Friedrich Date: Tue, 30 Aug 2016 23:24:58 +0200 Subject: [PATCH] Improve and extend setup.sh Add subcommands 'debug show-mail-logs', 'inspect', 'login'. Add option '-c' to specify the name of the running container. Add option '-i' to specify the image name. --- setup.sh | 113 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 94 insertions(+), 19 deletions(-) diff --git a/setup.sh b/setup.sh index b47711c6..188a9f2a 100755 --- a/setup.sh +++ b/setup.sh @@ -2,14 +2,41 @@ ## # Wrapper for various setup scripts included in the docker-mailserver -## +# -if [ -z "$DOCKER_IMAGE" ]; then - DOCKER_IMAGE=tvial/docker-mailserver:latest +INFO=$(docker ps \ + --no-trunc \ + --format="{{.Image}}\t{{.Names}}\t{{.Command}}" | \ + grep '/bin/sh -c /usr/local/bin/start-mailserver.sh') + +IMAGE_NAME=$(echo $INFO | awk '{print $1}') +CONTAINER_NAME=$(echo $INFO | awk '{print $2}') + +if [ -z "$IMAGE_NAME" ]; then + IMAGE_NAME=tvial/docker-mailserver:latest fi +_inspect() { + if _docker_image_exists "$IMAGE_NAME"; then + echo "Image: $IMAGE_NAME" + else + echo "Image: '$IMAGE_NAME' can’t be found." + fi + if [ -n "$CONTAINER_NAME" ]; then + echo "Container: $CONTAINER_NAME" + else + echo "Container: Not running, please start docker-mailserver." + fi +} + _usage() { - echo "Usage: $0 [args] + echo "Usage: $0 [-i IMAGE_NAME] [-c CONTAINER_NAME] [args] + +OPTIONS: + + -i IMAGE_NAME The name of the docker-mailserver image, by default + 'tvial/docker-mailserver:latest'. + -c CONTAINER_NAME The name of the running container. SUBCOMMANDS: @@ -27,16 +54,57 @@ SUBCOMMANDS: debug: $0 debug fetchmail + $0 debug show-mail-logs + $0 debug inspect + $0 debug login " exit 1 } -_docker() { - docker run --rm \ - -v "$(pwd)/config":/tmp/docker-mailserver \ - -ti $DOCKER_IMAGE $@ +_docker_image_exists() { + if docker history -q "$1" >/dev/null 2>&1; then + return 0 + else + return 1 + fi } +_docker_image() { + if ! _docker_image_exists "$IMAGE_NAME"; then + echo "Image '$IMAGE_NAME' not found. Pulling ..." + docker pull "$IMAGE_NAME" + fi + docker run \ + --rm \ + -v "$(pwd)/config":/tmp/docker-mailserver \ + -ti "$IMAGE_NAME" $@ +} + +_docker_container() { + if [ -n "$CONTAINER_NAME" ]; then + docker exec -ti "$CONTAINER_NAME" $@ + else + echo "The docker-mailserver is not running!" + exit 1 + fi +} + +while getopts ":c:i:" OPT; do + case $OPT in + c) + CONTAINER_NAME="$OPTARG" + ;; + i) + IMAGE_NAME="$OPTARG" + ;; + \?) + echo "Invalid option: -$OPTARG" >&2 + ;; + esac +done + +shift $((OPTIND-1)) + case $1 in email) @@ -45,17 +113,15 @@ case $1 in add) shift - _docker addmailuser $@ + _docker_image addmailuser $@ ;; del) shift - _docker delmailuser $@ + _docker_image delmailuser $@ ;; - list) - _docker listmailuser + _docker_image listmailuser ;; - *) _usage ;; @@ -66,13 +132,10 @@ case $1 in shift case $1 in dkim) - shift - _docker generate-dkim-config + _docker_image generate-dkim-config ;; - ssl) - shift - _docker generate-ssl-certificate + _docker_image generate-ssl-certificate ;; *) _usage @@ -84,7 +147,19 @@ case $1 in shift case $1 in fetchmail) - _docker debug-fetchmail + _docker_image debug-fetchmail + ;; + show-mail-logs) + _docker_container cat /var/log/mail/mail.log + ;; + inspect) + _inspect + ;; + login) + _docker_container /bin/bash + ;; + *) + _usage ;; esac ;;