summaryrefslogtreecommitdiffstats
path: root/heartbeat/pingd
diff options
context:
space:
mode:
Diffstat (limited to 'heartbeat/pingd')
-rwxr-xr-xheartbeat/pingd297
1 files changed, 297 insertions, 0 deletions
diff --git a/heartbeat/pingd b/heartbeat/pingd
new file mode 100755
index 0000000..e2d5c31
--- /dev/null
+++ b/heartbeat/pingd
@@ -0,0 +1,297 @@
+#!/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_DIR=${OCF_ROOT}/lib/heartbeat}
+. ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs
+
+# Parameter defaults
+
+OCF_RESKEY_pidfile_default="$HA_RSCTMP/pingd-${OCF_RESOURCE_INSTANCE}"
+OCF_RESKEY_user_default="root"
+OCF_RESKEY_dampen_default="1s"
+OCF_RESKEY_set_default=""
+OCF_RESKEY_name_default="pingd"
+OCF_RESKEY_section_default=""
+OCF_RESKEY_multiplier_default=""
+OCF_RESKEY_host_list_default=""
+OCF_RESKEY_ignore_deprecation_default="false"
+
+: ${OCF_RESKEY_pidfile=${OCF_RESKEY_pidfile_default}}
+: ${OCF_RESKEY_user=${OCF_RESKEY_user_default}}
+: ${OCF_RESKEY_dampen=${OCF_RESKEY_dampen_default}}
+: ${OCF_RESKEY_set=${OCF_RESKEY_set_default}}
+: ${OCF_RESKEY_name=${OCF_RESKEY_name_default}}
+: ${OCF_RESKEY_section=${OCF_RESKEY_section_default}}
+: ${OCF_RESKEY_multiplier=${OCF_RESKEY_multiplier_default}}
+: ${OCF_RESKEY_host_list=${OCF_RESKEY_host_list_default}}
+: ${OCF_RESKEY_ignore_deprecation=${OCF_RESKEY_ignore_deprecation_default}}
+
+#######################################################################
+
+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">
+Deprecation warning: This agent is deprecated and may be removed from
+a future release. See the ocf:pacemaker:pingd resource agent for a
+supported alternative. --
+This is a pingd Resource Agent.
+It records (in the CIB) the current number of ping nodes a node can connect to.
+</longdesc>
+<shortdesc lang="en">Monitors connectivity to specific hosts or
+IP addresses ("ping nodes") (deprecated)</shortdesc>
+
+<parameters>
+
+<parameter name="pidfile" unique="0">
+<longdesc lang="en">PID file</longdesc>
+<shortdesc lang="en">PID file</shortdesc>
+<content type="string" default="${OCF_RESKEY_pidfile_default}" />
+</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="${OCF_RESKEY_user_default}" />
+</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="${OCF_RESKEY_dampen_default=}"/>
+</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="integer" default="${OCF_RESKEY_set_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="integer" default="${OCF_RESKEY_name_default}"/>
+</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="integer" default="${OCF_RESKEY_section_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="${OCF_RESKEY_multiplier_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="integer" default="${OCF_RESKEY_host_list_default}"/>
+</parameter>
+
+<parameter name="ignore_deprecation">
+<longdesc lang="en">
+If set to true, suppresses the deprecation warning for this agent.
+</longdesc>
+<shortdesc lang="en">Suppress deprecation warning</shortdesc>
+<content type="boolean" default="${OCF_RESKEY_ignore_deprecation_default}" />
+</parameter>
+
+</parameters>
+
+<actions>
+<action name="start" timeout="20s" />
+<action name="stop" timeout="20s" />
+<action name="monitor" depth="0" timeout="20s" interval="10s" />
+<action name="meta-data" timeout="5s" />
+<action name="validate-all" timeout="20s" />
+</actions>
+</resource-agent>
+END
+}
+
+#######################################################################
+
+pingd_usage() {
+ cat <<END
+usage: $0 {start|stop|monitor|validate-all|meta-data}
+
+Expects to have a fully populated OCF RA-compliant environment set.
+END
+}
+
+pingd_start() {
+ extras=""
+ if [ ! -z "$OCF_RESKEY_multiplier" ]; then
+ extras="$extras -m $OCF_RESKEY_multiplier"
+ fi
+ if [ ! -z "$OCF_RESKEY_set" ]; then
+ extras="$extras -s $OCF_RESKEY_set"
+ fi
+ if [ ! -z "$OCF_RESKEY_section" ]; then
+ extras="$extras -S $OCF_RESKEY_section"
+ fi
+ for a_host in $OCF_RESKEY_host_list; do
+ extras="$extras -h $a_host"
+ done
+ pingd_cmd="${HA_BIN}/pingd -D -p $OCF_RESKEY_pidfile -a $OCF_RESKEY_name -d $OCF_RESKEY_dampen $extras"
+
+ if [ ! -z $OCF_RESKEY_user ]; then
+ sudo -u $OCF_RESKEY_user $pingd_cmd
+ else
+ $pingd_cmd
+ fi
+
+ rc=$?
+ if [ $rc = 0 ]; then
+ exit $OCF_SUCCESS
+ fi
+
+ ocf_exit_reason "Could not run $pingd_cmd : rc=$rc"
+ exit $OCF_ERR_GENERIC
+}
+
+pingd_stop() {
+ if [ -f $OCF_RESKEY_pidfile ]; then
+ pid=`cat $OCF_RESKEY_pidfile`
+ fi
+ if [ ! -z $pid ]; then
+ kill -s 9 $pid
+ rc=$?
+
+ if [ $rc = 0 -o $rc = 1 ]; then
+ rm $OCF_RESKEY_pidfile
+ exit $OCF_SUCCESS
+ fi
+
+ ocf_exit_reason "Unexpected result from kill -9 $pid: $rc"
+ exit $OCF_ERR_GENERIC
+ fi
+ exit $OCF_SUCCESS
+}
+
+pingd_monitor() {
+ if [ -f $OCF_RESKEY_pidfile ]; then
+ pid=`cat $OCF_RESKEY_pidfile`
+ fi
+ if [ ! -z $pid ]; then
+ kill -s 0 $pid
+ if [ $? = 0 ]; then
+ exit $OCF_SUCCESS
+ fi
+ fi
+ exit $OCF_NOT_RUNNING
+}
+
+pingd_validate() {
+# Existence of the user
+ if [ ! -z $OCF_RESKEY_user ]; then
+ getent passwd "$OCF_RESKEY_user" >/dev/null
+ if [ $? -eq 0 ]; then
+ : Yes, user exists. We can further check his permission on crm_mon if necessary
+ else
+ ocf_exit_reason "The user $OCF_RESKEY_user does not exist!"
+ exit $OCF_ERR_ARGS
+ fi
+ fi
+
+# Pidfile better be an absolute path
+ case $OCF_RESKEY_pidfile in
+ /*) ;;
+ *) ocf_log warn "You should have pidfile($OCF_RESKEY_pidfile) of absolute path!" ;;
+ esac
+
+# Check the update interval
+ if ocf_is_decimal "$OCF_RESKEY_update" && [ $OCF_RESKEY_update -gt 0 ]; then
+ :
+ else
+ ocf_exit_reason "Invalid update interval $OCF_RESKEY_update. It should be positive integer!"
+ exit $OCF_ERR_ARGS
+ fi
+
+ echo "Validate OK"
+ return $OCF_SUCCESS
+}
+
+if [ $# -ne 1 ]; then
+ pingd_usage
+ exit $OCF_ERR_ARGS
+fi
+
+if [ "$__OCF_ACTION" = "meta-data" ]; then
+ meta_data
+ exit $OCF_SUCCESS
+fi
+
+# Be obnoxious, log deprecation warning on every invocation (unless
+# suppressed by resource configuration).
+ocf_deprecated
+
+case $__OCF_ACTION in
+start) pingd_start
+ ;;
+stop) pingd_stop
+ ;;
+monitor) pingd_monitor
+ ;;
+validate-all) pingd_validate
+ ;;
+usage|help) pingd_usage
+ exit $OCF_SUCCESS
+ ;;
+*) pingd_usage
+ exit $OCF_ERR_UNIMPLEMENTED
+ ;;
+esac
+
+exit $?