| #!/bin/sh |
| # |
| # |
| # pingd OCF Resource Agent |
| # Records (in the CIB) the current number of ping nodes a |
| # cluster node can connect to. |
| # |
| # Copyright (c) 2006 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} |
| |
| : ${OCF_RESKEY_name:="pingd"} |
| : ${OCF_RESKEY_interval:="1"} |
| : ${OCF_RESKEY_CRM_meta_interval:=0} |
| |
| upgrade1="This agent (ocf:pacemaker:pingd) has been replaced by the more reliable ocf:pacemaker:ping." |
| upgrade2="Attempting automated conversion, run 'crm ra info ocf:pacemaker:ping' for all configuration options" |
| upgrade3="You will need to remove the existing resource and replace it with one that uses 'ocf:pacemaker:ping' directly" |
| |
| case $__OCF_ACTION in |
| start|monitor) |
| if [ "x" != "x$OCF_RESKEY_host_list" ]; then |
| ocf_log err "$upgrade1" |
| ocf_log err "$upgrade2" |
| ocf_log err "Automatic conversion to ocf:pacemaker:ping failed: no hosts were configured to check for connectivity" |
| ocf_log err "$upgrade3" |
| exit $OCF_ERR_ARGS |
| fi |
| |
| recurring=`crm configure show $OCF_RESOURCE_INSTANCE | grep "op monitor.*interval=\"[1-9]" | sed s/.*interval=// | awk -F\" '{print $2}' | sed s/.*interval=// | awk -F\" '{print $2}' | sort | head -n 1` |
| |
| if [ -z $recurring ]; then |
| ocf_log err "$upgrade1" |
| ocf_log err "$upgrade2" |
| ocf_log err "Automatic conversion to ocf:pacemaker:ping failed: no monitor operation configured" |
| ocf_log err "Without an explicit monitor operation for '$OCF_RESOURCE_INSTANCE', connectivity changes will not be noticed" |
| ocf_log err "Preventing startup to ensure the issue is addressed before it matters" |
| exit $OCF_ERR_ARGS |
| fi |
| |
| if [ $OCF_RESKEY_CRM_meta_interval = 0 ]; then |
| ocf_log warn "$upgrade1" |
| ocf_log warn "$upgrade2" |
| if [ $recurring != $OCF_RESKEY_interval ]; then |
| ocf_log warn "Your monitor operation happens every $recurring, which means that the $OCF_RESKEY_name attribute will be updated with a different frequency than the previously configured ( $OCF_RESKEY_interval )" |
| ocf_log warn "Either change the monitor interval to match or, ideally, switch to the ocf:pacemaker:ping agent and avoid all this compatibility nonsense." |
| fi |
| fi |
| ;; |
| meta-data) |
| cat <<END |
| <?xml version="1.0"?> |
| <!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd"> |
| <resource-agent name="pingd" version="1.0"> |
| <version>1.0</version> |
| <longdesc lang="en"> |
| This agent (ocf:pacemaker:pingd) has been replaced by the more reliable ocf:pacemaker:ping. |
| It records (in the CIB) the current number of ping nodes (specified in the 'host_list' parameter) a cluster node can connect to. |
| </longdesc> |
| <shortdesc lang="en">pingd resource agent</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%%1}/pingd-${OCF_RESOURCE_INSTANCE}" /> |
| </parameter> |
| |
| |
| <parameter name="user" unique="0"> |
| <longdesc lang="en"> |
| The user we want to run pingd as |
| </longdesc> |
| <shortdesc lang="en">The user we want to run pingd as</shortdesc> |
| <content type="string" default="root" /> |
| </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="set" unique="0"> |
| <longdesc lang="en"> |
| The name of the instance_attributes set to place the value in. Rarely needs to be specified. |
| </longdesc> |
| <shortdesc lang="en">Set name</shortdesc> |
| <content type="string" default=""/> |
| </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="pingd"/> |
| </parameter> |
| |
| <parameter name="section" unique="0"> |
| <longdesc lang="en"> |
| The section place the value in. Rarely needs to be specified. |
| </longdesc> |
| <shortdesc lang="en">Section name</shortdesc> |
| <content type="string" default=""/> |
| </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="interval" unique="0"> |
| <longdesc lang="en"> |
| How often, in seconds, to check for node liveliness |
| </longdesc> |
| <shortdesc lang="en">ping interval in seconds</shortdesc> |
| <content type="integer" default="1"/> |
| </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 pingd. |
| </longdesc> |
| <shortdesc lang="en">Extra Options</shortdesc> |
| <content type="string" default=""/> |
| </parameter> |
| |
| </parameters> |
| |
| <actions> |
| <action name="start" timeout="90" /> |
| <action name="stop" timeout="100" /> |
| <action name="monitor" depth="0" timeout="20" interval="10" start-delay="1m" /> |
| <action name="meta-data" timeout="5" /> |
| <action name="validate-all" timeout="30" /> |
| </actions> |
| </resource-agent> |
| END |
| exit $OCF_SUCCESS |
| ;; |
| esac |
| |
| ${OCF_ROOT}/resource.d/pacemaker/ping $1 |
| exit $? |