1
0
mirror of https://github.com/docker-mailserver/docker-mailserver.git synced 2025-08-07 23:03:10 +02:00

Improve and extend setup.sh (#295)

* 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.

* Add tests for setup.sh
This commit is contained in:
Josef Friedrich
2016-09-01 12:10:23 +02:00
committed by Thomas VIAL
parent ee0c4244cc
commit ac36272d97
2 changed files with 162 additions and 19 deletions

118
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' 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 <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 <commands>
"
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,24 @@ 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)
shift
if [ -z "$1" ]; then
_docker_container /bin/bash
else
_docker_container /bin/bash -c "$@"
fi
;;
*)
_usage
;;
esac
;;