#!/bin/sh # Initialization: : ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat} . ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs # Convenience variables # When sysconfdir isn't passed in as a configure flag, # it's defined in terms of prefix prefix=@prefix@ CEPH_INIT=@sysconfdir@/init.d/ceph ceph_meta_data() { local longdesc local shortdesc case $__SCRIPT_NAME in "osd") longdesc="Wraps the ceph init script to provide an OCF resource agent that manages and monitors the Ceph OSD service." shortdesc="Manages a Ceph OSD instance." ;; "mds") longdesc="Wraps the ceph init script to provide an OCF resource agent that manages and monitors the Ceph MDS service." shortdesc="Manages a Ceph MDS instance." ;; "mon") longdesc="Wraps the ceph init script to provide an OCF resource agent that manages and monitors the Ceph MON service." shortdesc="Manages a Ceph MON instance." ;; esac cat < 0.1 ${longdesc} ${shortdesc} EOF } ceph_action() { local init_action init_action="$1" case ${__SCRIPT_NAME} in osd|mds|mon) ocf_run $CEPH_INIT $init_action ${__SCRIPT_NAME} ;; *) ocf_run $CEPH_INIT $init_action ;; esac } ceph_validate_all() { # Do we have the ceph init script? check_binary @sysconfdir@/init.d/ceph # Do we have a configuration file? [ -e @sysconfdir@/ceph/ceph.conf ] || exit $OCF_ERR_INSTALLED } ceph_monitor() { local rc ceph_action status # 0: running, and fully caught up with master # 3: gracefully stopped # any other: error case "$?" in 0) rc=$OCF_SUCCESS ocf_log debug "Resource is running" ;; 3) rc=$OCF_NOT_RUNNING ocf_log debug "Resource is not running" ;; *) ocf_log err "Resource has failed" rc=$OCF_ERR_GENERIC esac return $rc } ceph_start() { # if resource is already running, bail out early if ceph_monitor; then ocf_log info "Resource is already running" return $OCF_SUCCESS fi ceph_action start while ! ceph_monitor; do ocf_log debug "Resource has not started yet, waiting" sleep 1 done return $OCF_SUCCESS } ceph_stop() { local rc # exit immediately if configuration is not valid ceph_validate_all || exit $? ceph_monitor rc=$? case "$rc" in "$OCF_SUCCESS") # Currently running. Normal, expected behavior. ocf_log debug "Resource is currently running" ;; "$OCF_NOT_RUNNING") # Currently not running. Nothing to do. ocf_log info "Resource is already stopped" return $OCF_SUCCESS ;; esac ceph_action stop while ceph_monitor; do ocf_log debug "Resource has not stopped yet, waiting" sleep 1 done # only return $OCF_SUCCESS if _everything_ succeeded as expected return $OCF_SUCCESS } # Make sure meta-data and usage always succeed case $__OCF_ACTION in meta-data) ceph_meta_data exit $OCF_SUCCESS ;; usage|help) ceph_usage exit $OCF_SUCCESS ;; esac # Anything other than meta-data and usage must pass validation ceph_validate_all || exit $? # Translate each action into the appropriate function call case $__OCF_ACTION in start) ceph_start;; stop) ceph_stop;; status|monitor) ceph_monitor;; reload) ocf_log info "Reloading..." ceph_start ;; validate-all) ;; *) ceph_usage exit $OCF_ERR_UNIMPLEMENTED ;; esac rc=$? exit $rc