3
# License: GNU General Public License 2 (GPL2)
5
if [ -n "$OCF_DEBUG_LIBRARY" ]; then
8
: ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat}
9
. ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs
12
: ${OCF_RESKEY_scsi_reserve="/usr/sbin/scsi_reserve"}
13
: ${OCF_RESKEY_sharedisk="/dev/sdb"}
14
: ${OCF_RESKEY_start_loop=10}
16
scsi2reserve_meta_data() {
19
<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
20
<resource-agent name="scsi2reservation">
21
<version>1.0</version>
24
The scsi-2-reserve resource agent is a place holder for SCSI-2 reservation.
25
A healthy instance of scsi-2-reserve resource, indicates the own of the specified SCSI device.
26
This resource agent depends on the scsi_reserve from scsires package, which is Linux specific.
35
<parameter name="scsi_reserve" unique="0" required="0">
37
The scsi_reserve is a command from scsires package.
38
It helps to issue SCSI-2 reservation on SCSI devices.
40
<shortdesc lang="en">Manages exclusive access to shared storage media thrugh SCSI-2 reservations</shortdesc>
41
<content type="string" default="/usr/sbin/scsi_reserve" />
45
<parameter name="sharedisk" unique="0" required="0">
47
The shared disk that can be reserved.
52
<content type="string" default="/dev/sdb" />
55
<parameter name="start_loop" unique="0" required="0">
57
We are going to try several times before giving up. Start_loop indicates how many times we are going to re-try.
60
Times to re-try before giving up.
62
<content type="string" default="10" />
69
<action name="start" timeout="300" />
70
<action name="stop" timeout="100" />
71
<action name="monitor" depth="0" timeout="20" interval="20" />
72
<action name="meta-data" timeout="5" />
73
<action name="validate-all" timeout="30" />
81
scsi2reserve_usage() {
83
usage: $0 {start|stop|monitor|validate-all|meta-data}
88
meta-data) scsi2reserve_meta_data
91
usage|help) scsi2reserve_usage
99
scsi2reserve_validate ()
101
if [ ! -x "${OCF_RESKEY_scsi_reserve}" ]; then
102
exit $OCF_ERR_INSTALLED
104
if [ -z "${OCF_RESKEY_sharedisk}" ]; then
105
exit $OCF_ERR_GENERIC
107
if [ ! -b "${OCF_RESKEY_sharedisk}" ]; then
112
scsi2reserve_validate
114
scsi2reserve_start ()
116
ite=$OCF_RESKEY_start_loop
117
while [ $ite -ge 0 ]; do
118
/sbin/startproc ${OCF_RESKEY_scsi_reserve} -d ${OCF_RESKEY_sharedisk} --preempt --hold --stonith
120
/sbin/checkproc ${OCF_RESKEY_scsi_reserve}
122
if [ $rc -eq 0 ]; then
127
exit $OCF_ERR_GENERIC
130
scsi2reserve_monitor ()
132
/sbin/checkproc ${OCF_RESKEY_scsi_reserve}
134
if [ $rc -eq 0 ]; then
137
exit $OCF_NOT_RUNNING
143
/sbin/killproc ${OCF_RESKEY_scsi_reserve}
144
${OCF_RESKEY_scsi_reserve} -d ${OCF_RESKEY_sharedisk} --release
148
if [ $# -ne 1 ]; then
153
case $__OCF_ACTION in
154
start) scsi2reserve_start
156
stop) scsi2reserve_stop
158
monitor) scsi2reserve_monitor
160
validate-all) scsi2reserve_validate
163
*) scsi2reserve_usage
164
exit $OCF_ERR_UNIMPLEMENTED