root / daemons / daemon-util.in @ 10c5c1c3
History | View | Annotate | Download (3.3 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 | 10c5c1c3 | Michael Hanselmann | # Checks the exit code of a daemon |
55 | 10c5c1c3 | Michael Hanselmann | check_exitcode() { |
56 | 10c5c1c3 | Michael Hanselmann | if [[ "$#" -lt 1 ]]; then |
57 | 10c5c1c3 | Michael Hanselmann | echo 'Missing exit code.' >&2 |
58 | 10c5c1c3 | Michael Hanselmann | return 1 |
59 | 10c5c1c3 | Michael Hanselmann | fi |
60 | 10c5c1c3 | Michael Hanselmann | |
61 | 10c5c1c3 | Michael Hanselmann | local rc="$1"; shift |
62 | 10c5c1c3 | Michael Hanselmann | |
63 | 10c5c1c3 | Michael Hanselmann | case "$rc" in |
64 | 10c5c1c3 | Michael Hanselmann | 0) ;; |
65 | 10c5c1c3 | Michael Hanselmann | 11) |
66 | 10c5c1c3 | Michael Hanselmann | echo "not master" |
67 | 10c5c1c3 | Michael Hanselmann | ;; |
68 | 10c5c1c3 | Michael Hanselmann | *) |
69 | 10c5c1c3 | Michael Hanselmann | echo "exit code $rc" |
70 | 10c5c1c3 | Michael Hanselmann | return 1 |
71 | 10c5c1c3 | Michael Hanselmann | ;; |
72 | 10c5c1c3 | Michael Hanselmann | esac |
73 | 10c5c1c3 | Michael Hanselmann | |
74 | 10c5c1c3 | Michael Hanselmann | return 0 |
75 | 10c5c1c3 | Michael Hanselmann | } |
76 | 10c5c1c3 | Michael Hanselmann | |
77 | f154a7a3 | Michael Hanselmann | # Checks whether daemon is running |
78 | f154a7a3 | Michael Hanselmann | check() { |
79 | f154a7a3 | Michael Hanselmann | if [[ "$#" -lt 1 ]]; then |
80 | f154a7a3 | Michael Hanselmann | echo 'Missing daemon name.' >&2 |
81 | f154a7a3 | Michael Hanselmann | exit 1 |
82 | f154a7a3 | Michael Hanselmann | fi |
83 | f154a7a3 | Michael Hanselmann | |
84 | f154a7a3 | Michael Hanselmann | local name="$1"; shift |
85 | f154a7a3 | Michael Hanselmann | |
86 | f154a7a3 | Michael Hanselmann | start-stop-daemon --stop --signal 0 --quiet \ |
87 | f154a7a3 | Michael Hanselmann | --pidfile $(_daemon_pidfile $name) |
88 | f154a7a3 | Michael Hanselmann | } |
89 | f154a7a3 | Michael Hanselmann | |
90 | f154a7a3 | Michael Hanselmann | # Starts a daemon |
91 | f154a7a3 | Michael Hanselmann | start() { |
92 | f154a7a3 | Michael Hanselmann | if [[ "$#" -lt 1 ]]; then |
93 | f154a7a3 | Michael Hanselmann | echo 'Missing daemon name.' >&2 |
94 | f154a7a3 | Michael Hanselmann | exit 1 |
95 | f154a7a3 | Michael Hanselmann | fi |
96 | f154a7a3 | Michael Hanselmann | |
97 | f154a7a3 | Michael Hanselmann | local name="$1"; shift |
98 | f154a7a3 | Michael Hanselmann | |
99 | f154a7a3 | Michael Hanselmann | # Convert daemon name to uppercase after removing "ganeti-" prefix |
100 | 8645ff83 | Iustin Pop | local ucname=$(echo ${name#ganeti-} | tr a-z A-Z) |
101 | f154a7a3 | Michael Hanselmann | |
102 | f154a7a3 | Michael Hanselmann | # Read $<daemon>_ARGS and $EXTRA_<daemon>_ARGS |
103 | 03956d39 | Michael Hanselmann | eval local args="\"\$${ucname}_ARGS \$EXTRA_${ucname}_ARGS\"" |
104 | f154a7a3 | Michael Hanselmann | |
105 | f154a7a3 | Michael Hanselmann | start-stop-daemon --start --quiet --oknodo \ |
106 | f154a7a3 | Michael Hanselmann | --pidfile $(_daemon_pidfile $name) \ |
107 | f154a7a3 | Michael Hanselmann | --startas "@PREFIX@/sbin/$name" \ |
108 | f154a7a3 | Michael Hanselmann | -- $args "$@" |
109 | f154a7a3 | Michael Hanselmann | } |
110 | f154a7a3 | Michael Hanselmann | |
111 | f154a7a3 | Michael Hanselmann | # Stops a daemon |
112 | f154a7a3 | Michael Hanselmann | stop() { |
113 | f154a7a3 | Michael Hanselmann | if [[ "$#" -lt 1 ]]; then |
114 | f154a7a3 | Michael Hanselmann | echo 'Missing daemon name.' >&2 |
115 | f154a7a3 | Michael Hanselmann | exit 1 |
116 | f154a7a3 | Michael Hanselmann | fi |
117 | f154a7a3 | Michael Hanselmann | |
118 | f154a7a3 | Michael Hanselmann | local name="$1"; shift |
119 | f154a7a3 | Michael Hanselmann | |
120 | f154a7a3 | Michael Hanselmann | start-stop-daemon --stop --quiet --oknodo --retry 30 \ |
121 | f154a7a3 | Michael Hanselmann | --pidfile $(_daemon_pidfile $name) |
122 | f154a7a3 | Michael Hanselmann | } |
123 | f154a7a3 | Michael Hanselmann | |
124 | f154a7a3 | Michael Hanselmann | # Starts a daemon if it's not yet running |
125 | f154a7a3 | Michael Hanselmann | check_and_start() { |
126 | f154a7a3 | Michael Hanselmann | local name="$1" |
127 | f154a7a3 | Michael Hanselmann | |
128 | f154a7a3 | Michael Hanselmann | if ! check $name; then |
129 | f154a7a3 | Michael Hanselmann | start $name |
130 | f154a7a3 | Michael Hanselmann | fi |
131 | f154a7a3 | Michael Hanselmann | } |
132 | f154a7a3 | Michael Hanselmann | |
133 | f154a7a3 | Michael Hanselmann | # Starts the master role |
134 | f154a7a3 | Michael Hanselmann | start_master() { |
135 | f154a7a3 | Michael Hanselmann | start ganeti-masterd |
136 | f154a7a3 | Michael Hanselmann | start ganeti-rapi |
137 | f154a7a3 | Michael Hanselmann | } |
138 | f154a7a3 | Michael Hanselmann | |
139 | f154a7a3 | Michael Hanselmann | # Stops the master role |
140 | f154a7a3 | Michael Hanselmann | stop_master() { |
141 | f154a7a3 | Michael Hanselmann | stop ganeti-rapi |
142 | f154a7a3 | Michael Hanselmann | stop ganeti-masterd |
143 | f154a7a3 | Michael Hanselmann | } |
144 | f154a7a3 | Michael Hanselmann | |
145 | 7e1fac25 | Michael Hanselmann | # Reloads the SSH keys |
146 | 7e1fac25 | Michael Hanselmann | reload_ssh_keys() { |
147 | 7e1fac25 | Michael Hanselmann | @RPL_SSH_INITD_SCRIPT@ restart |
148 | 7e1fac25 | Michael Hanselmann | } |
149 | 7e1fac25 | Michael Hanselmann | |
150 | f154a7a3 | Michael Hanselmann | if [[ "$#" -lt 1 ]]; then |
151 | f154a7a3 | Michael Hanselmann | echo "Usage: $0 <action>" >&2 |
152 | f154a7a3 | Michael Hanselmann | exit 1 |
153 | f154a7a3 | Michael Hanselmann | fi |
154 | f154a7a3 | Michael Hanselmann | |
155 | f154a7a3 | Michael Hanselmann | orig_action=$1; shift |
156 | f154a7a3 | Michael Hanselmann | |
157 | 7289c16e | Michael Hanselmann | if [[ "$orig_action" == *_* ]]; then |
158 | 7289c16e | Michael Hanselmann | echo "Command must not contain underscores" >&2 |
159 | 7289c16e | Michael Hanselmann | exit 1 |
160 | 7289c16e | Michael Hanselmann | fi |
161 | 7289c16e | Michael Hanselmann | |
162 | f154a7a3 | Michael Hanselmann | # Replace all dashes (-) with underlines (_) |
163 | f154a7a3 | Michael Hanselmann | action=${orig_action//-/_} |
164 | f154a7a3 | Michael Hanselmann | |
165 | f154a7a3 | Michael Hanselmann | # Is it a known function? |
166 | f154a7a3 | Michael Hanselmann | if ! declare -F "$action" >/dev/null 2>&1; then |
167 | f154a7a3 | Michael Hanselmann | echo "Unknown command: $orig_action" >&2 |
168 | f154a7a3 | Michael Hanselmann | exit 1 |
169 | f154a7a3 | Michael Hanselmann | fi |
170 | f154a7a3 | Michael Hanselmann | |
171 | f154a7a3 | Michael Hanselmann | # Call handler function |
172 | f154a7a3 | Michael Hanselmann | $action "$@" |