Statistics
| Branch: | Tag: | Revision:

root / doc / examples / ganeti-kvm-poweroff.initd.in @ ab6536ba

History | View | Annotate | Download (1.9 kB)

1 5d9e167a Miguel Di Ciurcio Filho
#!/bin/bash
2 5d9e167a Miguel Di Ciurcio Filho
# ganeti kvm instance poweroff
3 5d9e167a Miguel Di Ciurcio Filho
# based on skeleton from Debian GNU/Linux
4 5d9e167a Miguel Di Ciurcio Filho
### BEGIN INIT INFO
5 5d9e167a Miguel Di Ciurcio Filho
# Provides:          ganeti-kvm-poweroff
6 5d9e167a Miguel Di Ciurcio Filho
# Required-Start:
7 5d9e167a Miguel Di Ciurcio Filho
# Required-Stop:     drbd qemu-kvm $local_fs
8 5d9e167a Miguel Di Ciurcio Filho
# Default-Start:
9 5d9e167a Miguel Di Ciurcio Filho
# Default-Stop: 0 1 6
10 5d9e167a Miguel Di Ciurcio Filho
# Short-Description: Poweroff Ganeti KVM instances
11 5d9e167a Miguel Di Ciurcio Filho
# Description: Sends system_powerdown command to Ganeti instances, otherwise
12 5d9e167a Miguel Di Ciurcio Filho
# they will be killed.
13 5d9e167a Miguel Di Ciurcio Filho
### END INIT INFO
14 5d9e167a Miguel Di Ciurcio Filho
15 5d9e167a Miguel Di Ciurcio Filho
shopt -s nullglob
16 5d9e167a Miguel Di Ciurcio Filho
17 5d9e167a Miguel Di Ciurcio Filho
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
18 5d9e167a Miguel Di Ciurcio Filho
DESC="Ganeti KVM instance poweroff "
19 5d9e167a Miguel Di Ciurcio Filho
20 5d9e167a Miguel Di Ciurcio Filho
. /lib/lsb/init-functions
21 5d9e167a Miguel Di Ciurcio Filho
22 5d9e167a Miguel Di Ciurcio Filho
CONTROL_PATH="@LOCALSTATEDIR@/run/ganeti/kvm-hypervisor/ctrl"
23 5d9e167a Miguel Di Ciurcio Filho
SCRIPTNAME="@SYSCONFDIR@/init.d/ganeti-kvm-poweroff"
24 5d9e167a Miguel Di Ciurcio Filho
TIMEOUT=60
25 5d9e167a Miguel Di Ciurcio Filho
26 5d9e167a Miguel Di Ciurcio Filho
do_kvm_poweroff () {
27 5d9e167a Miguel Di Ciurcio Filho
    # shutdown VMs and remove sockets of those not running
28 5d9e167a Miguel Di Ciurcio Filho
    for vm_monitor in $CONTROL_PATH/*.monitor; do
29 5d9e167a Miguel Di Ciurcio Filho
        if ! echo system_powerdown | \
30 5d9e167a Miguel Di Ciurcio Filho
            socat -U UNIX:$vm_monitor STDIO > /dev/null 2>&1; then
31 5d9e167a Miguel Di Ciurcio Filho
            # remove disconnected socket
32 5d9e167a Miguel Di Ciurcio Filho
            rm -f $vm_monitor
33 5d9e167a Miguel Di Ciurcio Filho
        fi
34 5d9e167a Miguel Di Ciurcio Filho
    done
35 5d9e167a Miguel Di Ciurcio Filho
36 5d9e167a Miguel Di Ciurcio Filho
    log_action_begin_msg "Waiting VMs to poweroff"
37 5d9e167a Miguel Di Ciurcio Filho
    waiting=true
38 5d9e167a Miguel Di Ciurcio Filho
    remaning=$TIMEOUT
39 5d9e167a Miguel Di Ciurcio Filho
    while $waiting && [ $remaning -ne 0 ]; do
40 5d9e167a Miguel Di Ciurcio Filho
        if [[ -z "$(find $CONTROL_PATH -name '*.monitor')" ]]; then
41 5d9e167a Miguel Di Ciurcio Filho
            break
42 5d9e167a Miguel Di Ciurcio Filho
        fi
43 5d9e167a Miguel Di Ciurcio Filho
44 5d9e167a Miguel Di Ciurcio Filho
        echo -n "."
45 5d9e167a Miguel Di Ciurcio Filho
        for vm_monitor in $CONTROL_PATH/*.monitor; do
46 5d9e167a Miguel Di Ciurcio Filho
            if ! echo | socat -U UNIX:$vm_monitor STDIO > /dev/null 2>&1; then
47 5d9e167a Miguel Di Ciurcio Filho
                rm -rf $vm_monitor
48 5d9e167a Miguel Di Ciurcio Filho
            fi
49 5d9e167a Miguel Di Ciurcio Filho
        done
50 5d9e167a Miguel Di Ciurcio Filho
51 5d9e167a Miguel Di Ciurcio Filho
        sleep 5
52 5d9e167a Miguel Di Ciurcio Filho
        let remaining-=5 1
53 5d9e167a Miguel Di Ciurcio Filho
    done
54 5d9e167a Miguel Di Ciurcio Filho
55 5d9e167a Miguel Di Ciurcio Filho
    if [[ -z "$(find $CONTROL_PATH -name '*.monitor')" ]]; then
56 5d9e167a Miguel Di Ciurcio Filho
        log_action_end_msg 0
57 5d9e167a Miguel Di Ciurcio Filho
    else
58 5d9e167a Miguel Di Ciurcio Filho
        log_action_end_msg 1 "some VMs did not shutdown"
59 5d9e167a Miguel Di Ciurcio Filho
    fi
60 5d9e167a Miguel Di Ciurcio Filho
}
61 5d9e167a Miguel Di Ciurcio Filho
62 5d9e167a Miguel Di Ciurcio Filho
case "$1" in
63 5d9e167a Miguel Di Ciurcio Filho
  start)
64 5d9e167a Miguel Di Ciurcio Filho
    # No-op
65 5d9e167a Miguel Di Ciurcio Filho
    ;;
66 5d9e167a Miguel Di Ciurcio Filho
  restart|reload|force-reload)
67 5d9e167a Miguel Di Ciurcio Filho
    echo "Error: argument '$1' not supported" >&2
68 5d9e167a Miguel Di Ciurcio Filho
    exit 3
69 5d9e167a Miguel Di Ciurcio Filho
    ;;
70 5d9e167a Miguel Di Ciurcio Filho
  stop)
71 5d9e167a Miguel Di Ciurcio Filho
    do_kvm_poweroff
72 5d9e167a Miguel Di Ciurcio Filho
    ;;
73 5d9e167a Miguel Di Ciurcio Filho
  *)
74 5d9e167a Miguel Di Ciurcio Filho
    echo "Usage: $0 start|stop" >&2
75 5d9e167a Miguel Di Ciurcio Filho
    exit 3
76 5d9e167a Miguel Di Ciurcio Filho
    ;;
77 5d9e167a Miguel Di Ciurcio Filho
esac