173 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			173 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #! /bin/sh
 | |
| 
 | |
| cd /scripts
 | |
| 
 | |
| DOCKER_REGISTRY_URL=${DOCKER_REGISTRY_URL:-registry.format.hu}
 | |
| USER_INIT_PATH=$USER_INIT_PATH
 | |
| 
 | |
| FRAMEWORK_SCHEDULER_IMAGE=${FRAMEWORK_SCHEDULER_IMAGE:-framework-scheduler}
 | |
| FRAMEWORK_SCHEDULER_NAME=${FRAMEWORK_SCHEDULER_NAME:-framework-scheduler}
 | |
| FRAMEWORK_SCHEDULER_NETWORK=${FRAMEWORK_SCHEDULER_NETWORK:-framework-network}
 | |
| FRAMEWORK_SCHEDULER_NETWORK_SUBNET=${FRAMEWORK_SCHEDULER_NETWORK_SUBNET:-"172.19.255.0/24"}
 | |
| FRAMEWORK_SCHEDULER_VERSION=${FRAMEWORK_SCHEDULER_VERSION:-latest}
 | |
| 
 | |
| WEB_SERVER=${WEB_SERVER:-webserver}
 | |
| WEB_IMAGE=${WEB_IMAGE:-web-installer}
 | |
| WEBSERVER_PORT=${WEBSERVER_PORT:-8080}
 | |
| WEBSERVER_VERSION=${WEBSERVER_VERSION:-latest}
 | |
| REDIS_SERVER=${REDIS_SERVER:-redis-server}
 | |
| REDIS_PORT=${REDIS_PORT:-6379}
 | |
| REDIS_IMAGE=${REDIS_IMAGE:-redis}
 | |
| REDIS_VERSION=${REDIS_VERSION:-latest}
 | |
| 
 | |
| SOURCE=${SOURCE:-user-config}
 | |
| 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}
 | |
| 
 | |
| 
 | |
| if [[ -n "$DOCKER_REGISTRY_URL" && "$DOCKER_REGISTRY_URL" != "null" ]]; then
 | |
|     SETUP="/setup"
 | |
| else
 | |
|     SETUP="setup"
 | |
|     DOCKER_REGISTRY_URL=""
 | |
| fi
 | |
| 
 | |
| SETUP_VERSION="1.0.1"
 | |
| 
 | |
| # $DNS_PATH \
 | |
| #$CA_FILE \
 | |
| DNS_DIR="/etc/system/data/dns"
 | |
| DNS="--env DNS_DIR=$DNS_DIR"
 | |
| DNS_PATH="--volume $DNS_DIR:/etc/system/data/dns:rw"
 | |
| HOST_FILE=$DNS_DIR"/hosts.local"
 | |
| mkdir -p $DNS_DIR
 | |
| touch $HOST_FILE;
 | |
| 
 | |
| CA_PATH=/etc/system/data/ssl/certs
 | |
| CA="--env CA_PATH=$CA_PATH"
 | |
| CA_FILE="--volume $CA_PATH:$CA_PATH:ro"
 | |
| mkdir -p $CA_PATH
 | |
| 
 | |
| VOLUME_MOUNTS="-v SYSTEM_DATA:/etc/system/data -v USER_CONFIG:/etc/user/config:rw";
 | |
| 
 | |
| service_exec="/usr/bin/docker run --rm \
 | |
| $DNS \
 | |
| $CA \
 | |
| -w /etc/user/config/services/ \
 | |
| $VOLUME_MOUNTS \
 | |
| -v /var/run/docker.sock:/var/run/docker.sock \
 | |
| --env VOLUME_MOUNTS="$(echo $VOLUME_MOUNTS | base64 -w0)" \
 | |
| --env DOCKER_REGISTRY_URL=$DOCKER_REGISTRY_URL \
 | |
| --env SETUP_VERSION=$SETUP_VERSION \
 | |
| --env HOST_FILE=$HOST_FILE \
 | |
| $DOCKER_REGISTRY_URL$SETUP:$SETUP_VERSION"
 | |
| 
 | |
| 
 | |
| check_status() {
 | |
| 
 | |
|   # checking sytem status
 | |
|   if [ "$STATUS" != "1" ]; then
 | |
| 
 | |
| 	  RET=0;
 | |
| 	  DATE=$( date +"%Y%m%d%H%M")
 | |
| 	  TASK="system-status"
 | |
| 	  SYSTEM_STATUS=$(ls /etc/user/config/services/*.json |grep -v service-framework.json)
 | |
| 	        INSTALLED_SERVICES=$(ls /etc/user/config/services/*.json );
 | |
| 	        SERVICES="";
 | |
| 	        for SERVICE in $(echo $INSTALLED_SERVICES); do
 | |
| 	      	  CONTENT=$(cat $SERVICE | base64 -w0);
 | |
| 	      	  if [ "$SERVICES" != "" ]; then
 | |
| 	      		  SERVICES=","$SERVICES;
 | |
| 	        	  fi;
 | |
| 	      	  SERVICES=$SERVICES'"'$(cat $SERVICE | jq -r .main.SERVICE_NAME)'": "'$CONTENT'"';
 | |
| 	        done
 | |
| 	  if [ "$SYSTEM_STATUS" != "" ]; then
 | |
| 	          STATUS="1";
 | |
| 	  else
 | |
| 	          STATUS="2";
 | |
| 	  fi
 | |
| 	  echo '{ "STATUS": "'$STATUS'", "INSTALLED_SERVICES": {'$SERVICES'} }';
 | |
| 	
 | |
| 	  JSON_TARGET=$(echo '{ "DATE": "'$DATE'", "STATUS": "'$STATUS'", "INSTALLED_SERVICES": {'$SERVICES'} }' | jq -r . | base64 -w0);
 | |
| 	
 | |
| 	 
 | |
| 	
 | |
| 	 redis-cli -h $REDIS_SERVER -p $REDIS_PORT SET $TASK "$JSON_TARGET";
 | |
| 	 redis-cli -h $REDIS_SERVER -p $REDIS_PORT sadd scheduler_in "$TASK";
 | |
|  fi
 | |
|  RET="";
 | |
| }
 | |
| 
 | |
| 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
 | |
| }
 | |
| 
 | |
| while true; do 
 | |
| 
 | |
|       TASKS=""
 | |
|       SLEEP=1;
 | |
| 
 | |
|       # GET DEPLOYMENT IDs FROM generate key
 | |
|       TASKS=$(redis-cli -h $REDIS_SERVER -p $REDIS_PORT SMEMBERS scheduler_out)
 | |
|       if [[ "$TASKS" != "0" && "$TASKS" != "" ]]; then
 | |
| 
 | |
|          #   # PROCESSING TASK
 | |
|          #   for TASK in $(echo $TASKS); do
 | |
| 
 | |
|          #         ### READ TASKS FROM REDIS
 | |
|          #         JSON=$(redis-cli -h $REDIS_SERVER -p $REDIS_PORT GET $TASK | base64 -d)
 | |
| 
 | |
|          #         JSON_TARGET=$(echo $JSON | jq -rc .'STATUS="0"' | base64 -w0);
 | |
|          #         redis-cli -h $REDIS_SERVER -p $REDIS_PORT SET $TASK "$JSON_TARGET";
 | |
| 
 | |
|          #         execute_task $TASK $JSON &
 | |
|          #         
 | |
|          #         # MOVE TASK from generate into generated
 | |
|          #         redis-cli -h $REDIS_SERVER -p $REDIS_PORT SREM web_in $TASK
 | |
|          #         redis-cli -h $REDIS_SERVER -p $REDIS_PORT SADD web_out $TASK
 | |
| 
 | |
|          #   done
 | |
| 	 echo "No tasks found."
 | |
|       fi
 | |
|       
 | |
|       if [[ "$RET" == "" ]]; then
 | |
| 	        SLEEP=$((SLEEP+5))
 | |
| 		sleep $SLEEP;
 | |
|       		check_status
 | |
|       fi
 | |
|       
 | |
|       sleep 1
 | |
| done
 |