Fix IP registration: correct labels, better error handling, table verification

This commit is contained in:
Vaibhav Pathak 2026-01-19 16:13:19 +05:30
parent 38897e474f
commit 8ecd75b53d

View File

@ -724,7 +724,12 @@ spec:
# Helper function to run MySQL commands via kubectl exec # Helper function to run MySQL commands via kubectl exec
run_mysql() { run_mysql() {
kubectl exec -n "$NAMESPACE" "$MYSQL_POD" -- mysql -u "$MYSQL_USER" -p"$MYSQL_PWD" "$MYSQL_DB" -sN -e "$1" 2>/dev/null || true local result
result=$(kubectl exec -n "$NAMESPACE" "$MYSQL_POD" -- mysql -u "$MYSQL_USER" -p"$MYSQL_PWD" "$MYSQL_DB" -sN -e "$1" 2>&1) || {
echo " MySQL error: $result" >&2
return 1
}
echo "$result"
} }
# Function to register IP for an app # Function to register IP for an app
@ -737,28 +742,59 @@ spec:
fi fi
# Get or create app_id # Get or create app_id
APP_ID=$(run_mysql "SELECT id FROM apps WHERE name='$app_name'" || echo "") APP_ID=$(run_mysql "SELECT id FROM apps WHERE name='$app_name'")
if [ -z "$APP_ID" ]; then if [ -z "$APP_ID" ]; then
echo " Creating app entry for: $app_name" echo " Creating app entry for: $app_name"
run_mysql "INSERT INTO apps (name, token, creation_date, last_update, is_deleted) VALUES ('$app_name', UUID(), NOW(), NOW(), 0)" || true if run_mysql "INSERT INTO apps (name, token, creation_date, last_update, is_deleted) VALUES ('$app_name', UUID(), NOW(), NOW(), 0)"; then
APP_ID=$(run_mysql "SELECT id FROM apps WHERE name='$app_name'" || echo "") APP_ID=$(run_mysql "SELECT id FROM apps WHERE name='$app_name'")
echo " Created app with ID: $APP_ID"
else
echo " Failed to create app entry for: $app_name"
return 1
fi
fi fi
if [ -n "$APP_ID" ]; then if [ -n "$APP_ID" ]; then
# Check if IP already exists # Check if IP already exists
EXISTING=$(run_mysql "SELECT id FROM app_ips_accesses WHERE app_id=$APP_ID AND ipaddress='$ip'" || echo "") EXISTING=$(run_mysql "SELECT id FROM app_ips_accesses WHERE app_id=$APP_ID AND ipaddress='$ip'")
if [ -z "$EXISTING" ]; then if [ -z "$EXISTING" ]; then
echo " Registering IP $ip for app $app_name (app_id: $APP_ID)" echo " Registering IP $ip for app $app_name (app_id: $APP_ID)"
run_mysql "INSERT INTO app_ips_accesses (app_id, ipaddress, creation_date, last_update, is_deleted) VALUES ($APP_ID, '$ip', NOW(), NOW(), 0)" || true if run_mysql "INSERT INTO app_ips_accesses (app_id, ipaddress, creation_date, last_update, is_deleted) VALUES ($APP_ID, '$ip', NOW(), NOW(), 0)"; then
echo " Successfully registered IP $ip"
else
echo " Failed to register IP $ip"
fi
else else
echo " IP $ip already registered for $app_name" echo " IP $ip already registered for $app_name"
fi fi
else
echo " Could not get APP_ID for $app_name"
fi fi
return 0 return 0
} }
# Verify required tables exist
echo "Checking database tables..."
TABLES=$(run_mysql "SHOW TABLES")
echo "Available tables: $TABLES"
if ! echo "$TABLES" | grep -q "apps"; then
echo "ERROR: 'apps' table not found in database"
echo "Database may not be initialized. Exiting."
exit 1
fi
if ! echo "$TABLES" | grep -q "app_ips_accesses"; then
echo "ERROR: 'app_ips_accesses' table not found in database"
echo "Database may not be initialized. Exiting."
exit 1
fi
echo "Required tables found. Proceeding with IP registration..."
echo ""
# 1. Collect common bridge/gateway IPs (handles SNAT across different clusters) # 1. Collect common bridge/gateway IPs (handles SNAT across different clusters)
COMMON_BRIDGE_IPS="10.244.0.1 10.96.0.1 172.17.0.1" COMMON_BRIDGE_IPS="10.244.0.1 10.96.0.1 172.17.0.1"
echo "Common bridge IPs: $COMMON_BRIDGE_IPS" echo "Common bridge IPs: $COMMON_BRIDGE_IPS"
@ -793,10 +829,20 @@ spec:
echo "Processing service: $service" echo "Processing service: $service"
# Get actual pod IPs for this service # Get actual pod IPs for this service
# Try multiple label selectors as different charts use different labels
POD_IPS=$(kubectl get pods -n "$NAMESPACE" \ POD_IPS=$(kubectl get pods -n "$NAMESPACE" \
-l "app.kubernetes.io/instance=${service}" \ -l "app.kubernetes.io/instance=${NAMESPACE}-${service}" \
-o jsonpath='{.items[*].status.podIP}' 2>/dev/null) || POD_IPS="" -o jsonpath='{.items[*].status.podIP}' 2>/dev/null) || POD_IPS=""
if [ -z "$POD_IPS" ]; then
# Try backstage.io/kubernetes-id label
POD_IPS=$(kubectl get pods -n "$NAMESPACE" \
-l "backstage.io/kubernetes-id=${service}" \
-o jsonpath='{.items[*].status.podIP}' 2>/dev/null) || POD_IPS=""
fi
echo " Found pod IPs: ${POD_IPS:-none}"
# Register pod IPs # Register pod IPs
for ip in $POD_IPS; do for ip in $POD_IPS; do
[ -n "$ip" ] && register_ip "$service" "$ip" [ -n "$ip" ] && register_ip "$service" "$ip"