#!/bin/bash # Quick script to run the voting deadline migration on production Kubernetes set -e # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color echo -e "${GREEN}========================================${NC}" echo -e "${GREEN}MOTM App - Production Migration${NC}" echo -e "${GREEN}========================================${NC}" echo "" # Default namespace NAMESPACE="${1:-motm-app}" echo -e "${YELLOW}Using namespace: ${NAMESPACE}${NC}" echo "" # Step 1: Find the pod echo -e "${YELLOW}Step 1: Finding production pod...${NC}" POD_NAME=$(kubectl get pods -n "$NAMESPACE" -l app.kubernetes.io/name=motm-app -o jsonpath='{.items[0].metadata.name}' 2>/dev/null || echo "") if [ -z "$POD_NAME" ]; then echo -e "${RED}✗ Error: Could not find motm-app pod in namespace '$NAMESPACE'${NC}" echo "" echo "Available namespaces:" kubectl get namespaces echo "" echo "Usage: $0 [namespace]" echo "Example: $0 motm-app" exit 1 fi echo -e "${GREEN}✓ Found pod: ${POD_NAME}${NC}" echo "" # Step 2: Check if migration script exists in pod echo -e "${YELLOW}Step 2: Checking migration script...${NC}" if kubectl exec -n "$NAMESPACE" "$POD_NAME" -- test -f /app/add_voting_deadline.py 2>/dev/null; then echo -e "${GREEN}✓ Migration script found${NC}" else echo -e "${RED}✗ Error: Migration script not found in pod${NC}" echo "The add_voting_deadline.py script needs to be in the Docker image." echo "Please rebuild and redeploy the application." exit 1 fi echo "" # Step 3: Run the migration echo -e "${YELLOW}Step 3: Running migration...${NC}" if kubectl exec -n "$NAMESPACE" "$POD_NAME" -- python /app/add_voting_deadline.py; then echo -e "${GREEN}✓ Migration completed successfully!${NC}" else echo -e "${RED}✗ Migration failed!${NC}" exit 1 fi echo "" # Step 4: Verify the migration echo -e "${YELLOW}Step 4: Verifying migration...${NC}" VERIFY_CMD="from db_config import db_config; from sqlalchemy import text, inspect; engine = db_config.engine; inspector = inspect(engine); columns = inspector.get_columns('admin_settings'); voting_deadline_exists = any(col['name'] == 'votingdeadline' for col in columns); print('✓ votingdeadline column exists' if voting_deadline_exists else '✗ votingdeadline column missing')" if kubectl exec -n "$NAMESPACE" "$POD_NAME" -- python -c "$VERIFY_CMD" 2>&1 | grep -q "✓"; then echo -e "${GREEN}✓ Verification successful!${NC}" else echo -e "${RED}✗ Verification failed!${NC}" echo "The column may not have been created properly." exit 1 fi echo "" # Step 5: Restart the pod to clear cached connections echo -e "${YELLOW}Step 5: Restarting pod to clear cached connections...${NC}" kubectl rollout restart deployment/motm-app -n "$NAMESPACE" 2>/dev/null || \ kubectl delete pod "$POD_NAME" -n "$NAMESPACE" echo -e "${GREEN}✓ Pod restart initiated${NC}" echo "" # Wait for pod to be ready echo -e "${YELLOW}Waiting for pod to be ready...${NC}" kubectl wait --for=condition=ready pod -l app.kubernetes.io/name=motm-app -n "$NAMESPACE" --timeout=120s echo "" # Summary echo -e "${GREEN}========================================${NC}" echo -e "${GREEN}Migration Complete!${NC}" echo -e "${GREEN}========================================${NC}" echo "" echo "Next steps:" echo "1. Visit https://motm.ervine.cloud/admin/motm" echo "2. The page should load without SQL errors" echo "3. You should see the 'Voting Deadline' field" echo "4. Set a deadline for your next match" echo "" echo "To check logs:" echo " kubectl logs -n $NAMESPACE -l app.kubernetes.io/name=motm-app --tail=50" echo ""