provisioning/taskservs/polkadot/zombienet/default/zombienet-service.sh.j2
2025-09-22 23:11:41 +01:00

164 lines
4.9 KiB
Django/Jinja

#!/bin/bash
# Info: Zombienet service management script
# Author: Provisioning System
ZOMBIENET_BIN="{{ polkadot_zombienet.bin_path }}/{{ polkadot_zombienet.zombienet_binary }}"
NETWORKS_PATH="{{ polkadot_zombienet.networks_path }}"
LOGS_PATH="{{ polkadot_zombienet.logs_path }}"
CONFIG_PATH="{{ polkadot_zombienet.config_path }}"
PROVIDER="{{ polkadot_zombienet.settings.provider }}"
RUN_USER="{{ polkadot_zombienet.run_user.name }}"
# Default network configuration
DEFAULT_NETWORK="$NETWORKS_PATH/simple-network.toml"
CURRENT_NETWORK_FILE="$CONFIG_PATH/current-network.toml"
PID_FILE="$CONFIG_PATH/zombienet.pid"
case "$1" in
start)
NETWORK_FILE="${2:-$DEFAULT_NETWORK}"
if [ ! -f "$NETWORK_FILE" ]; then
echo "Network file not found: $NETWORK_FILE"
exit 1
fi
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if kill -0 "$PID" 2>/dev/null; then
echo "Zombienet is already running (PID: $PID)"
exit 1
else
rm -f "$PID_FILE"
fi
fi
echo "Starting Zombienet with network: $NETWORK_FILE"
echo "Provider: $PROVIDER"
echo "Logs will be written to: $LOGS_PATH"
# Copy network file to current
cp "$NETWORK_FILE" "$CURRENT_NETWORK_FILE"
# Start zombienet in background
nohup sudo -u "$RUN_USER" "$ZOMBIENET_BIN" spawn \
--provider "$PROVIDER" \
"$CURRENT_NETWORK_FILE" \
> "$LOGS_PATH/zombienet.log" 2>&1 &
echo $! > "$PID_FILE"
echo "Zombienet started with PID: $(cat $PID_FILE)"
echo "Monitor logs with: tail -f $LOGS_PATH/zombienet.log"
;;
stop)
if [ ! -f "$PID_FILE" ]; then
echo "Zombienet is not running (no PID file)"
exit 1
fi
PID=$(cat "$PID_FILE")
if ! kill -0 "$PID" 2>/dev/null; then
echo "Zombienet process not found (stale PID file)"
rm -f "$PID_FILE"
exit 1
fi
echo "Stopping Zombienet (PID: $PID)..."
# Kill the process tree
pkill -P "$PID" 2>/dev/null || true
kill "$PID" 2>/dev/null || true
# Wait for graceful shutdown
for i in {1..30}; do
if ! kill -0 "$PID" 2>/dev/null; then
break
fi
sleep 1
done
# Force kill if still running
if kill -0 "$PID" 2>/dev/null; then
echo "Force killing Zombienet..."
kill -9 "$PID" 2>/dev/null || true
fi
rm -f "$PID_FILE"
echo "Zombienet stopped"
;;
restart)
$0 stop
sleep 2
$0 start "$2"
;;
status)
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if kill -0 "$PID" 2>/dev/null; then
echo "Zombienet is running (PID: $PID)"
if [ -f "$CURRENT_NETWORK_FILE" ]; then
echo "Current network: $CURRENT_NETWORK_FILE"
fi
# Show some network info
echo ""
echo "Network processes:"
pgrep -f "polkadot\|zombienet" | head -10
exit 0
else
echo "Zombienet is not running (stale PID file)"
rm -f "$PID_FILE"
exit 1
fi
else
echo "Zombienet is not running"
exit 1
fi
;;
logs)
if [ -f "$LOGS_PATH/zombienet.log" ]; then
tail -f "$LOGS_PATH/zombienet.log"
else
echo "No logs found at $LOGS_PATH/zombienet.log"
exit 1
fi
;;
test)
TEST_FILE="$2"
if [ -z "$TEST_FILE" ]; then
echo "Usage: $0 test <test-file.zndsl>"
exit 1
fi
if [ ! -f "$TEST_FILE" ]; then
echo "Test file not found: $TEST_FILE"
exit 1
fi
echo "Running test: $TEST_FILE"
sudo -u "$RUN_USER" "$ZOMBIENET_BIN" test --provider "$PROVIDER" "$TEST_FILE"
;;
*)
echo "Zombienet Service Management"
echo "Usage: $0 {start|stop|restart|status|logs|test} [options]"
echo ""
echo "Commands:"
echo " start [network.toml] Start Zombienet with specified network"
echo " stop Stop running Zombienet"
echo " restart [network.toml] Restart Zombienet"
echo " status Show Zombienet status"
echo " logs Follow Zombienet logs"
echo " test <file.zndsl> Run a test file"
echo ""
echo "Provider: $PROVIDER"
echo "Default network: $DEFAULT_NETWORK"
exit 1
;;
esac