From 5a01b5f1fc991044920a84bf97959c2e4c21b7d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20R=C3=B6mhild?= Date: Fri, 11 Nov 2016 00:12:54 +0100 Subject: add docker support --- docker/lib/base_config.sh | 22 ++++++++++++++ docker/lib/base_functions.sh | 72 ++++++++++++++++++++++++++++++++++++++++++++ docker/lib/config.sh | 1 + docker/lib/functions.sh | 1 + 4 files changed, 96 insertions(+) create mode 100644 docker/lib/base_config.sh create mode 100644 docker/lib/base_functions.sh create mode 100644 docker/lib/config.sh create mode 100644 docker/lib/functions.sh (limited to 'docker/lib') diff --git a/docker/lib/base_config.sh b/docker/lib/base_config.sh new file mode 100644 index 000000000..803c1db47 --- /dev/null +++ b/docker/lib/base_config.sh @@ -0,0 +1,22 @@ +readonly HOSTIP=$(hostname -i) +readonly HOSTNAME=$(hostname -f) +readonly DOMAINNAME=$(hostname -d) + +readonly DOCKER_LIB="${EJABBERD_HOME}/docker/lib" +readonly ERLANGCOOKIEFILE="${EJABBERD_HOME}/.erlang.cookie" +readonly EJABBERDCTL="/sbin/ejabberdctl" +readonly CONFIGDIR="${EJABBERD_HOME}/conf" +readonly CONFIGTMPDIR="${EJABBERD_HOME}/docker/conf" +readonly SSLCERTDIR="${EJABBERD_HOME}/ssl" +readonly SSLCERTHOST="${SSLCERTDIR}/host.pem" +readonly LOGDIR="/var/log/ejabberd" +readonly FIRST_START_DONE_FILE="${EJABBERD_HOME}/first-start-done" +readonly CLUSTER_NODE_FILE="${EJABBERD_HOME}/cluster-done" + +readonly PYTHON_JINJA2="import os; +import sys; +import jinja2; +sys.stdout.write( + jinja2.Template + (sys.stdin.read() + ).render(env=os.environ))" diff --git a/docker/lib/base_functions.sh b/docker/lib/base_functions.sh new file mode 100644 index 000000000..d7bf97266 --- /dev/null +++ b/docker/lib/base_functions.sh @@ -0,0 +1,72 @@ +is_set() { + local var=$1 + + [[ -n $var ]] +} + + +is_zero() { + local var=$1 + + [[ -z $var ]] +} + + +file_exist() { + local file=$1 + + [[ -e $file ]] +} + + +is_true() { + local var=${1,,} + local choices=("yes" "1" "y" "true") + for ((i=0;i < ${#choices[@]};i++)) { + [[ "${choices[i]}" == $var ]] && return 0 + } + return 1 +} + + +log() { + local message=$1 + echo $message +} + + +# overwrite this function to get hostname from other sources +# like dns or etcd +get_nodename() { + log ${HOSTNAME} +} + + +join_cluster() { + local cluster_node=$1 + + is_zero ${cluster_node} \ + && exit 0 + + log "Join cluster..." + + local erlang_node_name=${ERLANG_NODE%@*} + local erlang_cluster_node="${erlang_node_name}@${cluster_node}" + + response=$(${EJABBERDCTL} ping ${erlang_cluster_node}) + while [ "$response" != "pong" ]; do + log "Waiting for ${erlang_cluster_node}..." + sleep 2 + response=$(${EJABBERDCTL} ping ${erlang_cluster_node}) + done + + log "Join cluster at ${erlang_cluster_node}... " + NO_WARNINGS=true ${EJABBERDCTL} join_cluster $erlang_cluster_node + + if [ $? -eq 0 ]; then + touch ${CLUSTER_NODE_FILE} + else + log "cloud not join cluster" + exit 1 + fi +} diff --git a/docker/lib/config.sh b/docker/lib/config.sh new file mode 100644 index 000000000..6b9cbbb12 --- /dev/null +++ b/docker/lib/config.sh @@ -0,0 +1 @@ +# Overridable file diff --git a/docker/lib/functions.sh b/docker/lib/functions.sh new file mode 100644 index 000000000..6b9cbbb12 --- /dev/null +++ b/docker/lib/functions.sh @@ -0,0 +1 @@ +# Overridable file -- cgit v1.2.3