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>
This commit is contained in:
Sage Weil 2013-01-25 22:53:23 -08:00
parent b8aa4769a6
commit c8f528a407
2 changed files with 44 additions and 9 deletions

View File

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

View File

@ -165,6 +165,7 @@ verify_conf
command=$1
[ -n "$*" ] && shift
get_local_name_list "$@"
get_name_list "$@"
for name in $what; do