root / daemons / daemon-util.in @ d2baa21d
History | View | Annotate | Download (3.1 kB)
1 | f154a7a3 | Michael Hanselmann | #!/bin/bash |
---|---|---|---|
2 | f154a7a3 | Michael Hanselmann | # |
3 | f154a7a3 | Michael Hanselmann | |
4 | f154a7a3 | Michael Hanselmann | # Copyright (C) 2009 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 | f154a7a3 | Michael Hanselmann | defaults_file=@SYSCONFDIR@/default/ganeti |
24 | f154a7a3 | Michael Hanselmann | |
25 | f154a7a3 | Michael Hanselmann | NODED_ARGS= |
26 | f154a7a3 | Michael Hanselmann | MASTERD_ARGS= |
27 | f154a7a3 | Michael Hanselmann | CONFD_ARGS= |
28 | f154a7a3 | Michael Hanselmann | RAPI_ARGS= |
29 | f154a7a3 | Michael Hanselmann | |
30 | f154a7a3 | Michael Hanselmann | # Read defaults file if it exists |
31 | f154a7a3 | Michael Hanselmann | if [[ -s $defaults_file ]]; then |
32 | f154a7a3 | Michael Hanselmann | . $defaults_file |
33 | f154a7a3 | Michael Hanselmann | fi |
34 | f154a7a3 | Michael Hanselmann | |
35 | f154a7a3 | Michael Hanselmann | _daemon_pidfile() { |
36 | f154a7a3 | Michael Hanselmann | echo "@LOCALSTATEDIR@/run/ganeti/$1.pid" |
37 | f154a7a3 | Michael Hanselmann | } |
38 | f154a7a3 | Michael Hanselmann | |
39 | d2baa21d | Michael Hanselmann | # Checks whether the local machine is part of a cluster |
40 | d2baa21d | Michael Hanselmann | check_config() { |
41 | d2baa21d | Michael Hanselmann | local server_pem=@LOCALSTATEDIR@/lib/ganeti/server.pem |
42 | d2baa21d | Michael Hanselmann | local fname |
43 | d2baa21d | Michael Hanselmann | |
44 | d2baa21d | Michael Hanselmann | for fname in $server_pem; do |
45 | d2baa21d | Michael Hanselmann | if [[ ! -f $fname ]]; then |
46 | d2baa21d | Michael Hanselmann | echo "Missing configuration file $fname" >&2 |
47 | d2baa21d | Michael Hanselmann | return 1 |
48 | d2baa21d | Michael Hanselmann | fi |
49 | d2baa21d | Michael Hanselmann | done |
50 | d2baa21d | Michael Hanselmann | |
51 | d2baa21d | Michael Hanselmann | return 0 |
52 | d2baa21d | Michael Hanselmann | } |
53 | d2baa21d | Michael Hanselmann | |
54 | f154a7a3 | Michael Hanselmann | # Checks whether daemon is running |
55 | f154a7a3 | Michael Hanselmann | check() { |
56 | f154a7a3 | Michael Hanselmann | if [[ "$#" -lt 1 ]]; then |
57 | f154a7a3 | Michael Hanselmann | echo 'Missing daemon name.' >&2 |
58 | f154a7a3 | Michael Hanselmann | exit 1 |
59 | f154a7a3 | Michael Hanselmann | fi |
60 | f154a7a3 | Michael Hanselmann | |
61 | f154a7a3 | Michael Hanselmann | local name="$1"; shift |
62 | f154a7a3 | Michael Hanselmann | |
63 | f154a7a3 | Michael Hanselmann | start-stop-daemon --stop --signal 0 --quiet \ |
64 | f154a7a3 | Michael Hanselmann | --pidfile $(_daemon_pidfile $name) |
65 | f154a7a3 | Michael Hanselmann | } |
66 | f154a7a3 | Michael Hanselmann | |
67 | f154a7a3 | Michael Hanselmann | # Starts a daemon |
68 | f154a7a3 | Michael Hanselmann | start() { |
69 | f154a7a3 | Michael Hanselmann | if [[ "$#" -lt 1 ]]; then |
70 | f154a7a3 | Michael Hanselmann | echo 'Missing daemon name.' >&2 |
71 | f154a7a3 | Michael Hanselmann | exit 1 |
72 | f154a7a3 | Michael Hanselmann | fi |
73 | f154a7a3 | Michael Hanselmann | |
74 | f154a7a3 | Michael Hanselmann | local name="$1"; shift |
75 | f154a7a3 | Michael Hanselmann | |
76 | f154a7a3 | Michael Hanselmann | # Convert daemon name to uppercase after removing "ganeti-" prefix |
77 | 8645ff83 | Iustin Pop | local ucname=$(echo ${name#ganeti-} | tr a-z A-Z) |
78 | f154a7a3 | Michael Hanselmann | |
79 | f154a7a3 | Michael Hanselmann | # Read $<daemon>_ARGS and $EXTRA_<daemon>_ARGS |
80 | 03956d39 | Michael Hanselmann | eval local args="\"\$${ucname}_ARGS \$EXTRA_${ucname}_ARGS\"" |
81 | f154a7a3 | Michael Hanselmann | |
82 | f154a7a3 | Michael Hanselmann | start-stop-daemon --start --quiet --oknodo \ |
83 | f154a7a3 | Michael Hanselmann | --pidfile $(_daemon_pidfile $name) \ |
84 | f154a7a3 | Michael Hanselmann | --startas "@PREFIX@/sbin/$name" \ |
85 | f154a7a3 | Michael Hanselmann | -- $args "$@" |
86 | f154a7a3 | Michael Hanselmann | } |
87 | f154a7a3 | Michael Hanselmann | |
88 | f154a7a3 | Michael Hanselmann | # Stops a daemon |
89 | f154a7a3 | Michael Hanselmann | stop() { |
90 | f154a7a3 | Michael Hanselmann | if [[ "$#" -lt 1 ]]; then |
91 | f154a7a3 | Michael Hanselmann | echo 'Missing daemon name.' >&2 |
92 | f154a7a3 | Michael Hanselmann | exit 1 |
93 | f154a7a3 | Michael Hanselmann | fi |
94 | f154a7a3 | Michael Hanselmann | |
95 | f154a7a3 | Michael Hanselmann | local name="$1"; shift |
96 | f154a7a3 | Michael Hanselmann | |
97 | f154a7a3 | Michael Hanselmann | start-stop-daemon --stop --quiet --oknodo --retry 30 \ |
98 | f154a7a3 | Michael Hanselmann | --pidfile $(_daemon_pidfile $name) |
99 | f154a7a3 | Michael Hanselmann | } |
100 | f154a7a3 | Michael Hanselmann | |
101 | f154a7a3 | Michael Hanselmann | # Starts a daemon if it's not yet running |
102 | f154a7a3 | Michael Hanselmann | check_and_start() { |
103 | f154a7a3 | Michael Hanselmann | local name="$1" |
104 | f154a7a3 | Michael Hanselmann | |
105 | f154a7a3 | Michael Hanselmann | if ! check $name; then |
106 | f154a7a3 | Michael Hanselmann | start $name |
107 | f154a7a3 | Michael Hanselmann | fi |
108 | f154a7a3 | Michael Hanselmann | } |
109 | f154a7a3 | Michael Hanselmann | |
110 | f154a7a3 | Michael Hanselmann | # Starts the master role |
111 | f154a7a3 | Michael Hanselmann | start_master() { |
112 | f154a7a3 | Michael Hanselmann | start ganeti-masterd |
113 | f154a7a3 | Michael Hanselmann | start ganeti-rapi |
114 | f154a7a3 | Michael Hanselmann | } |
115 | f154a7a3 | Michael Hanselmann | |
116 | f154a7a3 | Michael Hanselmann | # Stops the master role |
117 | f154a7a3 | Michael Hanselmann | stop_master() { |
118 | f154a7a3 | Michael Hanselmann | stop ganeti-rapi |
119 | f154a7a3 | Michael Hanselmann | stop ganeti-masterd |
120 | f154a7a3 | Michael Hanselmann | } |
121 | f154a7a3 | Michael Hanselmann | |
122 | 7e1fac25 | Michael Hanselmann | # Reloads the SSH keys |
123 | 7e1fac25 | Michael Hanselmann | reload_ssh_keys() { |
124 | 7e1fac25 | Michael Hanselmann | @RPL_SSH_INITD_SCRIPT@ restart |
125 | 7e1fac25 | Michael Hanselmann | } |
126 | 7e1fac25 | Michael Hanselmann | |
127 | f154a7a3 | Michael Hanselmann | if [[ "$#" -lt 1 ]]; then |
128 | f154a7a3 | Michael Hanselmann | echo "Usage: $0 <action>" >&2 |
129 | f154a7a3 | Michael Hanselmann | exit 1 |
130 | f154a7a3 | Michael Hanselmann | fi |
131 | f154a7a3 | Michael Hanselmann | |
132 | f154a7a3 | Michael Hanselmann | orig_action=$1; shift |
133 | f154a7a3 | Michael Hanselmann | |
134 | 7289c16e | Michael Hanselmann | if [[ "$orig_action" == *_* ]]; then |
135 | 7289c16e | Michael Hanselmann | echo "Command must not contain underscores" >&2 |
136 | 7289c16e | Michael Hanselmann | exit 1 |
137 | 7289c16e | Michael Hanselmann | fi |
138 | 7289c16e | Michael Hanselmann | |
139 | f154a7a3 | Michael Hanselmann | # Replace all dashes (-) with underlines (_) |
140 | f154a7a3 | Michael Hanselmann | action=${orig_action//-/_} |
141 | f154a7a3 | Michael Hanselmann | |
142 | f154a7a3 | Michael Hanselmann | # Is it a known function? |
143 | f154a7a3 | Michael Hanselmann | if ! declare -F "$action" >/dev/null 2>&1; then |
144 | f154a7a3 | Michael Hanselmann | echo "Unknown command: $orig_action" >&2 |
145 | f154a7a3 | Michael Hanselmann | exit 1 |
146 | f154a7a3 | Michael Hanselmann | fi |
147 | f154a7a3 | Michael Hanselmann | |
148 | f154a7a3 | Michael Hanselmann | # Call handler function |
149 | f154a7a3 | Michael Hanselmann | $action "$@" |