]> git.pld-linux.org Git - packages/xen.git/blame - xendomains.sh
- updated to 4.3.0 (note: new sonames; x86_32 hypervisor is gone, only x86_64 and...
[packages/xen.git] / xendomains.sh
CommitLineData
e9dbc551
JR
1#!/bin/bash
2
3if ! [ -e /proc/xen/privcmd ]; then
4 exit 0
5fi
6
7TOOLSTACK=$(/usr/lib/xen/bin/xen-toolstack toolstack 2>/dev/null)
8if [ $? -ne 0 ]; then
9 echo "No usable Xen toolstack selected"
10 exit 0
11fi
12if [ "$(basename "$TOOLSTACK")" != xl ] && [ "$(basename "$TOOLSTACK")" != xm ]; then
13 exit 0
14fi
15
16if ! /usr/lib/xen/bin/xen-toolstack list >/dev/null 2>&1 ; then
17 exit 0;
18fi
19
20[ -r /etc/sysconfig/xendomains ] && . /etc/sysconfig/xendomains
21
22shopt -s nullglob
23
24check_config_name()
25{
26 /usr/lib/xen/bin/xen-toolstack create --quiet --dryrun --defconfig "$1" | sed -n 's/^.*\("name":"\([^"]*\)",.*\)\|(name \(.*\))$/\2\3/p'
27}
28
29check_running()
30{
31 /usr/lib/xen/bin/xen-toolstack domid "$1" >/dev/null 2>&1
32 return $?
33}
34
35timeout_coproc()
36{
37 local TIMEOUT=$1
38 shift
39
40 coproc "$@" >/dev/null 2>&1
41
42 local COPROC_OUT
43 exec {COPROC_OUT}<&"${COPROC[0]}"
44 local PID="$COPROC_PID"
45
46 for no in $(seq 0 $TIMEOUT); do
47 if [ -z "$COPROC_PID" ]; then break; fi
48 sleep 1
49 done
50
51 kill -INT "$COPROC_PID" >/dev/null 2>&1
52 wait $PID
53 local rc=$?
54 if [ $rc -eq 0 ]; then
55 echo "ok"
56 else
57 echo "fail ($rc)"
58 fi
59
60 [ $rc -gt 0 ] && cat <&$COPROC_OUT
61 exec <&$COPROC_OUT-
62}
63
64timeout_domain()
65{
66 name="$1"
67 TIMEOUT="$2"
68 for no in $(seq 0 $TIMEOUT); do
69 if ! check_running "$name"; then return 0; fi
70 sleep 1
71 done
72 return 1
73}
74
75do_start_restore()
76{
77 [ -n "$XENDOMAINS_SAVE" ] || return
78 [ -d "$XENDOMAINS_SAVE" ] || return
79 [ -n "$XENDOMAINS_RESTORE" ] || return
80
81 for file in $XENDOMAINS_SAVE/*; do
82 if [ -f $file ] ; then
83 name="${file##*/}"
84 echo -n "Restoring Xen domain $name (from $file): "
85
86 out=$(/usr/lib/xen/bin/xen-toolstack restore "$file" >/dev/null 2>&1)
87 case "$?" in
88 0)
89 rm "$file"
90 domains[$name]='started'
91 echo "ok"
92 ;;
93 *)
94 domains[$name]='failed'
95 echo "fail"
96 echo "$out"
97 ;;
98 esac
99 fi
100 done
101}
102
103do_start_auto()
104{
105 [ -n "$XENDOMAINS_AUTO" ] || return
106 [ -d "$XENDOMAINS_AUTO" ] || return
107
108 for file in $XENDOMAINS_AUTO/*; do
109 name="$(check_config_name $file)"
110
111 if [ "${domains[$name]}" = started ]; then
112 :
113 elif check_running "$name"; then
114 echo "Xen domain $name already running"
115 else
116 echo -n "Starting Xen domain $name (from $file): "
117
118 if [ "${domains[$name]}" = failed ]; then
119 echo "fail"
120 else
121 out=$(/usr/lib/xen/bin/xen-toolstack create --quiet --defconfig "$file" >/dev/null 2>&1)
122 case "$?" in
123 0)
124 echo "ok"
125 ;;
126 *)
127 echo "fail"
128 echo "$out"
129 ;;
130 esac
131 fi
132 fi
133 done
134}
135
136do_start()
137{
138 declare -A domains
139
140 do_start_restore
141 do_start_auto
142}
143
144do_stop_migrate()
145{
146 [ -n "$XENDOMAINS_MIGRATE" ] || return
147
148 while read id name rest; do
149 echo -n "Migrating Xen domain $name ($id): "
150 (timeout_coproc "$XENDOMAINS_STOP_MAXWAIT" /usr/lib/xen/bin/xen-toolstack migrate $id $XENDOMAINS_MIGRATE)
151 done < <(/usr/lib/xen/bin/xen-init-list)
152}
153
154do_stop_save()
155{
156 [ -n "$XENDOMAINS_SAVE" ] || return
157 [ -d "$XENDOMAINS_SAVE" ] || mkdir -m 0700 -p "$XENDOMAINS_SAVE"
158
159 while read id name rest; do
160 echo -n "Saving Xen domain $name ($id): "
161 (timeout_coproc "$XENDOMAINS_STOP_MAXWAIT" /usr/lib/xen/bin/xen-toolstack save $id $XENDOMAINS_SAVE/$name)
162 done < <(/usr/lib/xen/bin/xen-init-list)
163}
164
165do_stop_shutdown()
166{
167 while read id name rest; do
168 echo -n "Shutting down Xen domain $name ($id): "
169 /usr/lib/xen/bin/xen-toolstack shutdown $id >/dev/null 2>&1
170 rc=$?
171 if [ $rc -eq 0 ]; then
172 echo "ok"
173 else
174 echo "fail ($rc)"
175 fi
176 done < <(/usr/lib/xen/bin/xen-init-list)
177 while read id name rest; do
178 echo -n "Waiting for Xen domain $name ($id) to shut down: "
179 timeout_domain "$name" "$XENDOMAINS_STOP_MAXWAIT"
180 rc=$?
181 if [ $rc -eq 0 ]; then
182 echo "ok"
183 else
184 echo "fail ($rc)"
185 fi
186 done < <(/usr/lib/xen/bin/xen-init-list)
187}
188
189do_stop()
190{
191 do_stop_migrate
192 do_stop_save
193 do_stop_shutdown
194}
195
196case "$1" in
197 start)
198 do_start
199 ;;
200 stop)
201 do_stop
202 ;;
203 restart)
204 do_stop
205 do_start
206 ;;
207 reload|force-reload)
208 do_stop
209 do_start
210 ;;
211 status)
212 /usr/lib/xen/bin/xen-toolstack list -v
213 ;;
214 *)
215 echo "Usage: $0 {start|stop|status|restart|reload|force-reload}"
216 exit 3
217 ;;
218esac
219
220exit 0
This page took 0.199738 seconds and 4 git commands to generate.