Revert back ping.
This commit is contained in:
parent
6e11c3c262
commit
0850089b94
351
files/ping
351
files/ping
@ -1,351 +0,0 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
#
|
||||
# Ping OCF RA that utilizes the system ping
|
||||
#
|
||||
# Copyright (c) 2009 Andrew Beekhof
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of version 2 of the GNU General Public License as
|
||||
# published by the Free Software Foundation.
|
||||
#
|
||||
# This program is distributed in the hope that it would be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
# Further, this software is distributed without any warranty that it is
|
||||
# free of the rightful claim of any third person regarding infringement
|
||||
# or the like. Any license provided herein, whether implied or
|
||||
# otherwise, applies only to this software file. Patent licenses, if
|
||||
# any, provided herein do not apply to combinations of this program with
|
||||
# other software, or any other product whatsoever.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write the Free Software Foundation,
|
||||
# Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
|
||||
#
|
||||
|
||||
#######################################################################
|
||||
# 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="ping">
|
||||
<version>1.0</version>
|
||||
|
||||
<longdesc lang="en">
|
||||
Every time the monitor action is run, this resource agent records (in the CIB) the current number of ping nodes the host can connect to.
|
||||
It is essentially the same as pingd except that it uses the system ping tool to obtain the results.
|
||||
</longdesc>
|
||||
<shortdesc lang="en">node connectivity</shortdesc>
|
||||
|
||||
<parameters>
|
||||
|
||||
<parameter name="pidfile" unique="0">
|
||||
<longdesc lang="en">PID file</longdesc>
|
||||
<shortdesc lang="en">PID file</shortdesc>
|
||||
<content type="string" default="$HA_VARRUN/ping-${OCF_RESOURCE_INSTANCE}" />
|
||||
</parameter>
|
||||
|
||||
<parameter name="dampen" unique="0">
|
||||
<longdesc lang="en">
|
||||
The time to wait (dampening) further changes occur
|
||||
</longdesc>
|
||||
<shortdesc lang="en">Dampening interval</shortdesc>
|
||||
<content type="integer" default="5s"/>
|
||||
</parameter>
|
||||
|
||||
<parameter name="name" unique="0">
|
||||
<longdesc lang="en">
|
||||
The name of the attributes to set. This is the name to be used in the constraints.
|
||||
</longdesc>
|
||||
<shortdesc lang="en">Attribute name</shortdesc>
|
||||
<content type="string" default="${OCF_RESOURCE_INSTANCE}"/>
|
||||
</parameter>
|
||||
|
||||
<parameter name="multiplier" unique="0">
|
||||
<longdesc lang="en">
|
||||
The number by which to multiply the number of connected ping nodes by
|
||||
</longdesc>
|
||||
<shortdesc lang="en">Value multiplier</shortdesc>
|
||||
<content type="integer" default=""/>
|
||||
</parameter>
|
||||
|
||||
<parameter name="host_list" unique="0">
|
||||
<longdesc lang="en">
|
||||
The list of ping nodes to count. Defaults to all configured ping nodes. Rarely needs to be specified.
|
||||
</longdesc>
|
||||
<shortdesc lang="en">Host list</shortdesc>
|
||||
<content type="string" default=""/>
|
||||
</parameter>
|
||||
|
||||
<parameter name="attempts" unique="0">
|
||||
<longdesc lang="en">
|
||||
Number of ping attempts, per host, before declaring it dead
|
||||
</longdesc>
|
||||
<shortdesc lang="en">no. of ping attempts</shortdesc>
|
||||
<content type="integer" default="2"/>
|
||||
</parameter>
|
||||
|
||||
<parameter name="timeout" unique="0">
|
||||
<longdesc lang="en">
|
||||
How long, in seconds, to wait before declaring a ping lost
|
||||
</longdesc>
|
||||
<shortdesc lang="en">ping timeout in seconds</shortdesc>
|
||||
<content type="integer" default="2"/>
|
||||
</parameter>
|
||||
|
||||
<parameter name="options" unique="0">
|
||||
<longdesc lang="en">
|
||||
A catch all for any other options that need to be passed to ping.
|
||||
</longdesc>
|
||||
<shortdesc lang="en">Extra Options</shortdesc>
|
||||
<content type="string" default=""/>
|
||||
</parameter>
|
||||
|
||||
<parameter name="debug" unique="0">
|
||||
<longdesc lang="en">
|
||||
Enables to use default attrd_updater verbose logging on every call.
|
||||
</longdesc>
|
||||
<shortdesc lang="en">Verbose logging</shortdesc>
|
||||
<content type="string" default="false"/>
|
||||
</parameter>
|
||||
|
||||
</parameters>
|
||||
|
||||
<actions>
|
||||
<action name="start" timeout="60" />
|
||||
<action name="stop" timeout="20" />
|
||||
<action name="reload" timeout="100" />
|
||||
<action name="monitor" depth="0" timeout="60" interval="10"/>
|
||||
<action name="meta-data" timeout="5" />
|
||||
<action name="validate-all" timeout="30" />
|
||||
</actions>
|
||||
</resource-agent>
|
||||
END
|
||||
}
|
||||
|
||||
#######################################################################
|
||||
|
||||
ping_conditional_log() {
|
||||
level=$1; shift
|
||||
if [ ${OCF_RESKEY_debug} = "true" ]; then
|
||||
ocf_log $level "$*"
|
||||
fi
|
||||
}
|
||||
|
||||
ping_usage() {
|
||||
cat <<END
|
||||
usage: $0 {start|stop|monitor|migrate_to|migrate_from|validate-all|meta-data}
|
||||
|
||||
Expects to have a fully populated OCF RA-compliant environment set.
|
||||
END
|
||||
}
|
||||
|
||||
ping_start() {
|
||||
touch ${OCF_RESKEY_pidfile}
|
||||
ping_monitor
|
||||
if [ $? = $OCF_SUCCESS ]; then
|
||||
return $OCF_SUCCESS
|
||||
fi
|
||||
ping_update
|
||||
}
|
||||
|
||||
ping_stop() {
|
||||
|
||||
rm -f ${OCF_RESKEY_pidfile}
|
||||
|
||||
attrd_updater -D -n $OCF_RESKEY_name -d $OCF_RESKEY_dampen $attrd_options
|
||||
|
||||
return $OCF_SUCCESS
|
||||
}
|
||||
|
||||
ping_monitor() {
|
||||
if [ -f ${OCF_RESKEY_pidfile} ]; then
|
||||
ping_update
|
||||
return $OCF_SUCCESS
|
||||
fi
|
||||
return $OCF_NOT_RUNNING
|
||||
}
|
||||
|
||||
ping_validate() {
|
||||
# Is the state directory writable?
|
||||
state_dir=`dirname "$OCF_RESKEY_pidfile"`
|
||||
touch "$state_dir/$$"
|
||||
if [ $? != 0 ]; then
|
||||
ocf_log err "Invalid location for 'state': $state_dir is not writable"
|
||||
return $OCF_ERR_ARGS
|
||||
fi
|
||||
rm "$state_dir/$$"
|
||||
|
||||
# Pidfile better be an absolute path
|
||||
case $OCF_RESKEY_pidfile in
|
||||
/*) ;;
|
||||
*) ocf_log warn "You should use an absolute path for pidfile not: $OCF_RESKEY_pidfile" ;;
|
||||
esac
|
||||
|
||||
# Check the host list
|
||||
if [ "x" = "x$OCF_RESKEY_host_list" ]; then
|
||||
ocf_log err "Empty host_list. Please specify some nodes to ping"
|
||||
exit $OCF_ERR_CONFIGURED
|
||||
fi
|
||||
|
||||
check_binary ping
|
||||
|
||||
return $OCF_SUCCESS
|
||||
}
|
||||
|
||||
|
||||
fping_check() {
|
||||
active=0
|
||||
f_out=`mktemp`
|
||||
f_err=`mktemp`
|
||||
|
||||
n=$OCF_RESKEY_attempts
|
||||
timeout=`expr $OCF_RESKEY_timeout \* 1000 / $OCF_RESKEY_attempts`
|
||||
|
||||
cmd="fping -r $OCF_RESKEY_attempts -t $timeout -B 1.0 $OCF_RESKEY_host_list"
|
||||
$cmd>$f_out 2>$f_err; rc=$?
|
||||
active=`grep alive $f_out|wc -l`
|
||||
|
||||
case $rc in
|
||||
0)
|
||||
;;
|
||||
1)
|
||||
for h in `grep unreachable $f_out | awk '{print $1}'`; do
|
||||
ping_conditional_log warn "$h is inactive"
|
||||
done
|
||||
;;
|
||||
*)
|
||||
ocf_log err "Unexpected result for '$cmd' $rc: `tr '\n' ';' < $f_err`"
|
||||
;;
|
||||
esac
|
||||
rm -f $f_out $f_err
|
||||
|
||||
return $active
|
||||
}
|
||||
|
||||
ping_check() {
|
||||
active=0
|
||||
for host in $OCF_RESKEY_host_list; do
|
||||
p_exe=ping
|
||||
|
||||
case `uname` in
|
||||
Linux) p_args="-n -q -W $OCF_RESKEY_timeout -c $OCF_RESKEY_attempts";;
|
||||
Darwin) p_args="-n -q -t $OCF_RESKEY_timeout -c $OCF_RESKEY_attempts -o";;
|
||||
*) ocf_log err "Unknown host type: `uname`"; exit $OCF_ERR_INSTALLED;;
|
||||
esac
|
||||
|
||||
case $host in
|
||||
*:*) p_exe=ping6
|
||||
esac
|
||||
|
||||
p_out=`$p_exe $p_args $OCF_RESKEY_options $host 2>&1`; rc=$?
|
||||
|
||||
case $rc in
|
||||
0) active=`expr $active + 1`;;
|
||||
1) ping_conditional_log warn "$host is inactive: $p_out";;
|
||||
*) ocf_log err "Unexpected result for '$p_exe $p_args $OCF_RESKEY_options $host' $rc: $p_out";;
|
||||
esac
|
||||
done
|
||||
return $active
|
||||
}
|
||||
|
||||
ping_update() {
|
||||
|
||||
if have_binary fping; then
|
||||
fping_check
|
||||
active=$?
|
||||
else
|
||||
ping_check
|
||||
active=$?
|
||||
fi
|
||||
|
||||
score=`expr $active \* $OCF_RESKEY_multiplier`
|
||||
attrd_updater -n $OCF_RESKEY_name -v $score -d $OCF_RESKEY_dampen $attrd_options
|
||||
rc=$?
|
||||
case $rc in
|
||||
0) ping_conditional_log debug "Updated $OCF_RESKEY_name = $score" ;;
|
||||
*) ocf_log warn "Could not update $OCF_RESKEY_name = $score: rc=$rc";;
|
||||
esac
|
||||
return $rc
|
||||
}
|
||||
|
||||
: ${OCF_RESKEY_name:="pingd"}
|
||||
: ${OCF_RESKEY_dampen:="5s"}
|
||||
: ${OCF_RESKEY_attempts:="3"}
|
||||
: ${OCF_RESKEY_multiplier:="1"}
|
||||
: ${OCF_RESKEY_debug:="false"}
|
||||
|
||||
: ${OCF_RESKEY_CRM_meta_timeout:="20000"}
|
||||
: ${OCF_RESKEY_CRM_meta_globally_unique:="true"}
|
||||
|
||||
integer=`echo ${OCF_RESKEY_timeout} | egrep -o '[0-9]*'`
|
||||
case ${OCF_RESKEY_timeout} in
|
||||
*[0-9]ms|*[0-9]msec) OCF_RESKEY_timeout=`expr $integer / 1000`;;
|
||||
*[0-9]m|*[0-9]min) OCF_RESKEY_timeout=`expr $integer \* 60`;;
|
||||
*[0-9]h|*[0-9]hr) OCF_RESKEY_timeout=`expr $integer \* 60 \* 60`;;
|
||||
*) OCF_RESKEY_timeout=$integer;;
|
||||
esac
|
||||
|
||||
if [ -z ${OCF_RESKEY_timeout} ]; then
|
||||
host_count=`echo $OCF_RESKEY_host_list | awk '{print NF}'`
|
||||
OCF_RESKEY_timeout=`expr $OCF_RESKEY_CRM_meta_timeout / $host_count / $OCF_RESKEY_attempts`
|
||||
OCF_RESKEY_timeout=`expr $OCF_RESKEY_timeout / 1100` # Convert to seconds and finish 10% early
|
||||
fi
|
||||
|
||||
if [ ${OCF_RESKEY_timeout} -lt 1 ]; then
|
||||
OCF_RESKEY_timeout=5
|
||||
elif [ ${OCF_RESKEY_timeout} -gt 1000 ]; then
|
||||
# ping actually complains if this value is too high, 5 minutes is plenty
|
||||
OCF_RESKEY_timeout=300
|
||||
fi
|
||||
|
||||
if [ ${OCF_RESKEY_CRM_meta_globally_unique} = "false" ]; then
|
||||
: ${OCF_RESKEY_pidfile:="$HA_VARRUN/ping-${OCF_RESKEY_name}"}
|
||||
else
|
||||
: ${OCF_RESKEY_pidfile:="$HA_VARRUN/ping-${OCF_RESOURCE_INSTANCE}"}
|
||||
fi
|
||||
|
||||
attrd_options='-q'
|
||||
if ocf_is_true ${OCF_RESKEY_debug} ; then
|
||||
attrd_options=''
|
||||
fi
|
||||
|
||||
# Check the debug option
|
||||
case "${OCF_RESKEY_debug}" in
|
||||
true|True|TRUE|1) OCF_RESKEY_debug=true;;
|
||||
false|False|FALSE|0) OCF_RESKEY_debug=false;;
|
||||
*)
|
||||
ocf_log warn "Value for 'debug' is incorrect. Please specify 'true' or 'false' not: ${OCF_RESKEY_debug}"
|
||||
OCF_RESKEY_debug=false
|
||||
;;
|
||||
esac
|
||||
|
||||
case $__OCF_ACTION in
|
||||
meta-data) meta_data
|
||||
exit $OCF_SUCCESS
|
||||
;;
|
||||
start) ping_start;;
|
||||
stop) ping_stop;;
|
||||
monitor) ping_monitor;;
|
||||
reload) ping_start;;
|
||||
validate-all) ping_validate;;
|
||||
usage|help) ping_usage
|
||||
exit $OCF_SUCCESS
|
||||
;;
|
||||
*) ping_usage
|
||||
exit $OCF_ERR_UNIMPLEMENTED
|
||||
;;
|
||||
esac
|
||||
exit $?
|
||||
|
@ -230,7 +230,7 @@ def ha_relation_joined():
|
||||
|
||||
cluster_config = get_hacluster_config(excludes_key=['vip'])
|
||||
resources = {
|
||||
'res_PingCheck': 'ocf:canonical:ping',
|
||||
'res_PingCheck': 'ocf:pacemaker:ping',
|
||||
'res_ClusterMon': 'ocf:pacemaker:ClusterMon',
|
||||
}
|
||||
resource_params = {
|
||||
|
Loading…
Reference in New Issue
Block a user