summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-01-25 22:53:23 -0800
committerSage Weil <sage@inktank.com>2013-02-13 12:30:22 -0800
commitc8f528a4070dd3aa0b25c435c6234032aee39b21 (patch)
tree883edb50c11f5de475f6392d3b410371f6c961ff
parentb8aa4769a62e0d88174678cbefd89d9ee2baceea (diff)
downloadceph-c8f528a4070dd3aa0b25c435c6234032aee39b21.tar.gz
init-ceph: iterate/locate local sysvinit-tagged directories
Search /var/lib/ceph/$type/ceph-$id and start/stop those daemons if present and tagged with the sysvinit file. Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r--src/ceph_common.sh52
-rw-r--r--src/init-ceph.in1
2 files changed, 44 insertions, 9 deletions
diff --git a/src/ceph_common.sh b/src/ceph_common.sh
index 9231b09c4af..5e77a175c92 100644
--- a/src/ceph_common.sh
+++ b/src/ceph_common.sh
@@ -110,14 +110,49 @@ do_root_cmd() {
fi
}
+get_local_daemon_list() {
+ type=$1
+ if [ -d "/var/lib/ceph/$type" ]; then
+ for i in `find /var/lib/ceph/$type -mindepth 1 -maxdepth 1 -type d -printf '%f\n'`; do
+ if [ -e "/var/lib/ceph/$type/$i/sysvinit" ]; then
+ id=`echo $i | sed 's/.*-//'`
+ local="$local $type.$id"
+ fi
+ done
+ fi
+}
+
+get_local_name_list() {
+ orig=$1
+ local=""
+
+ if [ -z "$orig" ]; then
+ # enumerate local directories
+ get_local_daemon_list "mon"
+ get_local_daemon_list "osd"
+ get_local_daemon_list "mds"
+ return
+ fi
+
+ for f in $orig; do
+ type=`echo $f | cut -c 1-3` # e.g. 'mon', if $item is 'mon1'
+ id=`echo $f | cut -c 4- | sed 's/\\.//'`
+ get_local_daemon_list $type
+
+ # FIXME
+ done
+}
+
get_name_list() {
orig=$1
+ # extract list of monitors, mdss, osds defined in startup.conf
+ allconf=`$CCONF -c $conf -l mon | egrep -v '^mon$' ; \
+ $CCONF -c $conf -l mds | egrep -v '^mds$' ; \
+ $CCONF -c $conf -l osd | egrep -v '^osd$'`
+
if [ -z "$orig" ]; then
- # extract list of monitors, mdss, osds defined in startup.conf
- what=`$CCONF -c $conf -l mon | egrep -v '^mon$' ; \
- $CCONF -c $conf -l mds | egrep -v '^mds$' ; \
- $CCONF -c $conf -l osd | egrep -v '^osd$'`
+ what="$allconf $local"
return
fi
@@ -125,17 +160,16 @@ get_name_list() {
for f in $orig; do
type=`echo $f | cut -c 1-3` # e.g. 'mon', if $item is 'mon1'
id=`echo $f | cut -c 4- | sed 's/\\.//'`
- all=`$CCONF -c $conf -l $type | egrep -v "^$type$" || true`
case $f in
mon | osd | mds)
- what="$what $all"
+ what=`echo $allconf $local | grep ^$type || true`
;;
*)
- if echo " " $all " " | egrep -v -q "( $type$id | $type.$id )"; then
- echo "$0: $type.$id not found ($conf defines \"$all\")"
+ if echo " " "$allconf" "$local" " " | egrep -v -q "( $type$id | $type.$id )"; then
+ echo "$0: $type.$id not found ($conf defines \"$all\", /var/lib/ceph defines \"$local\")"
exit 1
fi
- what="$what $f"
+ what="$f"
;;
esac
done
diff --git a/src/init-ceph.in b/src/init-ceph.in
index f7b85b131e8..121b03f22ab 100644
--- a/src/init-ceph.in
+++ b/src/init-ceph.in
@@ -165,6 +165,7 @@ verify_conf
command=$1
[ -n "$*" ] && shift
+get_local_name_list "$@"
get_name_list "$@"
for name in $what; do