From 39df4c81f2166b7e9ac89c591b268b60de4042e6 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 25 Jan 2013 22:53:23 -0800 Subject: [PATCH] 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 (cherry picked from commit c8f528a4070dd3aa0b25c435c6234032aee39b21) --- src/ceph_common.sh | 52 ++++++++++++++++++++++++++++++++++++++-------- src/init-ceph.in | 1 + 2 files changed, 44 insertions(+), 9 deletions(-) diff --git a/src/ceph_common.sh b/src/ceph_common.sh index 8e90290e853a3..5576018fa4fde 100644 --- a/src/ceph_common.sh +++ b/src/ceph_common.sh @@ -128,14 +128,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 @@ -143,17 +178,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 0295ec94508a7..a989ef1e95a2c 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 -- 2.39.5