diff options
author | Sage Weil <sage@inktank.com> | 2013-01-25 22:53:23 -0800 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-02-13 12:30:22 -0800 |
commit | c8f528a4070dd3aa0b25c435c6234032aee39b21 (patch) | |
tree | 883edb50c11f5de475f6392d3b410371f6c961ff | |
parent | b8aa4769a62e0d88174678cbefd89d9ee2baceea (diff) | |
download | ceph-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.sh | 52 | ||||
-rw-r--r-- | 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 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 |