mirror of
https://github.com/CloudNebulaProject/vm-manager.git
synced 2026-04-10 13:20:41 +00:00
50 lines
1.2 KiB
Bash
50 lines
1.2 KiB
Bash
|
|
#!/bin/ksh
|
||
|
|
#
|
||
|
|
# nebula-vm brand: halt script
|
||
|
|
#
|
||
|
|
# Called by zoneadm(8) when the zone is being halted.
|
||
|
|
# Arguments: %z = zone name, %R = zone root
|
||
|
|
#
|
||
|
|
|
||
|
|
ZONENAME="$1"
|
||
|
|
ZONEROOT="$2"
|
||
|
|
|
||
|
|
if [[ -z "$ZONENAME" || -z "$ZONEROOT" ]]; then
|
||
|
|
echo "Usage: halt.ksh <zone-name> <zone-root>" >&2
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "nebula-vm: halting zone '${ZONENAME}'"
|
||
|
|
|
||
|
|
# Stop propolis-server
|
||
|
|
PIDFILE="${ZONEROOT}/root/var/run/propolis.pid"
|
||
|
|
if [[ -f "$PIDFILE" ]]; then
|
||
|
|
PID=$(cat "$PIDFILE")
|
||
|
|
if [[ -n "$PID" ]] && kill -0 "$PID" 2>/dev/null; then
|
||
|
|
echo "nebula-vm: stopping propolis-server (pid=${PID})"
|
||
|
|
kill -TERM "$PID"
|
||
|
|
# Wait up to 10 seconds for graceful shutdown
|
||
|
|
WAIT=0
|
||
|
|
while kill -0 "$PID" 2>/dev/null && [[ $WAIT -lt 10 ]]; do
|
||
|
|
sleep 1
|
||
|
|
WAIT=$((WAIT + 1))
|
||
|
|
done
|
||
|
|
# Force kill if still running
|
||
|
|
if kill -0 "$PID" 2>/dev/null; then
|
||
|
|
echo "nebula-vm: force-killing propolis-server"
|
||
|
|
kill -KILL "$PID"
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
rm -f "$PIDFILE"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Clean up VNIC
|
||
|
|
VNIC_NAME="vnic_${ZONENAME}"
|
||
|
|
if dladm show-vnic "$VNIC_NAME" >/dev/null 2>&1; then
|
||
|
|
echo "nebula-vm: removing VNIC ${VNIC_NAME}"
|
||
|
|
dladm delete-vnic "$VNIC_NAME" || true
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "nebula-vm: zone '${ZONENAME}' halted"
|
||
|
|
exit 0
|