You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
2.3 KiB
122 lines
2.3 KiB
#!/sbin/openrc-run
|
|
|
|
DESC="RBD Mapping:"
|
|
RBDMAPFILE="/etc/ceph/rbdmap"
|
|
|
|
extra_started_commands="reload"
|
|
|
|
depend() {
|
|
need localmount net
|
|
before netmount
|
|
}
|
|
|
|
start() {
|
|
|
|
if [ ! -f "${RBDMAPFILE}" ]; then
|
|
ewarn "$DESC : No ${RBDMAPFILE} found."
|
|
exit 0
|
|
fi
|
|
|
|
RET=0
|
|
# Read /etc/ceph/rbdmap to create non-existant mapping
|
|
while read DEV PARAMS; do
|
|
case "$DEV" in
|
|
""|\#*)
|
|
continue
|
|
;;
|
|
*/*)
|
|
;;
|
|
*)
|
|
DEV=rbd/$DEV
|
|
;;
|
|
esac
|
|
ebegin "${DESC} '${DEV}'"
|
|
newrbd=""
|
|
MAP_RV=""
|
|
RET_OP=0
|
|
OIFS=$IFS
|
|
IFS=','
|
|
for PARAM in ${PARAMS[@]}; do
|
|
CMDPARAMS="${CMDPARAMS} --$(echo ${PARAM} | tr '=' ' ')"
|
|
done
|
|
IFS=$OIFS
|
|
if [ ! -b /dev/rbd/${DEV} ]; then
|
|
MAP_RV=$(rbd map ${DEV} ${CMDPARAMS} 2>&1)
|
|
if [ $? -eq 0 ]; then
|
|
newrbd="yes"
|
|
else
|
|
RET=$((${RET}+$?))
|
|
RET_OP=1
|
|
fi
|
|
fi
|
|
eend ${RET_OP} "${MAP_RV}"
|
|
|
|
if [ "$newrbd" ]; then
|
|
## Mount new rbd
|
|
MNT_RV=""
|
|
mount --fake /dev/rbd/${DEV} >>/dev/null 2>&1 \
|
|
&& MNT_RV=$(mount -vn /dev/rbd/${DEV} 2>&1)
|
|
[ -n "${MNT_RV}" ] && einfo "mount: ${MNT_RV}"
|
|
|
|
## post-mapping
|
|
if [ -x "/etc/ceph/rbd.d/${DEV}" ]; then
|
|
einfo "RBD Running post-map hook '/etc/ceph/rbd.d/${DEV}'"
|
|
/etc/ceph/rbd.d/${DEV} map "/dev/rbd/${DEV}"
|
|
fi
|
|
fi
|
|
done < ${RBDMAPFILE}
|
|
eend ${RET}
|
|
}
|
|
|
|
stop() {
|
|
|
|
RET=0
|
|
## Unmount and unmap all rbd devices
|
|
if ls /dev/rbd[0-9]* >/dev/null 2>&1; then
|
|
for DEV in /dev/rbd[0-9]*; do
|
|
## pre-unmapping
|
|
for L in $(find /dev/rbd -type l); do
|
|
LL="${L##/dev/rbd/}"
|
|
if [ "$(readlink -f $L)" = "${DEV}" ] \
|
|
&& [ -x "/etc/ceph/rbd.d/${LL}" ]; then
|
|
einfo "RBD pre-unmap: '${DEV}' hook '/etc/ceph/rbd.d/${LL}'"
|
|
/etc/ceph/rbd.d/${LL} unmap "$L"
|
|
break
|
|
fi
|
|
done
|
|
|
|
ebegin "Unmapping RBD device: '${DEV}'"
|
|
UMNT_RV=""
|
|
UMAP_RV=""
|
|
RET_OP=0
|
|
MNT=$(findmnt --mtab --source ${DEV} --noheadings | awk '{print $1'})
|
|
if [ -n "${MNT}" ]; then
|
|
einfo "un-mounting '${MNT}'"
|
|
UMNT_RV=$(umount "${MNT}" 2>&1)
|
|
fi
|
|
if mountpoint -q "${MNT}"; then
|
|
## Un-mounting failed.
|
|
RET_OP=1
|
|
RET=$((${RET}+1))
|
|
else
|
|
## Un-mapping.
|
|
UMAP_RV=$(rbd unmap $DEV 2>&1)
|
|
if [ $? -ne 0 ]; then
|
|
RET=$((${RET}+$?))
|
|
RET_OP=1
|
|
fi
|
|
fi
|
|
eend ${RET_OP} "${UMAP_RV}"
|
|
[ -n "${UMNT_RV}" ] && einfo "${UMNT_RV}"
|
|
done
|
|
fi
|
|
eend ${RET}
|
|
}
|
|
|
|
reload() {
|
|
start
|
|
}
|
|
|
|
status() {
|
|
rbd showmapped
|
|
}
|