Merge branch 'main' of git.format.hu:format/framework-scheduler

This commit is contained in:
2024-12-20 10:34:20 +01:00
3 changed files with 394 additions and 399 deletions

View File

@@ -230,7 +230,6 @@ check_volumes() {
/usr/bin/docker volume create USER_SECRET
RET=0
fi
echo $RET
}
@@ -239,31 +238,26 @@ check_dirs_and_files() {
RET=0
if [ ! -d "/var/tmp/shared" ]; then
mkdir -p /var/tmp/shared
chown -R 65534:65534 /var/tmp/shared
chmod -R g+rws /var/tmp/shared
setfacl -d -m g:65534:rw /var/tmp/shared
fi
if [ ! -d "/var/tmp/shared/input" ]; then
mkdir -p /var/tmp/shared/input
chown -R 65534:65534 /var/tmp/shared/input
chmod -R g+rws /var/tmp/shared/input
setfacl -d -m g:65534:rw /var/tmp/shared/input
fi
if [ ! -d "/var/tmp/shared/output" ]; then
mkdir -p /var/tmp/shared/output
chown -R 65534:65534 /var/tmp/shared/output
chmod -R g+rws /var/tmp/shared/output
setfacl -d -m g:65534:rw /var/tmp/shared/output
fi
# Setting file and directory permssion
chown -R 65534:65534 /var/tmp/shared
chmod -R g+rws /var/tmp/shared
setfacl -d -m g:65534:rw /var/tmp/shared
if [ ! -d "/etc/user/config/services/" ]; then
mkdir /etc/user/config/services/
mkdir -p /etc/user/config/services/
fi
if [ ! -d "/etc/user/config/services/tmp/" ]; then
mkdir /etc/user/config/services/tmp/
mkdir -p /etc/user/config/services/tmp/
if [[ -f "/etc/user/config/system.json" && -f "/etc/user/config/user.json" ]]; then
RET=1
@@ -271,13 +265,12 @@ check_dirs_and_files() {
fi
if [ ! -d "/etc/system" ]; then
mkdir "/etc/system"
mkdir -p"/etc/system"
fi
if [ ! -d "/etc/user/secret" ]; then
mkdir -p "/etc/user/secret"
fi
echo $RET
}
@@ -374,21 +367,6 @@ create_framework_json() {
"SERVICE_NAME": "framework"
},
"containers": [
{
"IMAGE": "redis:'$REDIS_VERSION'",
"NAME": "'$REDIS_SERVER'",
"UPDATE": "true",
"MEMORY": "64M",
"NETWORK": "'$FRAMEWORK_SCHEDULER_NETWORK'",
'$ADDITIONAL',
"PORTS":[
{ "SOURCE": "null",
"DEST": "6379",
"TYPE": "tcp"
}
],
"POST_START": []
},
{
"IMAGE": "'$DOCKER_REGISTRY_URL'/'$FRAMEWORK_SCHEDULER_IMAGE':'$FRAMEWORK_SCHEDULER_VERSION'",
"NAME": "'$FRAMEWORK_SCHEDULER_NAME'",
@@ -556,7 +534,9 @@ execute_task() {
if [ "$TASK_NAME" == "install" ]; then
JSON_TARGET=$(echo '{ "DATE": "'$DATE'", "INSTALL_STATUS": "0" }' | jq -r . | base64 -w0) # install has started
redis-cli -h $REDIS_SERVER -p $REDIS_PORT SET $TASK "$JSON_TARGET"
#redis-cli -h $REDIS_SERVER -p $REDIS_PORT SET $TASK "$JSON_TARGET"
install -m 664 -g 65534 /dev/null $SHARED/output/$TASK.json
echo $JSON_TARGET | base64 -d >$SHARED/output/$TASK.json
#if [ "$INSTALL_STATUS" == "2" ]; then
# force install?
@@ -757,7 +737,7 @@ execute_task() {
JSON_TARGET=$(echo '{ "DATE": "'$DATE'", "STATUS": "0", "TEMPLATE": "'$TEMPLATE'" }' | jq -r . | base64 -w0)
elif [ "$DEPLOY_ACTION" == "deploy" ]; then
JSON_TARGET=$(echo '{ "DATE": "'$DATE'", "STATUS": "1" }' | jq -r . | base64 -w0) # deployment has started
redis-cli -h $REDIS_SERVER -p $REDIS_PORT SET $TASK "$JSON_TARGET" # web_in
#redis-cli -h $REDIS_SERVER -p $REDIS_PORT SET $TASK "$JSON_TARGET" # web_in
DEPLOY_PAYLOAD=$(echo "$JSON" | jq -r .PAYLOAD) # base64 list of key-value pairs in JSON
deploy_additionals "$APP_DIR" "$DEPLOY_NAME" "$DEPLOY_PAYLOAD"
@@ -797,7 +777,9 @@ execute_task() {
debug "JSON_TARGET: $JSON_TARGET"
if [ "$JSON_TARGET" != "" ]; then
redis-cli -h $REDIS_SERVER -p $REDIS_PORT SET $TASK "$JSON_TARGET"
#redis-cli -h $REDIS_SERVER -p $REDIS_PORT SET $TASK "$JSON_TARGET"
install -m 664 -g 65534 /dev/null $SHARED/output/$TASK.json
echo $JSON_TARGET | base64 -d >$SHARED/output/$TASK.json
fi
}
@@ -913,6 +895,12 @@ if [ "$STATUS" != "1" ]; then
/usr/bin/docker network create $FRAMEWORK_SCHEDULER_NETWORK --subnet $FRAMEWORK_SCHEDULER_NETWORK_SUBNET
fi
VOL=$(check_volumes)
if [ "$VOL" != "1" ]; then
start_framework_scheduler
/usr/bin/docker rm -f $HOSTNAME
fi
DF=$(check_dirs_and_files)
if [ "$DF" != "1" ]; then
create_system_json
@@ -920,56 +908,68 @@ if [ "$DF" != "1" ]; then
create_framework_json
fi
VOL=$(check_volumes)
if [ "$VOL" != "1" ]; then
start_framework_scheduler
/usr/bin/docker rm -f $HOSTNAME
fi
RS=$(docker ps | grep redis-server)
#RS=$(docker ps | grep redis-server)
WS=$(docker ps | grep webserver)
if [[ "$WS" == "" && "$RS" == "" ]]; then
#if [[ "$WS" == "" && "$RS" == "" ]]; then
if [ "$WS" == "" ]; then
# START SERVICES
$service_exec service-framework.containers.redis-server start &
#$service_exec service-framework.containers.redis-server start &
$service_exec service-framework.containers.webserver start &
sleep 5
fi
# 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"
# STARTING SCHEDULER PROCESSES
while true; do
# Initial parameters
DATE=$(date +%F-%H-%M-%S)
TASKS=""
# Set env variables
DIR=$SHARED/input
# GET DEPLOYMENT IDs FROM generate key
TASKS=$(redis-cli -h $REDIS_SERVER -p $REDIS_PORT SMEMBERS web_in)
if [[ "$TASKS" != "0" && "$TASKS" != "" ]]; then
# Triggers by certificate or domain config changes
# PROCESSING TASK
for TASK in $(echo $TASKS); do
### READ TASKS FROM REDIS
B64_JSON=$(redis-cli -h $REDIS_SERVER -p $REDIS_PORT GET $TASK)
JSON_TARGET=$(echo $B64_JSON | base64 -d | jq -rc .'STATUS="0"' | base64 -w0)
redis-cli -h $REDIS_SERVER -p $REDIS_PORT SET $TASK "$JSON_TARGET"
unset IFS
inotifywait --exclude "\.(swp|tmp)" -m -e CREATE,CLOSE_WRITE,DELETE,MOVED_TO -r $DIR |
while read dir op file; do
if [ "${op}" == "CLOSE_WRITE,CLOSE" ]; then
echo "new file created: $file"
B64_JSON=$(cat $DIR/$file | base64 -w0)
TASK=$(echo $file | cut -d '.' -f1)
execute_task "$TASK" "$B64_JSON"
rm -f $dir/$file
fi
done
# MOVE TASK from web_in into web_out
redis-cli -h $REDIS_SERVER -p $REDIS_PORT SREM web_in $TASK
redis-cli -h $REDIS_SERVER -p $REDIS_PORT SADD web_out $TASK
echo $JSON_TARGET | base64 -d > $SHARED/output/$TASK.json
# while true; do
# TASKS=""
done
fi
# # GET DEPLOYMENT IDs FROM generate key
# #TASKS=$(redis-cli -h $REDIS_SERVER -p $REDIS_PORT SMEMBERS web_in)
# TASK=$(read $SHARED/output/*)
# if [[ "$TASKS" != "0" && "$TASKS" != "" ]]; then
sleep 1
done
# # PROCESSING TASK
# for TASK in $(echo $TASKS); do
# ### READ TASKS FROM REDIS
# B64_JSON=$(redis-cli -h $REDIS_SERVER -p $REDIS_PORT GET $TASK)
# JSON_TARGET=$(echo $B64_JSON | base64 -d | jq -rc .'STATUS="0"' | base64 -w0)
# redis-cli -h $REDIS_SERVER -p $REDIS_PORT SET $TASK "$JSON_TARGET"
# execute_task "$TASK" "$B64_JSON"
# # MOVE TASK from web_in into web_out
# redis-cli -h $REDIS_SERVER -p $REDIS_PORT SREM web_in $TASK
# redis-cli -h $REDIS_SERVER -p $REDIS_PORT SADD web_out $TASK
# echo $JSON_TARGET | base64 -d > $SHARED/output/$TASK.json
# done
# fi
# sleep 1
# done