Created
April 15, 2015 08:54
-
-
Save psi-4ward/215cef0681329fdc5ae7 to your computer and use it in GitHub Desktop.
Service Discovery for Docker to update PowerDNS MySQL
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# watch events until infinity | |
UNTIL=99999999999 | |
# respect events 30sec in the past to not forget | |
# started containers AFTER "register running" but BEFORE event listener starts | |
SINCE=$(expr `date +%s` - 30) | |
DOMAIN=fubar | |
PDNS=powerdns | |
# clear oldrecords | |
docker exec $PDNS manage delrecord "$HOSTNAME-%" | |
# register all current running containers | |
docker ps -q \ | |
| while read -r LINE | |
do | |
CID=`docker inspect --format '{{ .Id }}' $LINE 2>/dev/null` || continue; | |
NAME=`docker inspect --format '{{ .Name }}' $LINE 2>/dev/null` || continue; | |
NAME=${NAME:1} | |
IP=`docker inspect --format '{{ .NetworkSettings.IPAddress }}' $LINE` | |
docker exec $PDNS manage addrecord $DOMAIN $NAME A $IP 60 $HOSTNAME-$CID | |
done | |
# start watching for events | |
docker events --since=$SINCE --until=$UNTIL \ | |
| while read -r LINE | |
do | |
if [[ ! $LINE =~ ^(.+)\ (.+):\ \(from\ (.+)\)\ (.+)$ ]] ; then | |
echo no match: $LINE | |
continue; | |
fi | |
DATE="${BASH_REMATCH[1]}" | |
CID="${BASH_REMATCH[2]}" | |
EVENT="${BASH_REMATCH[4]}" | |
# Container started | |
if [ "$EVENT" = "start" ] ; then | |
# be failor tolereant cause of --since | |
NAME=`docker inspect --format '{{ .Name }}' $CID 2>/dev/null` || continue; | |
NAME=${NAME:1} | |
IP=`docker inspect --format '{{ .NetworkSettings.IPAddress }}' $CID` | |
# skip container without name or ip | |
if [ "$NAME" = "" ] || [ "$IP" = "" ] ; then | |
continue; | |
fi | |
docker exec $PDNS manage addrecord $DOMAIN $NAME A $IP 60 $HOSTNAME-$CID | |
fi | |
# Container stopped | |
if [ "$EVENT" = "die" ] ; then | |
docker exec $PDNS manage delrecord $HOSTNAME-$CID | |
fi | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment