Files
domain-check/entrypoint.sh

168 lines
5.2 KiB
Bash
Executable File

#!/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
D=$(echo $D | cut -d "-" -f1)
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 U in $(echo $UP); do
for ROLE in $(echo $ROLES); do
FILTERED_BY_ROLE=$(docker inspect $U -f '{{.Config.Labels.roles}}' | uniq | grep $ROLE)
if [[ "$(echo $FILTERED_BY_ROLE)" != "" ]]; then
UPS="$UPS $U";
fi
done
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";
if [[ -z "$APP_IP" ]]; then
debug "No any IP address found for SOURCE: $SOURCE, try again to resolv";
name_resolver $i;
debug "source ip is $APP_IP";
if [[ -z "$APP_IP" ]]; then
debug "No any IP address found for SOURCE: $SOURCE, giving up";
fi
fi
SOURCE_IP=$APP_IP;
done
fi
IDX=0
for i in $(echo $TARGET) ; do
name_resolver $i;
debug "target ip is $APP_IP";
if [[ -z "$APP_IP" ]]; then
debug "No any IP address found for TARGET: $TARGET, try again to resolv";
name_resolver $i;
debug "Target ip is $APP_IP";
if [[ -z "$APP_IP" ]]; then
debug "No any IP address found for TARGET: $TARGET, giving up";
fi
fi
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