diff options
Diffstat (limited to '')
-rw-r--r-- | heartbeat/lvm-clvm.sh | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/heartbeat/lvm-clvm.sh b/heartbeat/lvm-clvm.sh new file mode 100644 index 0000000..9bc0f75 --- /dev/null +++ b/heartbeat/lvm-clvm.sh @@ -0,0 +1,86 @@ +# lvm-clvmd.sh +# +# Description: LVM management with clvmd +# +# +# Author: Resource agents contributors +# Interface to LVM by Dejan Muhamedagic +# Support: users@clusterlabs.org +# License: GNU General Public License (GPL) +# Copyright: (C) 2017 Dejan Muhamedagic +# + +## +# Attempt to deactivate vg cluster wide and then start the vg exclusively +## +retry_exclusive_start() +{ + # Deactivate each LV in the group one by one cluster wide + set -- $(lvs -o name,attr --noheadings $OCF_RESKEY_volgrpname 2> /dev/null) + while [ $# -ge 2 ]; do + case $2 in + ????ao*) + # open LVs cannot be deactivated. + return $OCF_ERR_GENERIC;; + *) + if ! lvchange -an $OCF_RESKEY_volgrpname/$1; then + ocf_exit_reason "Unable to perform required deactivation of $OCF_RESKEY_volgrpname/$1 before starting" + return $OCF_ERR_GENERIC + fi + ;; + esac + shift 2 + done + + ocf_run vgchange $vgchange_activate_options $OCF_RESKEY_volgrpname +} + +# +# the interface to the LVM RA +# + +lvm_init() { + vgchange_activate_options="-aey" + vgchange_deactivate_options="-an" +} + +lvm_validate_all() { + if ! ps -C clvmd > /dev/null 2>&1; then + ocf_exit_reason "$OCF_RESKEY_volgrpname has the cluster attribute set, but 'clvmd' is not running" + exit $OCF_ERR_GENERIC + fi +} + +lvm_status() { + return 0 +} + +lvm_pre_activate() { + return 0 +} + +lvm_post_activate() { + local rc=$1 + if [ $rc -ne 0 ]; then + # Failure to exclusively activate cluster vg.: + # This could be caused by a remotely active LV, Attempt + # to disable volume group cluster wide and try again. + # Allow for some settling + sleep 5 + if ! retry_exclusive_start; then + return $OCF_ERR_GENERIC + fi + fi + return $rc +} + +lvm_pre_deactivate() { + return 0 +} + +lvm_post_deactivate() { + local rc=$1 + return $rc +} + +# vim:tabstop=4:shiftwidth=4:textwidth=0:wrapmargin=0 |