Files
ai/bin/config-update
2026-03-11 18:47:11 -04:00

129 lines
3.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
usage() {
echo "Usage: $0 [ENVIRONMENT] [CONFIG_NAME]"
echo ""
echo "Update Kubernetes ConfigMaps from YAML files"
echo ""
echo "Arguments:"
echo " ENVIRONMENT Target environment: dev or prod (default: dev)"
echo " CONFIG_NAME Specific config to update (optional, updates all if not specified)"
echo ""
echo "Available configs:"
echo " relay-config - ZMQ relay configuration"
echo " ingestor-config - CCXT ingestor configuration"
echo " flink-config - Flink job configuration"
echo ""
echo "Examples:"
echo " $0 # Update all dev configs"
echo " $0 dev # Update all dev configs"
echo " $0 dev relay-config # Update only relay-config in dev"
echo " $0 prod # Update all prod configs"
echo " $0 prod flink-config # Update only flink-config in prod"
exit 1
}
# Parse arguments
ENV="${1:-dev}"
CONFIG_NAME="${2:-}"
if [[ "$ENV" != "dev" && "$ENV" != "prod" ]]; then
echo -e "${RED}Error: Environment must be 'dev' or 'prod'${NC}"
usage
fi
CONFIG_DIR="$ROOT_DIR/deploy/k8s/$ENV/configs"
if [ ! -d "$CONFIG_DIR" ]; then
echo -e "${RED}Error: Config directory not found: $CONFIG_DIR${NC}"
exit 1
fi
# Get kubectl context
if [[ "$ENV" == "prod" ]]; then
CONTEXT=$(kubectl config current-context)
echo -e "${YELLOW}⚠️ WARNING: Updating PRODUCTION configs!${NC}"
echo -e "${YELLOW}Current kubectl context: $CONTEXT${NC}"
read -p "Are you sure you want to continue? (yes/no): " confirm
if [[ "$confirm" != "yes" ]]; then
echo "Aborted."
exit 0
fi
fi
apply_config() {
local config_name="$1"
local config_file="$CONFIG_DIR/$config_name.yaml"
if [ ! -f "$config_file" ]; then
echo -e "${RED}✗ Config file not found: $config_file${NC}"
return 1
fi
echo -e "${GREEN}${NC} Creating/updating ConfigMap $config_name..."
kubectl create configmap "$config_name" \
--from-file=config.yaml="$config_file" \
--dry-run=client -o yaml | kubectl apply -f -
echo -e "${GREEN}${NC} $config_name updated"
# Optionally restart pods that use this config
local restart_pods=""
case "$config_name" in
relay-config)
restart_pods="deployment/relay"
;;
ingestor-config)
restart_pods="deployment/ingestor"
;;
flink-config)
restart_pods="deployment/flink-jobmanager deployment/flink-taskmanager"
;;
esac
if [ -n "$restart_pods" ]; then
echo -e "${YELLOW} Restarting pods...${NC}"
kubectl rollout restart $restart_pods 2>/dev/null || echo -e "${YELLOW} (No pods found to restart)${NC}"
fi
}
# Update specific config or all configs
if [ -n "$CONFIG_NAME" ]; then
# Update single config
apply_config "$CONFIG_NAME"
else
# Update all configs
echo -e "${GREEN}Updating all $ENV configs...${NC}"
echo ""
CONFIGS=(
"relay-config"
"ingestor-config"
"flink-config"
)
FAILED=0
for config in "${CONFIGS[@]}"; do
if ! apply_config "$config"; then
FAILED=$((FAILED + 1))
fi
done
echo ""
if [ $FAILED -gt 0 ]; then
echo -e "${YELLOW}⚠️ $FAILED config(s) failed to apply${NC}"
exit 1
else
echo -e "${GREEN}✓ All configs updated successfully${NC}"
fi
fi