2 changed files with 95 additions and 1 deletions
@ -0,0 +1,88 @@ |
|||||
|
#!/usr/bin/env bash |
||||
|
# -*- coding: utf-8 -*- |
||||
|
# 2020-10-09 20:03:59 |
||||
|
|
||||
|
######################################################################################################################################################################################################################## |
||||
|
|
||||
|
sleep 3 |
||||
|
|
||||
|
# Read all commands |
||||
|
ARGS="" |
||||
|
IP="" |
||||
|
CIP="" |
||||
|
for ARG in $@; do |
||||
|
# Detect a *peers command |
||||
|
if [[ $ARG == *"peers="* ]]; then |
||||
|
# TODO detect quotes after the = |
||||
|
OPTION=$(expr "$ARG" : '\(.*=\)') |
||||
|
VALUE=$(expr "$ARG" : '.*=\(.*\)') |
||||
|
|
||||
|
echo "Detected ${OPTION}" |
||||
|
|
||||
|
# Split all peers |
||||
|
PEERS="" |
||||
|
IFS=',' read -ra ADDRS <<< "$VALUE" |
||||
|
for ADDR in "${ADDRS[@]}"; do |
||||
|
# Get HOST:PORT |
||||
|
HOST=$(expr "$ADDR" : '\(.*\):') |
||||
|
PORT=$(expr "$ADDR" : '.*:\(.*\)') |
||||
|
# Add directly IP peers |
||||
|
if [[ $HOST =~ ^[0-9\.]+$ ]]; then |
||||
|
PEERS=${PEERS:+${PEERS},}${HOST}:${PORT} |
||||
|
else |
||||
|
echo "Getting IPs for ${HOST}" |
||||
|
|
||||
|
# Get all tasks ips |
||||
|
typeset -i nbt |
||||
|
nbt=0 |
||||
|
SECONDS=0 |
||||
|
|
||||
|
echo "Waiting for the min peers count (${CLUSTER_SIZE})" |
||||
|
|
||||
|
while [[ $nbt -lt ${CLUSTER_SIZE} ]]; do |
||||
|
tips=$(dig @127.0.0.11 +short tasks.${HOST}) |
||||
|
nbt=$(echo $tips | wc -w) |
||||
|
[[ $SECONDS -gt 120 ]] && break |
||||
|
sleep 1 |
||||
|
done |
||||
|
for tip in $tips; do |
||||
|
echo "Adding peer: ${tip}" |
||||
|
PEERS=${PEERS:+${PEERS},}${tip}:${PORT} |
||||
|
|
||||
|
cip=$(grep ${tip} /etc/hosts | awk '{print $1}' | head -1) |
||||
|
if [[ -n "$cip" ]]; then |
||||
|
echo "Found current ip: ${cip}" |
||||
|
CIP="-ip=${cip}" |
||||
|
fi |
||||
|
done |
||||
|
|
||||
|
# TODO handle normal hostnames correctly, in case no service is found |
||||
|
# # Get all direct ips |
||||
|
# ips=$(dig @127.0.0.11 +short ${HOST}) |
||||
|
# for ip in $ips; do |
||||
|
# echo "Adding peer: ${ip}" |
||||
|
# PEERS=${PEERS:+${PEERS},}${ip}:${PORT} |
||||
|
# done |
||||
|
fi |
||||
|
done |
||||
|
|
||||
|
ARG=${PEERS:+${OPTION}${PEERS}} |
||||
|
# Detect an ip command |
||||
|
elif [[ $ARG == *"ip="* ]]; then |
||||
|
# Save the IP as a fallback |
||||
|
IP=$ARG |
||||
|
# Not writing the ip for now |
||||
|
ARG="" |
||||
|
fi |
||||
|
ARGS=${ARGS:+${ARGS} }$ARG |
||||
|
done |
||||
|
|
||||
|
if ! [ -z "$CIP" ]; then |
||||
|
ARGS=${ARGS:+${ARGS} }$CIP |
||||
|
elif ! [ -z "$IP" ]; then |
||||
|
ARGS=${ARGS:+${ARGS} }$IP |
||||
|
fi |
||||
|
|
||||
|
exec /entrypoint.sh $ARGS |
||||
|
|
||||
|
######################################################################################################################################################################################################################## |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue