From 950e5aadc162a953a5facc995a6bf6f13954c05a Mon Sep 17 00:00:00 2001 From: gyurix Date: Fri, 19 Jul 2024 14:18:30 +0200 Subject: [PATCH] mmm --- .drone.yml | 45 ++++++++++++ Dockerfile | 4 +- README.md | 2 +- config/image-version-tags | 13 ++++ scripts/scheduler/entrypoint.sh | 123 ++++++++++++++++++++++++++++++++ 5 files changed, 184 insertions(+), 3 deletions(-) create mode 100644 .drone.yml create mode 100644 config/image-version-tags create mode 100644 scripts/scheduler/entrypoint.sh diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..2a1ca94 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,45 @@ +kind: pipeline +name: default +trigger: + branch: + - main + event: + - push +workspace: + path: /drone/src + +environment: + REPO_NAME: framework-scheduler + IMAGE_NAME: framework-scheduler + SERVICE_NAME: service-demo + APP_NAME: frameworkscheduler-app + DOCKER_REGISTRY_URL: registry.format.hu + +steps: + - name: create framework-scheduler image + image: plugins/docker + commands: + - export DOCKER_CLI_EXPERIMENTAL=enabled + - docker build --platform linux/amd64 --tag $${DOCKER_REGISTRY_URL}/$${IMAGE_NAME}/linux/amd64:latest --build-arg BUILDPLATFORM=amd64 -f Dockerfile . + - docker build --platform linux/arm64/v8 --tag $${DOCKER_REGISTRY_URL}/$${IMAGE_NAME}/linux/arm64:latest --build-arg BUILDPLATFORM=arm64 -f Dockerfile . + - docker push $${DOCKER_REGISTRY_URL}/$${IMAGE_NAME}/linux/amd64:latest + - docker push $${DOCKER_REGISTRY_URL}/$${IMAGE_NAME}/linux/arm64:latest + - | + docker manifest create $${DOCKER_REGISTRY_URL}/$${IMAGE_NAME}:latest \ + $${DOCKER_REGISTRY_URL}/$${IMAGE_NAME}/linux/amd64:latest \ + $${DOCKER_REGISTRY_URL}/$${IMAGE_NAME}/linux/arm64:latest + - docker manifest annotate --arch arm64 --variant v8 $${DOCKER_REGISTRY_URL}/$${IMAGE_NAME}:latest $${DOCKER_REGISTRY_URL}/$${IMAGE_NAME}/linux/arm64:latest + - docker manifest annotate --arch amd64 $${DOCKER_REGISTRY_URL}/$${IMAGE_NAME}:latest $${DOCKER_REGISTRY_URL}/$${IMAGE_NAME}/linux/amd64:latest + - docker manifest push $${DOCKER_REGISTRY_URL}/$${IMAGE_NAME}:latest + + when: + branch: + - master + +volumes: + - name: cache + temp: {} + + - name: docker + host: + path: /var/run/docker.sock diff --git a/Dockerfile b/Dockerfile index 5c0699f..3f3b817 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ ARG BUILDPLATFORM -FROM --platform $BUILDPLATFORM alpine:latest AS redis-source +FROM --platform=$BUILDPLATFORM alpine:latest AS redis-source ARG REDIS_VERSION="7.2.4" ARG REDIS_DOWNLOAD_URL="http://download.redis.io/releases/redis-${REDIS_VERSION}.tar.gz" @@ -11,7 +11,7 @@ RUN wget -O redis.tar.gz "$REDIS_DOWNLOAD_URL" && \ make BUILD_TLS=yes MALLOC=libc redis-cli ARG BUILDPLATFORM -FROM --platform $BUILDPLATFORM alpine:latest +FROM --platform=$BUILDPLATFORM alpine:latest COPY --from=redis-source /usr/src/redis/src/redis-cli /usr/bin/redis-cli RUN chmod +x /usr/bin/redis-cli diff --git a/README.md b/README.md index f3738d7..33f006f 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ -# framework-scheduler +# platform-scheduler diff --git a/config/image-version-tags b/config/image-version-tags new file mode 100644 index 0000000..9be5c5d --- /dev/null +++ b/config/image-version-tags @@ -0,0 +1,13 @@ +{ + "POSTGRES_VERSION": "16-alpine", + "METADATA_SERVER_VERSION": "0.0.0", + "UTILITY_TRAIT_CENTER": "0.0.0", + "UTC_SCHEDULER_VERSION": "0.0.0", + "MARKETPLACE_VERSION": "0.0.0", + "STICKERBOOK_VERSION": "0.0.0", + "SPECS_UPLOADER_VERSION": "0.0.0", + "VAULT_VERSION": "0.0.0", + "LEADERBOARD_VERSION": "0.0.0", + "FIREWALL_VERSION": "latest", + "REDIS_VERSION": "latest" +} diff --git a/scripts/scheduler/entrypoint.sh b/scripts/scheduler/entrypoint.sh new file mode 100644 index 0000000..295aa82 --- /dev/null +++ b/scripts/scheduler/entrypoint.sh @@ -0,0 +1,123 @@ +#! /bin/sh + +cd /scripts + +DOCKER_REGISTRY_URL=$DOCKER_REGISTRY_URL +USER_INIT_PATH=$USER_INIT_PATH +REDIS_SERVER=$REDIS_SERVER +REDIS_PORT=$REDIS_PORT + +SOURCE=$SOURCE +SMARTHOST_PROXY_PATH=$SMARTHOST_PROXY_PATH + +GIT_URL=$GIT_URL +TOKEN=$TOKEN +REPO=$REPO + +MAIN_DOMAIN=$MAIN_DOMAIN +VERSIONS_CONFIG_FILE=$VERSIONS_CONFIG_FILE +PROXY_DELAY=$PROXY_DELAY + + +VERSIONS_CONFIG_FILE=$VERSIONS_CONFIG_FILE + +if [ -z "$CURL_SLEEP_SHORT" ]; then + CURL_SLEEP_SHORT=10 +fi + +if [ -z "$CURL_RETRIES" ]; then + CURL_RETRIES=360 +fi + +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 +} +### + +# CHECKING SYSTEM ENVIRONMENTS +## DOCKER VARIABLES +## VERSION CHECK +## FILESYSTEM VARIABLES +## PORTS VARIABLES + +# REDIS_SERVER EXISTENCE +## REDIS_PORT EXISTENCE +## VERSION CHECK + +# WEBSERVER EXISTENCE +## WEBSERVER_PORT EXISTENCE +## VERSION CHECK + +# SUMMARY + + +# poll redis infinitely for scheduler jobs +check_redis_availability $REDIS_SERVER $REDIS_PORT $CURL_RETRIES $CURL_SLEEP_SHORT +echo "Scheduler initialized, starting listening for deploy events" +while true; do + + IDS="" + + # GET DEPLOYMENT IDs FROM generate key + IDS=$(redis-cli -h $REDIS_SERVER -p $REDIS_PORT SMEMBERS generate) + 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 generate $I + redis-cli -h $REDIS_SERVER -p $REDIS_PORT SADD generated $I + + done + fi + + sleep 1 +done \ No newline at end of file