Statistics
| Branch: | Tag: | Revision:

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 "$@"