Statistics
| Branch: | Tag: | Revision:

root / daemons / daemon-util.in @ 6b06efa7

History | View | Annotate | Download (7.6 kB)

1 f154a7a3 Michael Hanselmann
#!/bin/bash
2 f154a7a3 Michael Hanselmann
#
3 f154a7a3 Michael Hanselmann
4 5ad68a23 Michael Hanselmann
# Copyright (C) 2009, 2011, 2012 Google Inc.
5 f154a7a3 Michael Hanselmann
#
6 f154a7a3 Michael Hanselmann
# This program is free software; you can redistribute it and/or modify
7 f154a7a3 Michael Hanselmann
# it under the terms of the GNU General Public License as published by
8 f154a7a3 Michael Hanselmann
# the Free Software Foundation; either version 2 of the License, or
9 f154a7a3 Michael Hanselmann
# (at your option) any later version.
10 f154a7a3 Michael Hanselmann
#
11 f154a7a3 Michael Hanselmann
# This program is distributed in the hope that it will be useful, but
12 f154a7a3 Michael Hanselmann
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 f154a7a3 Michael Hanselmann
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 f154a7a3 Michael Hanselmann
# General Public License for more details.
15 f154a7a3 Michael Hanselmann
#
16 f154a7a3 Michael Hanselmann
# You should have received a copy of the GNU General Public License
17 f154a7a3 Michael Hanselmann
# along with this program; if not, write to the Free Software
18 f154a7a3 Michael Hanselmann
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 f154a7a3 Michael Hanselmann
# 02110-1301, USA.
20 f154a7a3 Michael Hanselmann
21 f154a7a3 Michael Hanselmann
set -e
22 f154a7a3 Michael Hanselmann
23 6e3bf290 Michael Hanselmann
@SHELL_ENV_INIT@
24 6e3bf290 Michael Hanselmann
25 6e3bf290 Michael Hanselmann
readonly defaults_file="$SYSCONFDIR/default/ganeti"
26 f154a7a3 Michael Hanselmann
27 5d8acbdd Michael Hanselmann
# This is a list of all daemons and the order in which they're started. The
28 5d8acbdd Michael Hanselmann
# order is important as there are dependencies between them. On shutdown,
29 5d8acbdd Michael Hanselmann
# they're stopped in reverse order.
30 5d8acbdd Michael Hanselmann
DAEMONS=(
31 5d8acbdd Michael Hanselmann
  ganeti-noded
32 5d8acbdd Michael Hanselmann
  ganeti-masterd
33 5d8acbdd Michael Hanselmann
  ganeti-rapi
34 6b06efa7 Petr Pudlak
  ganeti-luxid
35 5d8acbdd Michael Hanselmann
  )
36 5d8acbdd Michael Hanselmann
37 bb514a22 Michael Hanselmann
_confd_enabled() {
38 bb514a22 Michael Hanselmann
  [[ "@CUSTOM_ENABLE_CONFD@" == True ]]
39 bb514a22 Michael Hanselmann
}
40 bb514a22 Michael Hanselmann
41 bb514a22 Michael Hanselmann
if _confd_enabled; then
42 c4e5d11e Iustin Pop
  DAEMONS+=( ganeti-confd )
43 c4e5d11e Iustin Pop
fi
44 c4e5d11e Iustin Pop
45 13cc7b84 Michele Tartara
_mond_enabled() {
46 13cc7b84 Michele Tartara
  [[ "@CUSTOM_ENABLE_MOND@" == True ]]
47 13cc7b84 Michele Tartara
}
48 13cc7b84 Michele Tartara
49 13cc7b84 Michele Tartara
if _mond_enabled; then
50 13cc7b84 Michele Tartara
  DAEMONS+=( ganeti-mond )
51 13cc7b84 Michele Tartara
fi
52 13cc7b84 Michele Tartara
53 f154a7a3 Michael Hanselmann
NODED_ARGS=
54 f154a7a3 Michael Hanselmann
MASTERD_ARGS=
55 f154a7a3 Michael Hanselmann
CONFD_ARGS=
56 3695a4e0 Thomas Thrainer
LUXID_ARGS=
57 f154a7a3 Michael Hanselmann
RAPI_ARGS=
58 13cc7b84 Michele Tartara
MOND_ARGS=
59 f154a7a3 Michael Hanselmann
60 f154a7a3 Michael Hanselmann
# Read defaults file if it exists
61 f154a7a3 Michael Hanselmann
if [[ -s $defaults_file ]]; then
62 f154a7a3 Michael Hanselmann
  . $defaults_file
63 f154a7a3 Michael Hanselmann
fi
64 f154a7a3 Michael Hanselmann
65 07c7c94a Jun Futagawa
# Meant to facilitate use utilities in /etc/rc.d/init.d/functions in case
66 07c7c94a Jun Futagawa
# start-stop-daemon is not available.
67 07c7c94a Jun Futagawa
_ignore_error() {
68 07c7c94a Jun Futagawa
  eval "$@" || :
69 07c7c94a Jun Futagawa
}
70 07c7c94a Jun Futagawa
71 f154a7a3 Michael Hanselmann
_daemon_pidfile() {
72 6e3bf290 Michael Hanselmann
  echo "$RUN_DIR/$1.pid"
73 f154a7a3 Michael Hanselmann
}
74 f154a7a3 Michael Hanselmann
75 a34d8cc0 Michael Hanselmann
_daemon_executable() {
76 a34d8cc0 Michael Hanselmann
  echo "@PREFIX@/sbin/$1"
77 a34d8cc0 Michael Hanselmann
}
78 a34d8cc0 Michael Hanselmann
79 cbccd9ca René Nussbaumer
_daemon_usergroup() {
80 cbccd9ca René Nussbaumer
  case "$1" in
81 cbccd9ca René Nussbaumer
    masterd)
82 cbccd9ca René Nussbaumer
      echo "@GNTMASTERUSER@:@GNTMASTERDGROUP@"
83 cbccd9ca René Nussbaumer
      ;;
84 cbccd9ca René Nussbaumer
    confd)
85 e455a3e8 Michele Tartara
      echo "@GNTCONFDUSER@:@GNTCONFDGROUP@"
86 cbccd9ca René Nussbaumer
      ;;
87 3695a4e0 Thomas Thrainer
    luxid)
88 3695a4e0 Thomas Thrainer
      echo "@GNTLUXIDUSER@:@GNTLUXIDGROUP@"
89 670e954a Thomas Thrainer
      ;;
90 cbccd9ca René Nussbaumer
    rapi)
91 cbccd9ca René Nussbaumer
      echo "@GNTRAPIUSER@:@GNTRAPIGROUP@"
92 cbccd9ca René Nussbaumer
      ;;
93 cbccd9ca René Nussbaumer
    noded)
94 97b7831a Michele Tartara
      echo "@GNTNODEDUSER@:@GNTNODEDGROUP@"
95 cbccd9ca René Nussbaumer
      ;;
96 13cc7b84 Michele Tartara
    mond)
97 13cc7b84 Michele Tartara
      echo "@GNTMONDUSER@:@GNTMONDGROUP@"
98 13cc7b84 Michele Tartara
      ;;
99 cbccd9ca René Nussbaumer
    *)
100 cbccd9ca René Nussbaumer
      echo "root:@GNTDAEMONSGROUP@"
101 cbccd9ca René Nussbaumer
      ;;
102 cbccd9ca René Nussbaumer
  esac
103 cbccd9ca René Nussbaumer
}
104 cbccd9ca René Nussbaumer
105 d2baa21d Michael Hanselmann
# Checks whether the local machine is part of a cluster
106 d2baa21d Michael Hanselmann
check_config() {
107 6e3bf290 Michael Hanselmann
  local server_pem=$DATA_DIR/server.pem
108 d2baa21d Michael Hanselmann
  local fname
109 d2baa21d Michael Hanselmann
110 d2baa21d Michael Hanselmann
  for fname in $server_pem; do
111 d2baa21d Michael Hanselmann
    if [[ ! -f $fname ]]; then
112 d2baa21d Michael Hanselmann
      echo "Missing configuration file $fname" >&2
113 d2baa21d Michael Hanselmann
      return 1
114 d2baa21d Michael Hanselmann
    fi
115 d2baa21d Michael Hanselmann
  done
116 d2baa21d Michael Hanselmann
117 d2baa21d Michael Hanselmann
  return 0
118 d2baa21d Michael Hanselmann
}
119 d2baa21d Michael Hanselmann
120 10c5c1c3 Michael Hanselmann
# Checks the exit code of a daemon
121 10c5c1c3 Michael Hanselmann
check_exitcode() {
122 10c5c1c3 Michael Hanselmann
  if [[ "$#" -lt 1 ]]; then
123 10c5c1c3 Michael Hanselmann
    echo 'Missing exit code.' >&2
124 10c5c1c3 Michael Hanselmann
    return 1
125 10c5c1c3 Michael Hanselmann
  fi
126 10c5c1c3 Michael Hanselmann
127 10c5c1c3 Michael Hanselmann
  local rc="$1"; shift
128 10c5c1c3 Michael Hanselmann
129 10c5c1c3 Michael Hanselmann
  case "$rc" in
130 10c5c1c3 Michael Hanselmann
    0) ;;
131 10c5c1c3 Michael Hanselmann
    11)
132 10c5c1c3 Michael Hanselmann
      echo "not master"
133 10c5c1c3 Michael Hanselmann
    ;;
134 10c5c1c3 Michael Hanselmann
    *)
135 10c5c1c3 Michael Hanselmann
      echo "exit code $rc"
136 10c5c1c3 Michael Hanselmann
      return 1
137 10c5c1c3 Michael Hanselmann
    ;;
138 10c5c1c3 Michael Hanselmann
  esac
139 10c5c1c3 Michael Hanselmann
140 10c5c1c3 Michael Hanselmann
  return 0
141 10c5c1c3 Michael Hanselmann
}
142 10c5c1c3 Michael Hanselmann
143 8e2ed2e8 Michael Hanselmann
# Prints path to PID file for a daemon.
144 8e2ed2e8 Michael Hanselmann
daemon_pidfile() {
145 8e2ed2e8 Michael Hanselmann
  if [[ "$#" -lt 1 ]]; then
146 8e2ed2e8 Michael Hanselmann
    echo 'Missing daemon name.' >&2
147 8e2ed2e8 Michael Hanselmann
    return 1
148 8e2ed2e8 Michael Hanselmann
  fi
149 8e2ed2e8 Michael Hanselmann
150 8e2ed2e8 Michael Hanselmann
  local name="$1"; shift
151 8e2ed2e8 Michael Hanselmann
152 8e2ed2e8 Michael Hanselmann
  _daemon_pidfile $name
153 8e2ed2e8 Michael Hanselmann
}
154 8e2ed2e8 Michael Hanselmann
155 8e2ed2e8 Michael Hanselmann
# Prints path to daemon executable.
156 8e2ed2e8 Michael Hanselmann
daemon_executable() {
157 8e2ed2e8 Michael Hanselmann
  if [[ "$#" -lt 1 ]]; then
158 8e2ed2e8 Michael Hanselmann
    echo 'Missing daemon name.' >&2
159 8e2ed2e8 Michael Hanselmann
    return 1
160 8e2ed2e8 Michael Hanselmann
  fi
161 8e2ed2e8 Michael Hanselmann
162 8e2ed2e8 Michael Hanselmann
  local name="$1"; shift
163 8e2ed2e8 Michael Hanselmann
164 8e2ed2e8 Michael Hanselmann
  _daemon_executable $name
165 8e2ed2e8 Michael Hanselmann
}
166 8e2ed2e8 Michael Hanselmann
167 5d8acbdd Michael Hanselmann
# Prints a list of all daemons in the order in which they should be started
168 5d8acbdd Michael Hanselmann
list_start_daemons() {
169 5d8acbdd Michael Hanselmann
  local name
170 5d8acbdd Michael Hanselmann
171 5d8acbdd Michael Hanselmann
  for name in "${DAEMONS[@]}"; do
172 5d8acbdd Michael Hanselmann
    echo "$name"
173 5d8acbdd Michael Hanselmann
  done
174 5d8acbdd Michael Hanselmann
}
175 5d8acbdd Michael Hanselmann
176 5d8acbdd Michael Hanselmann
# Prints a list of all daemons in the order in which they should be stopped
177 5d8acbdd Michael Hanselmann
list_stop_daemons() {
178 5d8acbdd Michael Hanselmann
  list_start_daemons | tac
179 5d8acbdd Michael Hanselmann
}
180 5d8acbdd Michael Hanselmann
181 5d8acbdd Michael Hanselmann
# Checks whether a daemon name is known
182 5d8acbdd Michael Hanselmann
is_daemon_name() {
183 5d8acbdd Michael Hanselmann
  if [[ "$#" -lt 1 ]]; then
184 5d8acbdd Michael Hanselmann
    echo 'Missing daemon name.' >&2
185 5d8acbdd Michael Hanselmann
    return 1
186 5d8acbdd Michael Hanselmann
  fi
187 5d8acbdd Michael Hanselmann
188 5d8acbdd Michael Hanselmann
  local name="$1"; shift
189 5d8acbdd Michael Hanselmann
190 5d8acbdd Michael Hanselmann
  for i in "${DAEMONS[@]}"; do
191 5d8acbdd Michael Hanselmann
    if [[ "$i" == "$name" ]]; then
192 5d8acbdd Michael Hanselmann
      return 0
193 5d8acbdd Michael Hanselmann
    fi
194 5d8acbdd Michael Hanselmann
  done
195 5d8acbdd Michael Hanselmann
196 5d8acbdd Michael Hanselmann
  echo "Unknown daemon name '$name'" >&2
197 5d8acbdd Michael Hanselmann
  return 1
198 5d8acbdd Michael Hanselmann
}
199 5d8acbdd Michael Hanselmann
200 f154a7a3 Michael Hanselmann
# Checks whether daemon is running
201 f154a7a3 Michael Hanselmann
check() {
202 f154a7a3 Michael Hanselmann
  if [[ "$#" -lt 1 ]]; then
203 f154a7a3 Michael Hanselmann
    echo 'Missing daemon name.' >&2
204 49d43244 Michael Hanselmann
    return 1
205 f154a7a3 Michael Hanselmann
  fi
206 f154a7a3 Michael Hanselmann
207 f154a7a3 Michael Hanselmann
  local name="$1"; shift
208 07c7c94a Jun Futagawa
  local pidfile=$(_daemon_pidfile $name)
209 07c7c94a Jun Futagawa
  local daemonexec=$(_daemon_executable $name)
210 07c7c94a Jun Futagawa
211 07c7c94a Jun Futagawa
  if type -p start-stop-daemon >/dev/null; then
212 07c7c94a Jun Futagawa
    start-stop-daemon --stop --signal 0 --quiet \
213 07c7c94a Jun Futagawa
      --pidfile $pidfile
214 07c7c94a Jun Futagawa
  else
215 07c7c94a Jun Futagawa
    _ignore_error status \
216 07c7c94a Jun Futagawa
      -p $pidfile \
217 07c7c94a Jun Futagawa
      $daemonexec
218 07c7c94a Jun Futagawa
  fi
219 f154a7a3 Michael Hanselmann
}
220 f154a7a3 Michael Hanselmann
221 f154a7a3 Michael Hanselmann
# Starts a daemon
222 f154a7a3 Michael Hanselmann
start() {
223 f154a7a3 Michael Hanselmann
  if [[ "$#" -lt 1 ]]; then
224 f154a7a3 Michael Hanselmann
    echo 'Missing daemon name.' >&2
225 49d43244 Michael Hanselmann
    return 1
226 f154a7a3 Michael Hanselmann
  fi
227 f154a7a3 Michael Hanselmann
228 f154a7a3 Michael Hanselmann
  local name="$1"; shift
229 3c29e49d Iustin Pop
  # Convert daemon name to uppercase after removing "ganeti-" prefix
230 3c29e49d Iustin Pop
  local plain_name=${name#ganeti-}
231 3c29e49d Iustin Pop
  local ucname=$(tr a-z A-Z <<<$plain_name)
232 07c7c94a Jun Futagawa
  local pidfile=$(_daemon_pidfile $name)
233 07c7c94a Jun Futagawa
  local usergroup=$(_daemon_usergroup $plain_name)
234 07c7c94a Jun Futagawa
  local daemonexec=$(_daemon_executable $name)
235 f154a7a3 Michael Hanselmann
236 6b06efa7 Petr Pudlak
  if [[ "$name" == ganeti-confd ]] \
237 670e954a Thomas Thrainer
      && ! _confd_enabled; then
238 c4e5d11e Iustin Pop
    echo 'ganeti-confd disabled at build time' >&2
239 c4e5d11e Iustin Pop
    return 1
240 c4e5d11e Iustin Pop
  fi
241 c4e5d11e Iustin Pop
242 f154a7a3 Michael Hanselmann
  # Read $<daemon>_ARGS and $EXTRA_<daemon>_ARGS
243 03956d39 Michael Hanselmann
  eval local args="\"\$${ucname}_ARGS \$EXTRA_${ucname}_ARGS\""
244 f154a7a3 Michael Hanselmann
245 46a8da3b René Nussbaumer
  @PKGLIBDIR@/ensure-dirs
246 46a8da3b René Nussbaumer
247 07c7c94a Jun Futagawa
  if type -p start-stop-daemon >/dev/null; then
248 07c7c94a Jun Futagawa
    start-stop-daemon --start --quiet --oknodo \
249 07c7c94a Jun Futagawa
      --pidfile $pidfile \
250 07c7c94a Jun Futagawa
      --startas $daemonexec \
251 07c7c94a Jun Futagawa
      --chuid $usergroup \
252 07c7c94a Jun Futagawa
      -- $args "$@"
253 07c7c94a Jun Futagawa
  else
254 07c7c94a Jun Futagawa
    # TODO: Find a way to start daemon with a group, until then the group must
255 07c7c94a Jun Futagawa
    # be removed
256 07c7c94a Jun Futagawa
    _ignore_error daemon \
257 07c7c94a Jun Futagawa
      --pidfile $pidfile \
258 07c7c94a Jun Futagawa
      --user ${usergroup%:*} \
259 07c7c94a Jun Futagawa
      $daemonexec $args "$@"
260 07c7c94a Jun Futagawa
  fi
261 c93daaa9 Helga Velroyen
262 f154a7a3 Michael Hanselmann
}
263 f154a7a3 Michael Hanselmann
264 f154a7a3 Michael Hanselmann
# Stops a daemon
265 f154a7a3 Michael Hanselmann
stop() {
266 f154a7a3 Michael Hanselmann
  if [[ "$#" -lt 1 ]]; then
267 f154a7a3 Michael Hanselmann
    echo 'Missing daemon name.' >&2
268 49d43244 Michael Hanselmann
    return 1
269 f154a7a3 Michael Hanselmann
  fi
270 f154a7a3 Michael Hanselmann
271 f154a7a3 Michael Hanselmann
  local name="$1"; shift
272 07c7c94a Jun Futagawa
  local pidfile=$(_daemon_pidfile $name)
273 f154a7a3 Michael Hanselmann
274 07c7c94a Jun Futagawa
  if type -p start-stop-daemon >/dev/null; then
275 07c7c94a Jun Futagawa
    start-stop-daemon --stop --quiet --oknodo --retry 30 \
276 07c7c94a Jun Futagawa
      --pidfile $pidfile
277 07c7c94a Jun Futagawa
  else
278 07c7c94a Jun Futagawa
    _ignore_error killproc -p $pidfile $name
279 07c7c94a Jun Futagawa
  fi
280 f154a7a3 Michael Hanselmann
}
281 f154a7a3 Michael Hanselmann
282 f154a7a3 Michael Hanselmann
# Starts a daemon if it's not yet running
283 f154a7a3 Michael Hanselmann
check_and_start() {
284 f154a7a3 Michael Hanselmann
  local name="$1"
285 f154a7a3 Michael Hanselmann
286 f154a7a3 Michael Hanselmann
  if ! check $name; then
287 f154a7a3 Michael Hanselmann
    start $name
288 f154a7a3 Michael Hanselmann
  fi
289 f154a7a3 Michael Hanselmann
}
290 f154a7a3 Michael Hanselmann
291 f154a7a3 Michael Hanselmann
# Starts the master role
292 f154a7a3 Michael Hanselmann
start_master() {
293 f154a7a3 Michael Hanselmann
  start ganeti-masterd
294 f154a7a3 Michael Hanselmann
  start ganeti-rapi
295 6b06efa7 Petr Pudlak
  start ganeti-luxid
296 f154a7a3 Michael Hanselmann
}
297 f154a7a3 Michael Hanselmann
298 f154a7a3 Michael Hanselmann
# Stops the master role
299 f154a7a3 Michael Hanselmann
stop_master() {
300 6b06efa7 Petr Pudlak
  stop ganeti-luxid
301 f154a7a3 Michael Hanselmann
  stop ganeti-rapi
302 f154a7a3 Michael Hanselmann
  stop ganeti-masterd
303 f154a7a3 Michael Hanselmann
}
304 f154a7a3 Michael Hanselmann
305 2250afb3 Michael Hanselmann
# Start all daemons
306 2250afb3 Michael Hanselmann
start_all() {
307 2250afb3 Michael Hanselmann
  for i in $(list_start_daemons); do
308 2250afb3 Michael Hanselmann
    local rc=0
309 2250afb3 Michael Hanselmann
310 2250afb3 Michael Hanselmann
    # Try to start daemon
311 2250afb3 Michael Hanselmann
    start $i || rc=$?
312 2250afb3 Michael Hanselmann
313 2250afb3 Michael Hanselmann
    if ! errmsg=$(check_exitcode $rc); then
314 2250afb3 Michael Hanselmann
      echo "$errmsg" >&2
315 2250afb3 Michael Hanselmann
      return 1
316 2250afb3 Michael Hanselmann
    fi
317 2250afb3 Michael Hanselmann
  done
318 2250afb3 Michael Hanselmann
319 2250afb3 Michael Hanselmann
  return 0
320 2250afb3 Michael Hanselmann
}
321 2250afb3 Michael Hanselmann
322 2250afb3 Michael Hanselmann
# Stop all daemons
323 2250afb3 Michael Hanselmann
stop_all() {
324 2250afb3 Michael Hanselmann
  for i in $(list_stop_daemons); do
325 2250afb3 Michael Hanselmann
    stop $i
326 2250afb3 Michael Hanselmann
  done
327 2250afb3 Michael Hanselmann
}
328 2250afb3 Michael Hanselmann
329 f99cbfbd Apollon Oikonomopoulos
# SIGHUP a process to force re-opening its logfiles
330 f99cbfbd Apollon Oikonomopoulos
rotate_logs() {
331 f99cbfbd Apollon Oikonomopoulos
  if [[ "$#" -lt 1 ]]; then
332 f99cbfbd Apollon Oikonomopoulos
    echo 'Missing daemon name.' >&2
333 f99cbfbd Apollon Oikonomopoulos
    return 1
334 f99cbfbd Apollon Oikonomopoulos
  fi
335 f99cbfbd Apollon Oikonomopoulos
336 f99cbfbd Apollon Oikonomopoulos
  local name="$1"; shift
337 f99cbfbd Apollon Oikonomopoulos
  local pidfile=$(_daemon_pidfile $name)
338 f99cbfbd Apollon Oikonomopoulos
  local daemonexec=$(_daemon_executable $name)
339 f99cbfbd Apollon Oikonomopoulos
340 f99cbfbd Apollon Oikonomopoulos
  if type -p start-stop-daemon >/dev/null; then
341 f99cbfbd Apollon Oikonomopoulos
    start-stop-daemon --stop --signal HUP --quiet \
342 9a8e4b73 Apollon Oikonomopoulos
      --oknodo --pidfile $pidfile
343 f99cbfbd Apollon Oikonomopoulos
  else
344 f99cbfbd Apollon Oikonomopoulos
    _ignore_error killproc \
345 f99cbfbd Apollon Oikonomopoulos
      -p $pidfile \
346 f99cbfbd Apollon Oikonomopoulos
      $daemonexec -HUP
347 f99cbfbd Apollon Oikonomopoulos
  fi
348 f99cbfbd Apollon Oikonomopoulos
}
349 f99cbfbd Apollon Oikonomopoulos
350 f99cbfbd Apollon Oikonomopoulos
# SIGHUP all processes
351 f99cbfbd Apollon Oikonomopoulos
rotate_all_logs() {
352 f99cbfbd Apollon Oikonomopoulos
  for i in $(list_stop_daemons); do
353 f99cbfbd Apollon Oikonomopoulos
    rotate_logs $i
354 f99cbfbd Apollon Oikonomopoulos
  done
355 f99cbfbd Apollon Oikonomopoulos
}
356 f99cbfbd Apollon Oikonomopoulos
357 7e1fac25 Michael Hanselmann
# Reloads the SSH keys
358 7e1fac25 Michael Hanselmann
reload_ssh_keys() {
359 7e1fac25 Michael Hanselmann
  @RPL_SSH_INITD_SCRIPT@ restart
360 7e1fac25 Michael Hanselmann
}
361 7e1fac25 Michael Hanselmann
362 07c7c94a Jun Futagawa
# Read @SYSCONFDIR@/rc.d/init.d/functions if start-stop-daemon not available
363 07c7c94a Jun Futagawa
if ! type -p start-stop-daemon >/dev/null && \
364 07c7c94a Jun Futagawa
   [[ -f @SYSCONFDIR@/rc.d/init.d/functions ]]; then
365 07c7c94a Jun Futagawa
  _ignore_error . @SYSCONFDIR@/rc.d/init.d/functions
366 07c7c94a Jun Futagawa
fi
367 07c7c94a Jun Futagawa
368 f154a7a3 Michael Hanselmann
if [[ "$#" -lt 1 ]]; then
369 f154a7a3 Michael Hanselmann
  echo "Usage: $0 <action>" >&2
370 f154a7a3 Michael Hanselmann
  exit 1
371 f154a7a3 Michael Hanselmann
fi
372 f154a7a3 Michael Hanselmann
373 f154a7a3 Michael Hanselmann
orig_action=$1; shift
374 f154a7a3 Michael Hanselmann
375 7289c16e Michael Hanselmann
if [[ "$orig_action" == *_* ]]; then
376 7289c16e Michael Hanselmann
  echo "Command must not contain underscores" >&2
377 7289c16e Michael Hanselmann
  exit 1
378 7289c16e Michael Hanselmann
fi
379 7289c16e Michael Hanselmann
380 f154a7a3 Michael Hanselmann
# Replace all dashes (-) with underlines (_)
381 f154a7a3 Michael Hanselmann
action=${orig_action//-/_}
382 f154a7a3 Michael Hanselmann
383 f154a7a3 Michael Hanselmann
# Is it a known function?
384 f154a7a3 Michael Hanselmann
if ! declare -F "$action" >/dev/null 2>&1; then
385 f154a7a3 Michael Hanselmann
  echo "Unknown command: $orig_action" >&2
386 f154a7a3 Michael Hanselmann
  exit 1
387 f154a7a3 Michael Hanselmann
fi
388 f154a7a3 Michael Hanselmann
389 f154a7a3 Michael Hanselmann
# Call handler function
390 f154a7a3 Michael Hanselmann
$action "$@"