diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 07:52:36 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 07:52:36 +0000 |
commit | 7de03e4e519705301265c0415b3c0af85263a7ac (patch) | |
tree | 29d819c5227e3619d18a67d2a5dde963b3229dbe /heartbeat/scsi2reservation | |
parent | Initial commit. (diff) | |
download | resource-agents-7de03e4e519705301265c0415b3c0af85263a7ac.tar.xz resource-agents-7de03e4e519705301265c0415b3c0af85263a7ac.zip |
Adding upstream version 1:4.13.0.upstream/1%4.13.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'heartbeat/scsi2reservation')
-rwxr-xr-x | heartbeat/scsi2reservation | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/heartbeat/scsi2reservation b/heartbeat/scsi2reservation new file mode 100755 index 0000000..9b29ec4 --- /dev/null +++ b/heartbeat/scsi2reservation @@ -0,0 +1,176 @@ +#!/bin/sh +# by hxinwei@gmail.com +# License: GNU General Public License 2 (GPL2) + +if [ -n "$OCF_DEBUG_LIBRARY" ]; then + . $OCF_DEBUG_LIBRARY +else + : ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat} +. ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs +fi + +# Parameter defaults + +OCF_RESKEY_scsi_reserve_default="/usr/sbin/scsi_reserve" +OCF_RESKEY_sharedisk_default="/dev/sdb" +OCF_RESKEY_start_loop_default="10" + +: ${OCF_RESKEY_scsi_reserve=${OCF_RESKEY_scsi_reserve_default}} +: ${OCF_RESKEY_sharedisk=${OCF_RESKEY_sharedisk_default}} +: ${OCF_RESKEY_start_loop=${OCF_RESKEY_start_loop_default}} + +scsi2reserve_meta_data() { + cat <<END +<?xml version="1.0"?> +<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd"> +<resource-agent name="scsi2reservation" version="1.0"> +<version>1.0</version> + +<longdesc lang="en"> +The scsi-2-reserve resource agent is a place holder for SCSI-2 reservation. +A healthy instance of scsi-2-reserve resource, indicates the own of the specified SCSI device. +This resource agent depends on the scsi_reserve from scsires package, which is Linux specific. +</longdesc> + +<shortdesc lang="en"> +scsi-2 reservation +</shortdesc> + +<parameters> + +<parameter name="scsi_reserve" unique="0" required="0"> +<longdesc lang="en"> +The scsi_reserve is a command from scsires package. +It helps one to issue SCSI-2 reservation on SCSI devices. +</longdesc> +<shortdesc lang="en">Manages exclusive access to shared storage media thrugh SCSI-2 reservations</shortdesc> +<content type="string" default="${OCF_RESKEY_scsi_reserve_default}" /> +</parameter> + + +<parameter name="sharedisk" unique="0" required="0"> +<longdesc lang="en"> +The shared disk that can be reserved. +</longdesc> +<shortdesc lang="en"> +Shared disk. +</shortdesc> +<content type="string" default="${OCF_RESKEY_sharedisk_default}" /> +</parameter> + +<parameter name="start_loop" unique="0" required="0"> +<longdesc lang="en"> +We are going to try several times before giving up. Start_loop indicates how many times we are going to re-try. +</longdesc> +<shortdesc lang="en"> +Times to re-try before giving up. +</shortdesc> +<content type="string" default="${OCF_RESKEY_start_loop_default}" /> +</parameter> + + +</parameters> + +<actions> +<action name="start" timeout="300s" /> +<action name="stop" timeout="100s" /> +<action name="monitor" depth="0" timeout="20s" interval="20s" /> +<action name="meta-data" timeout="5s" /> +<action name="validate-all" timeout="30s" /> +</actions> +</resource-agent> +END + + return $OCF_SUCCESS +} + +scsi2reserve_usage() { + cat <<END + usage: $0 {start|stop|monitor|validate-all|meta-data} +END +} + +case $__OCF_ACTION in + meta-data) scsi2reserve_meta_data + exit $OCF_SUCCESS + ;; + usage|help) scsi2reserve_usage + exit $OCF_SUCCESS + ;; + *) + ;; +esac + + +scsi2reserve_validate () +{ + if [ ! -x "${OCF_RESKEY_scsi_reserve}" ]; then + exit $OCF_ERR_INSTALLED + fi + if [ -z "${OCF_RESKEY_sharedisk}" ]; then + exit $OCF_ERR_GENERIC + fi + if [ ! -b "${OCF_RESKEY_sharedisk}" ]; then + exit $OCF_ERR_ARGS + fi +} + +scsi2reserve_validate + +scsi2reserve_start () +{ + ite=$OCF_RESKEY_start_loop + while [ $ite -ge 0 ]; do + /sbin/startproc ${OCF_RESKEY_scsi_reserve} -d ${OCF_RESKEY_sharedisk} --preempt --hold --stonith + sleep 15 + /sbin/checkproc ${OCF_RESKEY_scsi_reserve} + rc=$? + if [ $rc -eq 0 ]; then + exit $OCF_SUCCESS + fi + ite=`expr $ite - 1` + done + exit $OCF_ERR_GENERIC +} + +scsi2reserve_monitor () +{ + /sbin/checkproc ${OCF_RESKEY_scsi_reserve} + rc=$? + if [ $rc -eq 0 ]; then + exit $OCF_SUCCESS + else + exit $OCF_NOT_RUNNING + fi +} + +scsi2reserve_stop () +{ + /sbin/killproc ${OCF_RESKEY_scsi_reserve} + ${OCF_RESKEY_scsi_reserve} -d ${OCF_RESKEY_sharedisk} --release + exit $OCF_SUCCESS +} + +if [ $# -ne 1 ]; then + scsi2reserve_usage + exit $OCF_ERR_ARGS +fi + +case $__OCF_ACTION in + start) scsi2reserve_start + ;; + stop) scsi2reserve_stop + ;; + monitor) scsi2reserve_monitor + ;; + validate-all) scsi2reserve_validate + exit $OCF_SUCCESS + ;; + *) scsi2reserve_usage + exit $OCF_ERR_UNIMPLEMENTED + ;; +esac + +exit $? + + |