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.
This commit is contained in:
Josef Friedrich 2016-08-30 23:24:58 +02:00
parent afb8c05cf9
commit 35bfb4a499
1 changed files with 94 additions and 19 deletions

113
setup.sh
View File

@ -2,14 +2,41 @@
## ##
# Wrapper for various setup scripts included in the docker-mailserver # Wrapper for various setup scripts included in the docker-mailserver
## #
if [ -z "$DOCKER_IMAGE" ]; then INFO=$(docker ps \
DOCKER_IMAGE=tvial/docker-mailserver:latest --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 fi
_inspect() {
if _docker_image_exists "$IMAGE_NAME"; then
echo "Image: $IMAGE_NAME"
else
echo "Image: '$IMAGE_NAME' cant be found."
fi
if [ -n "$CONTAINER_NAME" ]; then
echo "Container: $CONTAINER_NAME"
else
echo "Container: Not running, please start docker-mailserver."
fi
}
_usage() { _usage() {
echo "Usage: $0 <subcommand> <subcommand> [args] echo "Usage: $0 [-i IMAGE_NAME] [-c CONTAINER_NAME] <subcommand> <subcommand> [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: SUBCOMMANDS:
@ -27,16 +54,57 @@ SUBCOMMANDS:
debug: debug:
$0 debug fetchmail $0 debug fetchmail
$0 debug show-mail-logs
$0 debug inspect
$0 debug login
" "
exit 1 exit 1
} }
_docker() { _docker_image_exists() {
docker run --rm \ if docker history -q "$1" >/dev/null 2>&1; then
-v "$(pwd)/config":/tmp/docker-mailserver \ return 0
-ti $DOCKER_IMAGE $@ 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 case $1 in
email) email)
@ -45,17 +113,15 @@ case $1 in
add) add)
shift shift
_docker addmailuser $@ _docker_image addmailuser $@
;; ;;
del) del)
shift shift
_docker delmailuser $@ _docker_image delmailuser $@
;; ;;
list) list)
_docker listmailuser _docker_image listmailuser
;; ;;
*) *)
_usage _usage
;; ;;
@ -66,13 +132,10 @@ case $1 in
shift shift
case $1 in case $1 in
dkim) dkim)
shift _docker_image generate-dkim-config
_docker generate-dkim-config
;; ;;
ssl) ssl)
shift _docker_image generate-ssl-certificate
_docker generate-ssl-certificate
;; ;;
*) *)
_usage _usage
@ -84,7 +147,19 @@ case $1 in
shift shift
case $1 in case $1 in
fetchmail) 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 esac
;; ;;