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
##
#
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' cant 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 <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:
@ -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
;;