File: //bigscoots/solusvm/container_sf_ip_swap.sh
#!/bin/bash
# Configuration
CONF_DIR="/etc/vz/conf"
BACKUP_DIR="/etc/vz/conf_backup_$(date +%F_%H%M)"
mkdir -p "$BACKUP_DIR"
RETIRE_RE="(50\.31\.9[89]\.|208\.117\.38\.|50\.31\.114\.|69\.162\.134\.|67\.202\.70\.|208\.100\.53\.|50\.31\.65\.|50\.31\.78\.|23\.29\.132\.|23\.29\.145\.|50\.31\.30\.|69\.162\.173\.|50\.31\.116\.|50\.31\.119\.|208\.117\.4\.)"
KEEP_RE="(38\.58\.22[4-9]\.|38\.65\.22[4-9]\.|207\.241\.19[6-9]\.|74\.121\.20[4-7]\.|198\.175\.2[4-7]\.|216\.185\.21[2-5]\.)"
echo "Backing up configs to $BACKUP_DIR..."
cp $CONF_DIR/*.conf "$BACKUP_DIR/"
for config in $CONF_DIR/*.conf; do
[ -e "$config" ] || continue
CTID=$(basename "$config" .conf)
FULL_LINE=$(grep "^IP_ADDRESS=" "$config")
[ -z "$FULL_LINE" ] && continue
IP_DATA=$(echo "$FULL_LINE" | sed -e 's/^IP_ADDRESS="//' -e 's/"\s*$//')
PRIMARY_IP=$(echo "$IP_DATA" | awk '{print $1}')
if echo "$PRIMARY_IP" | grep -Eq "$RETIRE_RE"; then
NEW_PRIMARY=$(echo "$IP_DATA" | tr ' ' '\n' | grep -E "$KEEP_RE" | head -n 1)
if [ -n "$NEW_PRIMARY" ]; then
REMOVED_TARGET=$(echo " $IP_DATA " | sed "s| $NEW_PRIMARY | |g")
FINAL_LIST=$(echo "$NEW_PRIMARY $REMOVED_TARGET" | sed -e 's/ */ /g' -e 's/^ //;s/ $//')
# --- ACTUAL MODIFICATION ---
sed -i "s|^IP_ADDRESS=.*|IP_ADDRESS=\"$FINAL_LIST\"|" "$config"
# Apply live to the running container
vzctl set $CTID --save > /dev/null 2>&1
echo "CTID $CTID: Swapped to $NEW_PRIMARY"
fi
fi
done
echo "Done! If anything goes wrong, backups are in $BACKUP_DIR"