openstack-helm/ceph/templates/bin/_osd_directory_single.sh.tpl
Larry Rensing 98d436eb94 Add ceph entrypoint scripts
This moves the set of ceph entrypoint scripts into the helm chart
this allows us to control how the different pods start.  Also gives
each script the +x flag to give better insight as to the execution of
entrypoint scripts.

Change-Id: Ib78b8a5d57f653bdb399a1980b34ab5ea25f94cc
2017-07-14 15:20:20 +00:00

34 lines
1.3 KiB
Smarty

#!/bin/bash
set -ex
function osd_directory_single {
if [[ ! -d /var/lib/ceph/osd ]]; then
log "ERROR- could not find the osd directory, did you bind mount the OSD data directory?"
log "ERROR- use -v <host_osd_data_dir>:/var/lib/ceph/osd"
exit 1
fi
# pick one osd and make sure no lock is held
for OSD_ID in $(ls /var/lib/ceph/osd | sed 's/.*-//'); do
OSD_PATH=$(get_osd_path $OSD_ID)
OSD_KEYRING="$OSD_PATH/keyring"
if [[ -n "$(find $OSD_PATH -prune -empty)" ]]; then
log "Looks like OSD: ${OSD_ID} has not been bootstrapped yet, doing nothing, moving on to the next discoverable OSD"
else
# check if the osd has a lock, if yes moving on, if not we run it
# many thanks to Julien Danjou for the python piece
if python -c "import sys, fcntl, struct; l = fcntl.fcntl(open('${OSD_PATH}/fsid', 'a'), fcntl.F_GETLK, struct.pack('hhllhh', fcntl.F_WRLCK, 0, 0, 0, 0, 0)); l_type, l_whence, l_start, l_len, l_pid, l_sysid = struct.unpack('hhllhh', l); sys.exit(0 if l_type == fcntl.F_UNLCK else 1)"; then
log "Looks like OSD: ${OSD_ID} is not started, starting it..."
log "SUCCESS"
exec ceph-osd $DAEMON_OPTS -i ${OSD_ID} -k $OSD_KEYRING
break
fi
fi
done
log "Looks like all the OSDs are already running, doing nothing"
log "Exiting the container"
log "SUCCESS"
exit 0
}