diff --git a/firewall/firewall-add b/firewall/firewall-add index 2efd706..8099090 100755 --- a/firewall/firewall-add +++ b/firewall/firewall-add @@ -8,6 +8,7 @@ debug() { } # Task type variables +DEBUG=0 ROUTE=$ROUTE HOST=$HOST PREROUTING=$PREROUTING @@ -26,6 +27,8 @@ set | grep SOURCE set | grep TARGET set | grep ROLES +SERVICE_FILES=$SERVICE_FILES + # turn on debug mode by extra option "debug" if [[ "$(echo "$EXTRA_OPTIONS" | grep debug)" != "" ]] ; then DEBUG=1 @@ -38,12 +41,14 @@ name_resolver() { local DNS_IP local DNS=$1 APP_IP="" + UP_COUNT=0; + SRV_COUNT=0; 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 @@ -56,8 +61,31 @@ name_resolver() { fi done done - UP=$UPS - fi + UP=$UPS + fi + + UP_COUNT=$((UP_COUNT+$(echo $UP | wc -w))); + + for SRV_FILE in $(echo $SERVICE_FILES); do + CONTAINER_NAMES=$(jq -r .containers[].NAME $SRV_FILE); + for NAME in $(echo $CONTAINER_NAMES); do + NEWNAME=$(echo $NAME | cut -d "-" -f1); + if [ "$D" == "$NEWNAME" ]; then + if [[ "$ROLES" != "null" && ! -z "$ROLES" ]]; then + C_ROLES=$(jq -r --arg NAME "$NAME" '.containers[] | select(.NAME==$NAME)' $SRV_FILE | jq -r .ROLES); + for ROLE in $(echo $ROLES); do + # TODO, ha C_ROLES tobb erteket tartalmaz + if [ "$ROLE" == "$C_ROLES" ]; then + SRV_COUNT=$((SRV_COUNT+1)); + fi + done + else + SRV_COUNT=$((SRV_COUNT+1)); + fi; + fi; + + done; + done if [ ! -z "$UP" ] ; then for D_IP in `echo $UP` ; @@ -71,6 +99,18 @@ name_resolver() { fi done; + + if [ $UP_COUNT -lt $SRV_COUNT ]; then + if [ "$2" == "" ]; then RETRIES=0; + else RETRIES=$2; + fi; + if [ $RETRIES -le $RETRIES_NUMBER ]; then + debug "Try to reread container names at $RETRIES"; + sleep 1; + RETRIES=$((RETRIES+1)); + name_resolver $DNS $RETRIES; + fi + fi; } if [[ -z "$TYPE" ]]; then