Skip to content

Instantly share code, notes, and snippets.

@teemow
Created April 8, 2014 09:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save teemow/10105820 to your computer and use it in GitHub Desktop.
Save teemow/10105820 to your computer and use it in GitHub Desktop.

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment