#!/bin/bash exec >> /proc/1/fd/1 2>&1 # Log function with timestamp log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" } # Set defaults NUMBER_OF_NODES=${1:-1} EXAM_ID=${2:-""} echo "Exam ID: $EXAM_ID" echo "Number of nodes: $NUMBER_OF_NODES" #check docker is running if ! docker info > /dev/null 2>&1; then log "Docker is not running" log "Attempting to start docker" dockerd & sleep 5 #check docker is running 3 times with 5 second interval for i in {1..3}; do if docker info > /dev/null 2>&1; then log "Docker started successfully" break fi log "Docker failed to start, retrying..." sleep 5 done fi log "Starting exam environment preparation with $NUMBER_OF_NODES node(s)" # Validate input if ! [[ "$NUMBER_OF_NODES" =~ ^[0-9]+$ ]]; then log "ERROR: Number of nodes must be a positive integer" exit 1 fi # Setup kind cluster ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null candidate@k8s-api-server "env-setup $NUMBER_OF_NODES $CLUSTER_NAME" #Pull assets from URL curl facilitator:3000/api/v1/exams/$EXAM_ID/assets -o assets.tar.gz mkdir -p /tmp/exam-assets #Unzip assets tar -xzvf assets.tar.gz -C /tmp/exam-assets #Remove assets.tar.gz rm assets.tar.gz #make every file in /tmp/exam-assets executable find /tmp/exam-assets -type f -exec chmod +x {} \; echo "Exam assets downloaded and prepared successfully" export KUBECONFIG=/home/candidate/.kube/kubeconfig sleep 5 #wait till api-server is ready while ! kubectl get nodes > /dev/null 2>&1; do log "API server is not ready, retrying..." sleep 5 done echo "API server is ready" #Run setup scripts for script in /tmp/exam-assets/scripts/setup/q*_setup.sh; do $script; done log "Exam environment preparation completed successfully" exit 0