From 32191e731953fd1cc91ecd967b3aa5a247612d0c Mon Sep 17 00:00:00 2001 From: gyurix Date: Wed, 28 Sep 2022 19:30:55 +0000 Subject: [PATCH] create entrypoint for checking an/or generating domain files both public and smarthost proxies --- entrypoint.sh | 152 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100755 entrypoint.sh diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100755 index 0000000..e1b69d3 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,152 @@ +#!/bin/sh + +# Debugging function +debug() { + if [ $DEBUG -eq 1 ]; then + echo "DEBUG: "$1 $2 $3 + fi; +} + +SOURCE=$SMARTHOST_PROXY_IP +TARGET=$TARGET +DOMAIN=$DOMAIN +PORT=$PORT +PUBLIC_PROXY_PATH=$PUBLIC_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_IP + 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 '{{.Config.Labels.roles}}' | uniq | grep $ROLE) + if [[ "$(echo $FILTERED_BY_ROLE)" != "" ]]; then + UPS="$UPS $UP"; + 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 + IDX=0 + for i in $(echo $SOURCE) ; do + + name_resolver $i; + debug "source ip is $APP_IP"; + for IP in $(echo $APP_IP); do + IDX=$(expr 1 + $IDX) + eval SOURCE_IP_$IDX=$IP; + done; + + 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 + + if [[ -f "$PUBLIC_PROXY_PATH/$DOMAIN" ]] || \ + [[ "$(jq -r .DOMAIN $PUBLIC_PROXY_PATH/$DOMAIN)" == "$DOMAIN" && "$(jq -r .LOCAL_IP $PUBLIC_PROXY_PATH/$DOMAIN)" == "$SOURCE" ]]; then + + echo "Nothing to do." + else + #Create public proxy domain file + + echo ' + { + "DOMAIN": "'$DOMAIN'", + "ALIASES_HTTP": [ ], + "ALIASES_HTTPS": [ ], + "LOCAL_IP": "'$SOURCE'", + "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 + + if [[ -f "$SMARTHOST_PROXY_PATH/$DOMAIN" ]] || \ + [[ "$(jq -r .DOMAIN $SMARTHOST_PROXY_PATH/$DOMAIN)" == "$DOMAIN" && "$(jq -r .LOCAL_IP $SMARTHOST_PROXY_PATH/$DOMAIN)" == "$TARGET" \ + && "$(jq -r .HTTP_PORT $SMARTHOST_PROXY_PATH/$DOMAIN)" == "$PORT"]]; then + + echo "Nothing to do." + else + #Create public proxy domain file + + echo ' + { + "DOMAIN": "'$DOMAIN'", + "ALIASES_HTTP": [ ], + "ALIASES_HTTPS": [ ], + "LOCAL_IP": "'$TARGET'", + "HTTP_PORT": "'$PORT'", + "HTTPS_PORT": "443", + "ERROR_PAGE": "", + "REDIRECT_HTTP": "https://'$DOMAIN'", + "REDIRECT_HTTPS": "", + "MAX_BODY_SIZE": "512M" + } + ' | jq -r . > $SMARTHOST_PROXY_PATH/$DOMAIN + fi +fi +