dlan        15/08/06 02:38:08

  Added:                rbdmap.initd
  Log:
  add rbdmap init script, bug 553292, thanks frank <skunk at legalise.it>
  
  (Portage version: 2.2.20/cvs/Linux x86_64, signed Manifest commit with key 
0xAABEFD55)

Revision  Changes    Path
1.1                  sys-cluster/ceph/files/rbdmap.initd

file : 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-cluster/ceph/files/rbdmap.initd?rev=1.1&view=markup
plain: 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-cluster/ceph/files/rbdmap.initd?rev=1.1&content-type=text/plain

Index: rbdmap.initd
===================================================================
#!/sbin/runscript

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
}




Reply via email to