Files
framework-scheduler/scripts/scheduler/entrypoint.sh
2024-07-20 16:41:30 +02:00

136 lines
4.3 KiB
Bash

#! /bin/sh
cd /scripts
DOCKER_REGISTRY_URL=${DOCKER_REGISTRY_URL:-registry.format.hu}
USER_INIT_PATH=$USER_INIT_PATH
WEB_SERVER=${WEB_SERVER:-webserver}
WEB_IMAGE=${WEB_IMAGE:-web-installer}
WEBSERVER_PORT=${WEBSERVER_PORT:-80}
REDIS_SERVER=${REDIS_SERVER:-redis}
REDIS_PORT=${REDIS_PORT:-6379}
REDIS_IMAGE=${REDIS_IMAGE:-redis}
SOURCE=$SOURCE
SMARTHOST_PROXY_PATH=$SMARTHOST_PROXY_PATH
GIT_URL=$GIT_URL
TOKEN=$TOKEN
REPO=$REPO
# scheduler settings
CURL_SLEEP_SHORT=${CURL_SLEEP_SHORT:-5}
CURL_RETRIES=${CURL_RETRIES:-360}
SCHEDULER_SERVICEFILE_GENERATE_TEST=${SCHEDULER_SERVICEFILE_GENERATE_TEST:-false}
check_redis_availability() {
REDIS_SERVER="$1"
REDIS_PORT="$2"
CURL_RETRIES="$3"
CURL_SLEEP_SHORT="$4"
for retries in $(seq 0 "$((CURL_RETRIES + 1))"); do
if [ "$retries" -le "$CURL_RETRIES" ]; then
CHECK_REDIS_SERVER="redis-cli -h '$REDIS_SERVER' -p '$REDIS_PORT' PING"
REDIS_RESPONSE="$(eval "$CHECK_REDIS_SERVER")"
# echo "$REDIS_SERVER server's reply to PING: $REDIS_RESPONSE"
if [ "$REDIS_RESPONSE" = "PONG" ]; then
echo "Connected to $REDIS_SERVER:$REDIS_PORT"
break
else
sleep "$CURL_SLEEP_SHORT"
fi
else
echo "Couldn't reach server at $REDIS_SERVER:$REDIS_PORT after [$CURL_RETRIES] retries, exiting."
exit 1
fi
done
}
start_redis () {
/usr/bin/docker run -d --name $REDIS_SERVER $DOCKER_REGISTRY_URL/$REDIS_IMAGE:latest
}
start_webserver () {
/usr/bin/docker run -d --name $WEB_SERVER $DOCKER_REGISTRY_URL/$WEB_IMAGE:latest
}
###
# CHECKING SYSTEM ENVIRONMENTS
## DOCKER VARIABLES
## VERSION CHECK
## FILESYSTEM VARIABLES
## PORTS VARIABLES
# REDIS_SERVER EXISTENCE
## REDIS_PORT EXISTENCE
## VERSION CHECK
start_redis
echo `date`" Redis initialized"
# WEBSERVER EXISTENCE
## WEBSERVER_PORT EXISTENCE
## VERSION CHECK
start_webserver
echo `date`" Webserver initialized"
# SUMMARY
# TESTING
sleep 86400
exit
# poll redis infinitely for scheduler jobs
check_redis_availability $REDIS_SERVER $REDIS_PORT $CURL_RETRIES $CURL_SLEEP_SHORT
echo `date`" Scheduler initialized, starting listening for events"
while true; do
IDS=""
# GET DEPLOYMENT IDs FROM generate key
IDS=$(redis-cli -h $REDIS_SERVER -p $REDIS_PORT SMEMBERS web_in)
if [[ "$IDS" != "0" && "$IDS" != "" ]]; then
# PROCESSING IDS
for I in $(echo $IDS); do
### READ DATA FROM REDIS
JSON=$(redis-cli -h $REDIS_SERVER -p $REDIS_PORT GET $I | base64 -d)
DOMAIN=$(echo "$JSON" | jq -r '.DOMAIN')
TYPE=$(echo "$JSON" | jq -r '.TYPE')
ACTION=$(echo "$JSON" | jq -r '.ACTION')
PAYLOAD=$(echo "$JSON" | jq -r '.PAYLOAD')
JSON_TARGET=$(echo $JSON | jq -rc .'STATUS="0"' | base64 -w0);
redis-cli -h $REDIS_SERVER -p $REDIS_PORT SET $I "$JSON_TARGET";
if [ "$TYPE" == "DOMAIN" ]; then
/scripts/zone2git.sh "$I" "$DOMAIN" "$ACTION" "$PAYLOAD" "$GIT_URL" "$TOKEN" "$REPO";
elif [ "$TYPE" == "VPN" ]; then
/scripts/create_vpn.sh "$I" "$DOMAIN" "$ACTION" "$PAYLOAD" "$REDIS_SERVER" "$REDIS_PORT" "$NAMESPACE" "$KUBERNETES" "$KUBERNETES_ENVIRONMENT" "$USER_INIT_PATH" "$VERSIONS_CONFIG_FILE" "$DOCKER_REGISTRY_URL" "$SMARTHOST_PROXY_PATH" "$MAIN_DOMAIN" "$SOURCE" "$PROXY_DELAY";
fi
if [ "$?" == "0" ]; then
JSON_TARGET=$(echo $JSON | jq -rc .'STATUS="1"' | base64 -w0);
else
JSON_TARGET=$(echo $JSON | jq -rc .'STATUS="2"' | base64 -w0);
fi
redis-cli -h $REDIS_SERVER -p $REDIS_PORT SET $I "$JSON_TARGET";
# MOVE ID from generate into generated
redis-cli -h $REDIS_SERVER -p $REDIS_PORT SREM web_in $I
redis-cli -h $REDIS_SERVER -p $REDIS_PORT SADD web_out $I
done
fi
sleep 1
done