ambassador.service
[Service]
Type=notify
ExecStart=/bin/bash /home/core/ambassador.sh %n registry 5000
ExecStop=/usr/bin/docker stop %n
ExecStopPost=/usr/bin/docker rm %n
NotifyAccess=all
[Unit]
Description=Ambassador Service
ambassador.sh
#!/bin/bash
NAME=$1
SERVICE=$2
PORT=$3
SOCKET_DIR="/tmp/ambassador-sockets"
SOCKET_PATH="$SOCKET_DIR/$NAME.socket"
# Start ambassador.
start_ambassador() {
echo "Starting ambassador container..."
docker run --name $NAME -v $SOCKET_DIR:$SOCKET_DIR -e ETCD_PORT_10000_TCP_ADDR=172.17.42.1 -e ETCD_PORT_10000_TCP_PORT=4001 -p 0.0.0.0::$PORT zyndiecate/ambassador $SERVICE $PORT $SOCKET_PATH
echo "Ambassador container started."
}
# Open a unix socket and wait for a response.
open_socket() {
# Ensure the socket dir exists.
mkdir -p $SOCKET_DIR
echo "Opening unix socket..."
SIGNAL=$(ncat -U -l $SOCKET_PATH)
if [ "$SIGNAL" != "" ]; then
echo "Received signal from ambassador container: $SIGNAL."
echo "Waiting for systemd..."
sleep 1
systemd-notify --ready --status="process $NAME activated"
echo "Notified systemd about process activation."
# Cleanup the socket, because we don't need it any more.
rm -rf $SOCKET_PATH
echo "Cleaned up socket directory."
fi
}
open_socket &
start_ambassador