Page MenuHomeClusterLabs Projects

No OneTemporary

diff --git a/extra/resources/Stateful b/extra/resources/Stateful
index 8e732df5fd..208505a284 100755
--- a/extra/resources/Stateful
+++ b/extra/resources/Stateful
@@ -1,243 +1,245 @@
#!/bin/sh
#
# ocf:pacemaker:Stateful resource agent
#
# Copyright 2006-2019 the Pacemaker project contributors
#
# The version control history for this file may have further details.
#
# This source code is licensed under the GNU General Public License version 2
# or later (GPLv2+) WITHOUT ANY WARRANTY.
#
#
# Example of a stateful OCF Resource Agent
#
#######################################################################
# Initialization:
: ${OCF_FUNCTIONS:="${OCF_ROOT}/resource.d/heartbeat/.ocf-shellfuncs"}
. "${OCF_FUNCTIONS}"
: ${__OCF_ACTION:="$1"}
#######################################################################
meta_data() {
cat <<END
<?xml version="1.0"?>
<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
<resource-agent name="Stateful" version="1.1">
<version>1.0</version>
<longdesc lang="en">
This is an example resource agent that implements two states
</longdesc>
<shortdesc lang="en">Example stateful resource agent</shortdesc>
<parameters>
<parameter name="state" unique="1">
<longdesc lang="en">
Location to store the resource state in
</longdesc>
<shortdesc lang="en">State file</shortdesc>
<content type="string" default="${HA_VARRUN%%/}/Stateful-${OCF_RESOURCE_INSTANCE}.state" />
</parameter>
<parameter name="envfile" unique="1">
<longdesc lang="en">
If this is set, the environment will be dumped to this file for every call.
</longdesc>
<shortdesc lang="en">Environment dump file</shortdesc>
<content type="string" default="" />
</parameter>
<parameter name="notify_delay" unique="0">
<longdesc lang="en">
The notify action will sleep for this many seconds before returning,
to simulate a long-running notify.
</longdesc>
<shortdesc lang="en">Notify delay in seconds</shortdesc>
<content type="string" default="" />
</parameter>
</parameters>
<actions>
<action name="start" timeout="20s" />
<action name="stop" timeout="20s" />
-<action name="monitor" depth="0" timeout="20s" interval="10s" role="Master"/>
-<action name="monitor" depth="0" timeout="20s" interval="10s" role="Slave"/>
+<action name="monitor" depth="0" timeout="20s" interval="10s" role="Master"/>
+<action name="monitor" depth="0" timeout="20s" interval="11s" role="Slave"/>
+<action name="promote" timeout="10s" />
+<action name="demote" timeout="10s" />
<action name="notify" timeout="5s" />
<action name="meta-data" timeout="5s" />
<action name="validate-all" timeout="30s" />
</actions>
</resource-agent>
END
exit $OCF_SUCCESS
}
#######################################################################
stateful_usage() {
cat <<END
usage: $0 {start|stop|promote|demote|monitor|validate-all|meta-data}
Expects to have a fully populated OCF RA-compliant environment set.
END
exit $1
}
stateful_update() {
echo $1 > "${OCF_RESKEY_state}"
}
stateful_check_state() {
target="$1"
if [ -f "${OCF_RESKEY_state}" ]; then
state=$(cat "${OCF_RESKEY_state}")
if [ "$target" = "$state" ]; then
return 0
fi
else
if [ -z "$target" ]; then
return 0
fi
fi
return 1
}
dump_env() {
if [ "${OCF_RESKEY_envfile}" != "" ]; then
echo "### ${__OCF_ACTION} @ $(date) ###
$(env | sort)
###" >> "${OCF_RESKEY_envfile}"
fi
}
set_master_score() {
"${HA_SBIN_DIR}/crm_master" -l reboot -v "$1"
}
stateful_start() {
stateful_check_state master
if [ $? -eq 0 ]; then
# CRM Error - Should never happen
return $OCF_RUNNING_MASTER
fi
stateful_update slave
set_master_score "${slave_score}"
return 0
}
stateful_demote() {
stateful_check_state
if [ $? -eq 0 ]; then
# CRM Error - Should never happen
return $OCF_NOT_RUNNING
fi
stateful_update slave
set_master_score "${slave_score}"
return 0
}
stateful_promote() {
stateful_check_state
if [ $? -eq 0 ]; then
return $OCF_NOT_RUNNING
fi
stateful_update master
set_master_score "${master_score}"
return 0
}
stateful_stop() {
"${HA_SBIN_DIR}/crm_master" -l reboot -D
stateful_check_state master
if [ $? -eq 0 ]; then
# CRM Error - Should never happen
return $OCF_RUNNING_MASTER
fi
if [ -f "${OCF_RESKEY_state}" ]; then
rm "${OCF_RESKEY_state}"
fi
return 0
}
stateful_monitor() {
stateful_check_state "master"
if [ $? -eq 0 ]; then
if [ $OCF_RESKEY_CRM_meta_interval -eq 0 ]; then
# Restore the master setting during probes
set_master_score "${master_score}"
fi
return $OCF_RUNNING_MASTER
fi
stateful_check_state "slave"
if [ $? -eq 0 ]; then
if [ $OCF_RESKEY_CRM_meta_interval -eq 0 ]; then
# Restore the master setting during probes
set_master_score "${slave_score}"
fi
return $OCF_SUCCESS
fi
if [ -f "${OCF_RESKEY_state}" ]; then
echo "File '${OCF_RESKEY_state}' exists but contains unexpected contents"
cat "${OCF_RESKEY_state}"
return $OCF_ERR_GENERIC
fi
return 7
}
stateful_notify() {
if [ "${OCF_RESKEY_notify_delay}" != "0" ]; then
sleep "${OCF_RESKEY_notify_delay}"
fi
return $OCF_SUCCESS
}
stateful_validate() {
exit $OCF_SUCCESS
}
: ${slave_score:=5}
: ${master_score:=10}
: ${OCF_RESKEY_CRM_meta_interval:=0}
: ${OCF_RESKEY_notify_delay:=0}
: ${OCF_RESKEY_CRM_meta_globally_unique:="false"}
if [ -z "$OCF_RESKEY_state" ]; then
if [ "${OCF_RESKEY_CRM_meta_globally_unique}" = "false" ]; then
state="${HA_VARRUN%%/}/Stateful-${OCF_RESOURCE_INSTANCE}.state"
# Strip off the trailing clone marker
OCF_RESKEY_state=$(echo $state | sed s/:[0-9][0-9]*\.state/.state/)
else
OCF_RESKEY_state="${HA_VARRUN%%/}/Stateful-${OCF_RESOURCE_INSTANCE}.state"
fi
fi
dump_env
case "$__OCF_ACTION" in
meta-data) meta_data;;
start) stateful_start;;
promote) stateful_promote;;
demote) stateful_demote;;
notify) stateful_notify ;;
stop) stateful_stop;;
monitor) stateful_monitor;;
validate-all) stateful_validate;;
usage|help) stateful_usage $OCF_SUCCESS;;
*) stateful_usage $OCF_ERR_UNIMPLEMENTED;;
esac
exit $?
# vim: set filetype=sh expandtab tabstop=4 softtabstop=4 shiftwidth=4 textwidth=80:

File Metadata

Mime Type
text/x-diff
Expires
Sat, Nov 23, 5:01 PM (10 h, 58 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1006544
Default Alt Text
(6 KB)

Event Timeline