You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
proxysql/test/infra/control/destroy-multi-group.bash

146 lines
4.0 KiB

#!/bin/bash
set -euo pipefail
#
# Destroy Multiple TAP Groups for a Specific RUN_ID
# Usage:
# RUN_ID="abc123" ./destroy-multi-group.bash
#
# Optional:
# TAP_GROUPS="group1 group2" # Only destroy specific groups for this RUN_ID
# FORCE=1 # Skip confirmation
#
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "${SCRIPT_DIR}/../../.." && pwd)"
# Configuration
export WORKSPACE="${WORKSPACE:-${REPO_ROOT}}"
RUN_ID="${RUN_ID:-}"
TAP_GROUPS="${TAP_GROUPS:-}"
FORCE="${FORCE:-0}"
# Validate required variables
if [ -z "${RUN_ID}" ]; then
echo "ERROR: RUN_ID is not set."
echo "Usage: RUN_ID=<id> [TAP_GROUPS='group1 group2'] ${0}"
echo ""
echo "This will destroy all infrastructures matching '*-${RUN_ID}'"
exit 1
fi
# Determine which groups to destroy
if [ -n "${TAP_GROUPS}" ]; then
# Use specified groups
read -ra GROUPS <<< "${TAP_GROUPS}"
MODE="specific"
else
# Auto-discover groups by finding matching directories
MODE="auto"
GROUPS=()
# Look for log directories matching *-${RUN_ID}
LOGS_PATH="${WORKSPACE}/ci_infra_logs"
if [ -d "${LOGS_PATH}" ]; then
for dir in "${LOGS_PATH}"/*; do
if [ -d "${dir}" ]; then
dir_name=$(basename "${dir}")
if [[ "${dir_name}" == *"-${RUN_ID}" ]]; then
# Extract group name from INFRA_ID
group_name="${dir_name%-${RUN_ID}}"
GROUPS+=("${group_name}")
fi
fi
done
fi
fi
TOTAL_GROUPS=${#GROUPS[@]}
if [ "${TOTAL_GROUPS}" -eq 0 ]; then
echo "No groups found to destroy for RUN_ID: ${RUN_ID}"
echo "Usage: RUN_ID=<id> ${0}"
exit 0
fi
echo "=========================================="
echo "Destroy Multiple TAP Groups"
echo "=========================================="
echo "RUN_ID: ${RUN_ID}"
echo "MODE: ${MODE}"
echo "GROUPS: ${GROUPS[*]}"
echo "=========================================="
# Confirmation prompt (unless FORCE=1)
if [ "${FORCE}" -eq 0 ]; then
echo ""
echo "This will destroy the following ${TOTAL_GROUPS} infrastructure(s):"
for group in "${GROUPS[@]}"; do
echo " - ${group}-${RUN_ID}"
done
echo ""
read -p "Are you sure? [y/N] " -n 1 -r
echo ""
if [[ ! ${REPLY} =~ ^[Yy]$ ]]; then
echo "Aborted."
exit 0
fi
fi
# Track results
declare -A DESTROY_RESULTS
SUCCESS_COUNT=0
FAIL_COUNT=0
# Destroy each group's infrastructure
for group in "${GROUPS[@]}"; do
infra_id="${group}-${RUN_ID}"
echo ""
echo ">>> Destroying: ${group} (INFRA_ID: ${infra_id})"
export INFRA_ID="${infra_id}"
export TAP_GROUP="${group}"
# First stop ProxySQL
if "${SCRIPT_DIR}/stop-proxysql-isolated.bash" >/dev/null 2>&1; then
echo " Stopped ProxySQL"
fi
# Then destroy backends
if "${SCRIPT_DIR}/destroy-infras.bash" >/dev/null 2>&1; then
echo "${group} destroyed"
DESTROY_RESULTS["${group}"]=0
SUCCESS_COUNT=$((SUCCESS_COUNT + 1))
else
echo "${group} failed to destroy (may already be cleaned up)"
DESTROY_RESULTS["${group}"]=1
FAIL_COUNT=$((FAIL_COUNT + 1))
fi
done
# Also clean up the multi-group results directory if it exists
MULTI_GROUP_DIR="${WORKSPACE}/ci_infra_logs/multi-group-${RUN_ID}"
if [ -d "${MULTI_GROUP_DIR}" ]; then
echo ""
echo ">>> Removing multi-group results directory: ${MULTI_GROUP_DIR}"
rm -rf "${MULTI_GROUP_DIR}"
echo " ✓ Results directory removed"
fi
# Summary
echo ""
echo "=========================================="
echo " DESTROY SUMMARY "
echo "=========================================="
echo "TOTAL: ${TOTAL_GROUPS}"
echo "SUCCESS: ${SUCCESS_COUNT}"
echo "FAILED: ${FAIL_COUNT}"
echo "=========================================="
if [ "${FAIL_COUNT}" -eq 0 ]; then
echo ">>> All groups destroyed successfully"
exit 0
else
echo ">>> Some groups failed to destroy (may already be cleaned up)"
exit 0 # Exit 0 since cleanup is best-effort
fi