#!/bin/sh # Debugging function debug() { if [ $DEBUG -eq 1 ]; then echo "DEBUG: "$1 $2 $3 fi; } SOURCE=$PROXY TARGET=$TARGET DOMAIN=$DOMAIN PORT=$PORT PUBLIC_PROXY_PATH=$PUBLIC_PROXY_PATH SMARTHOST_PROXY_PATH=$SMARTHOST_PROXY_PATH # ADDITIONAL VARIABLES ROLES=$ROLES # turn on debug mode by extra option "debug" if [[ "$(echo "$EXTRA_OPTIONS" | grep debug)" != "" ]] ; then DEBUG=1 fi; # finding IPv4 addresses from application names. name_resolver() { local DNS=$1 APP_IP="" echo "DNS: "$DNS; for D in $(echo $DNS); do UP=$(docker ps --format '{{.Names}}\t{{.Status}}' | grep Up | awk '{print $1}' | grep $D"-") ; # filtering for ROLES variables if exists. if [[ "$ROLES" != "null" && ! -z "$ROLES" ]]; then UPS="" for ROLE in $(echo $ROLES); do FILTERED_BY_ROLE=$(docker inspect $UP -f '{{.Name}} {{.Config.Labels.roles}}' | uniq | grep $ROLE| awk '{print $1}') if [[ "$(echo $FILTERED_BY_ROLE)" != "" ]]; then UPS="$UPS $FILTERED_BY_ROLE"; fi done UP=$UPS fi if [ ! -z "$UP" ] ; then for D_IP in `echo $UP` ; do DNS_IP=$(docker inspect $D_IP -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'); APP_IP="$APP_IP $DNS_IP"; echo "APP_IP: "$APP_IP; done else debug "no matching running process found for indentiying application IP addresses, exiting." exit; fi done; } # GETTING APPLICATIONS IP ADDRESSES if [ ! -z "$SOURCE" ]; then for i in $(echo $SOURCE) ; do name_resolver $i; debug "source ip is $APP_IP"; SOURCE_IP=$APP_IP; done fi IDX=0 for i in $(echo $TARGET) ; do name_resolver $i; debug "target ip is $APP_IP"; for IP in $(echo $APP_IP); do IDX=$(expr 1 + $IDX) eval TARGET_IP_$IDX=$IP; done; done # CHECKING WHETHER IS IT NEEDED TO USE PUBLIC PROXY SERVICE if [ "$PUBLIC_PROXY_PATH" != "" ]; then # check domain config file exits PUBLIC_DOMAIN=$(jq -r .DOMAIN $PUBLIC_PROXY_PATH/$DOMAIN 2>/dev/null) PUBLIC_IP=$(jq -r .LOCAL_IP $PUBLIC_PROXY_PATH/$DOMAIN 2>/dev/null) if [[ -f "$PUBLIC_PROXY_PATH/$DOMAIN" && "$PUBLIC_DOMAIN" == "$DOMAIN" && "$PUBLIC_IP" == "$SOURCE_IP" ]]; then echo "Nothing to do." else #Create public proxy domain file echo ' { "DOMAIN": "'$DOMAIN'", "ALIASES_HTTP": [ ], "ALIASES_HTTPS": [ ], "LOCAL_IP": "'$SOURCE_IP'", "HTTP_PORT": "80", "HTTPS_PORT": "443", "ERROR_PAGE": "", "REDIRECT_HTTP": "", "REDIRECT_HTTPS": "" } ' | jq -r . > $PUBLIC_PROXY_PATH/$DOMAIN fi fi # CHECKING WHETHER IS IT NEEDED TO USE SMARTHOST PROXY SERVICE if [ "$SMARTHOST_PROXY_PATH" != "" ]; then # check domain config file exits SMARTHOST_DOMAIN=$(jq -r .DOMAIN $SMARTHOST_PROXY_PATH/$DOMAIN 2>/dev/null) SMARTHOST_IP=$(jq -r .LOCAL_IP $SMARTHOST_PROXY_PATH/$DOMAIN 2>/dev/null) SMARTHOST_PORT=$(jq -r .HTTP_PORT $SMARTHOST_PROXY_PATH/$DOMAIN 2>/dev/null) if [[ -f "$SMARTHOST_PROXY_PATH/$DOMAIN" && "$SMARTHOST_DOMAIN" == "$DOMAIN" && "$SMARTHOST_IP" == "$TARGET_IP_1" && "$SMARTHOST_PORT" == "$PORT" ]]; then echo "Nothing to do." else #Create public proxy domain file echo ' { "DOMAIN": "'$DOMAIN'", "ALIASES_HTTP": [ ], "ALIASES_HTTPS": [ ], "LOCAL_IP": "'$TARGET_IP_1'", "HTTP_PORT": "", "HTTPS_PORT": "'$PORT'", "ERROR_PAGE": "", "REDIRECT_HTTP": "https://'$DOMAIN'", "REDIRECT_HTTPS": "", "MAX_BODY_SIZE": "512M" } ' | jq -r . > $SMARTHOST_PROXY_PATH/$DOMAIN fi fi