root / doc / examples / ganeti-kvm-poweroff.initd.in @ 5d94c034
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 |