Hi Satomi-san,
On Wed, Oct 08, 2008 at 02:55:57PM +0900, Satomi TANIGUCHI wrote:
> Hi lists,
>
> I'm posting a STONITH plugin which checks whether the target node is kdumping
> or not.
> There are some steps to use this, but I believe this plugin is helpful for
> failure analysis.
> See attached README for details about how to use this.
>
> There are 2 patches.
> The patch named "kdumpcheck.patch" is for Linux-HA-dev(1eae6aaf1af8).
> And the patch named "mkdumprd_for_kdumpcheck.patch" is
> for mkdumprd version 5.0.39.
This patch has to go elsewhere, to whoever maintains mkdumprd.
> If you're interested in, please give me your comments.
> Any comments and suggestions are really appreciated.
Many thanks for the plugin. I'll review it.
Cheers,
Dejan
>
> Best Regards,
> Satomi TANIGUCHI
>
>
> diff -urN org/configure.in mod/configure.in
> --- org/configure.in 2008-10-07 20:22:06.000000000 +0900
> +++ mod/configure.in 2008-10-08 12:29:36.000000000 +0900
> @@ -2665,6 +2665,7 @@
> lib/plugins/stonith/external/riloe \
> lib/plugins/stonith/external/ssh \
> lib/plugins/stonith/external/hmchttp \
> + lib/plugins/stonith/external/kdumpcheck \
> lib/plugins/stonith/external/xen0-ha \
> lib/plugins/stonith/external/drac5 \
> lib/plugins/HBcompress/Makefile \
> diff -urN org/lib/plugins/stonith/external/Makefile.am
> mod/lib/plugins/stonith/external/Makefile.am
> --- org/lib/plugins/stonith/external/Makefile.am 2008-10-07
> 20:22:06.000000000 +0900
> +++ mod/lib/plugins/stonith/external/Makefile.am 2008-10-08
> 12:30:57.000000000 +0900
> @@ -20,13 +20,13 @@
> MAINTAINERCLEANFILES = Makefile.in
>
> EXTRA_DIST = drac5 ibmrsa-telnet ipmi rackpdu vmware xen0 \
> - xen0-ha-dom0-stonith-helper sbd
> + xen0-ha-dom0-stonith-helper sbd kdumpcheck
>
> extdir = $(stonith_ext_plugindir)
>
> helperdir = $(stonith_plugindir)
>
> ext_SCRIPTS = drac5 ibmrsa ibmrsa-telnet ipmi riloe ssh vmware rackpdu
> xen0 hmchttp \
> - xen0-ha sbd
> + xen0-ha sbd kdumpcheck
>
> helper_SCRIPTS = xen0-ha-dom0-stonith-helper
> diff -urN org/lib/plugins/stonith/external/kdumpcheck.in
> mod/lib/plugins/stonith/external/kdumpcheck.in
> --- org/lib/plugins/stonith/external/kdumpcheck.in 1970-01-01
> 09:00:00.000000000 +0900
> +++ mod/lib/plugins/stonith/external/kdumpcheck.in 2008-10-08
> 12:29:36.000000000 +0900
> @@ -0,0 +1,288 @@
> +#!/bin/sh
> +#
> +# External STONITH module to check kdump.
> +#
> +# Copyright (c) 2008 NIPPON TELEGRAPH AND TELEPHONE CORPORATION
> +#
> +# 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.
> +#
> +
> +SSH_COMMAND="@SSH@ -q -x -o PasswordAuthentication=no -o
> StrictHostKeyChecking=no -n"
> +#Set default user name.
> +USERNAME="kdumpchecker"
> +
> +#For debug print.
> +DEBUG=1
> +if [ -n "${DEBUG}" ]; then
> + DEBUG_FILE=/var/log/ha-kdumpcheck.log
> + touch ${DEBUG_FILE}
> + chmod 600 ${DEBUG_FILE}
> +
> + exec 2>> ${DEBUG_FILE}
> + OUTPUT='>&2'
> +fi
> +
> +print_debug() {
> + if [ -n "${DEBUG}" ]; then
> + cat >&2
> + else
> + cat > /dev/null 2>&1
> + fi
> +}
> +
> +#Rewrite the hostlist to accept "," as a delimeter for hostnames too.
> +hostlist=`echo ${hostlist} | tr ',' ' '`
> +
> +##
> +# Check the parameter hostlist is set or not.
> +# If not, exit with 6 (ERR_CONFIGURED).
> +##
> +function check_hostlist() {
> + if [ -z "${hostlist}" ]; then
> + echo "`date`::ERROR: hostlist is empty." | print_debug
> + exit 6 #ERR_CONFIGURED
> + fi
> +}
> +
> +##
> +# Set kdump check user name to USERNAME.
> +# always return 0.
> +##
> +function get_username() {
> + KDUMP_CONFIG_FILE="/etc/kdump.conf"
> + CONFIG_NAME="kdump_check_user"
> +
> + if [ ! -f "${KDUMP_CONFIG_FILE}" ]; then
> + echo "`date`::DEBUG: ${KDUMP_CONFIG_FILE} doesn't exist." |
> print_debug
> + return 0
> + fi
> +
> + TMP=`grep "^\s*${CONFIG_NAME}\>" ${KDUMP_CONFIG_FILE} | awk '{print $2}'`
> + if [ -n "${TMP}" ]; then
> + USERNAME="${TMP}"
> + fi
> +
> + echo "`date`::DEBUG: kdump check user name is ${USERNAME}." | print_debug
> +}
> +
> +##
> +# Check the specified or default identity file exists or not.
> +# If not, exit with 6 (ERR_CONFIGURED).
> +##
> +function check_identity_file() {
> + local USERNAME="$1"
> + IDENTITY_SETTINGS=""
> + if [ -n "${identity_file}" ]; then
> + if [ ! -f "${identity_file}" ]; then
> + echo "`date`::ERROR: ${identity_file} doesn't exist." |
> print_debug
> + exit 6 #ERR_CONFIGURED
> + fi
> + IDENTITY_SETTINGS="-i ${identity_file}"
> + else
> + FLG_DEFFILE_EXISTS=0
> + USERHOMEDIR=`eval echo "~${USERNAME}"`
> + for FILENAME in "${USERHOMEDIR}/.ssh/id_rsa" \
> + "${USERHOMEDIR}/.ssh/id_dsa" \
> + "${USERHOMEDIR}/.ssh/identity"
> + do
> + if [ -f "${FILENAME}" ]; then
> + FLG_DEFFILE_EXISTS=1
> + IDENTITY_SETTINGS="${IDENTITY_SETTINGS} -i ${FILENAME}"
> + fi
> + done
> + if [ ${FLG_DEFFILE_EXISTS} -eq 0 ]; then
> + echo "`date`::ERROR: ${USERNAME}'s identity file for ssh
> command" \
> + " doesn't exist." | print_debug
> + exit 6 #ERR_CONFIGURED
> + fi
> + fi
> +}
> +
> +##
> +# Check the user to check doing kdump exists or not.
> +# If not, exit with 6 (ERR_CONFIGURED).
> +##
> +function check_user_existence() {
> + local USERNAME="$1"
> +
> + # Get kdump check user name and check whether he exists or not.
> + grep -q "^${USERNAME}\>" /etc/passwd > /dev/null 2>&1
> + RET=$?
> + if [ ${RET} != 0 ]; then
> + echo "`date`::ERROR: user ${USERNAME} doesn't exist." \
> + "please confirm \"kdump_check_user\" setting in
> /etc/kdump.conf." \
> + "(default user name is \"kdumpchecker\")" | print_debug
> + exit 6 #ERR_CONFIGURED
> + fi
> +}
> +
> +##
> +# Check the target node is kdumping or not.
> +# arg1 : target node name.
> +# ret : 0 -> the target is kdumping.
> +# : 1 -> the target is _not_ kdumping.
> +# : else -> failed to check.
> +##
> +function check_kdump() {
> + TARGET_NODE="$1"
> +
> + # Get kdump check user name.
> + get_username
> + check_user_existence ${USERNAME}
> + EXEC_COMMAND="${SSH_COMMAND} -l ${USERNAME}"
> +
> + # Specify kdump check user's identity file for ssh command.
> + check_identity_file "${USERNAME}"
> + EXEC_COMMAND="${EXEC_COMMAND} ${IDENTITY_SETTINGS}"
> +
> + # Now, check the target!
> + # In advance, Write the following setting at the head of
> + # kdump_check_user's public key in authorized_keys file on target node.
> + # command="test -s /proc/vmcore", \
> + # no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
> + echo "`date`::DEBUG: execute the command" \
> + "[${EXEC_COMMAND} ${TARGET_NODE}]." | print_debug
> + ${EXEC_COMMAND} ${TARGET_NODE} > /dev/null 2>&1
> + RET=$?
> + echo "`date`::DEBUG: the command's result is ${RET}." | print_debug
> +
> + #RET -> 0 : vmcore file's size is not zero. the node is kdumping.
> + #RET -> 1 : the node is _not_ kdumping (vmcore didn't exist or
> + # its size is zero). It still needs to be STONITH'ed.
> + #RET -> 255 : ssh command is failed.
> + # else : Maybe command strings in authorized_keys is wrong...
> + return ${RET}
> +}
> +
> +###
> +#
> +# Main function.
> +#
> +###
> +case $1 in
> +gethosts)
> + check_hostlist
> + for REMOTE_HOSTNAME in ${hostlist} ; do
> + echo "${REMOTE_HOSTNAME}"
> + done
> + exit 0
> + ;;
> +on)
> + # This plugin does only check whether a target node is kdumping or not.
> + exit 1
> + ;;
> +reset|off)
> + check_hostlist
> + RET=1
> + for REMOTE_HOSTNAME in ${hostlist}
> + do
> + if [ "${REMOTE_HOSTNAME}" != "$2" ]; then
> + continue
> + fi
> + while [ 1 ]
> + do
> + check_kdump "$2"
> + RET=$?
> + if [ ${RET} -ne 255 ]; then
> + exit ${RET}
> + fi
> + #255 means ssh command itself is failed.
> + #For example, connection failure as if network doesn't start yet
> + #in 2nd kernel on the target node.
> + #So, retry to check after a little while.
> + sleep 1
> + done
> + done
> + exit ${RET}
> + ;;
> +status)
> + check_hostlist
> + for REMOTE_HOSTNAME in ${hostlist}
> + do
> + if ping -w1 -c1 "${REMOTE_HOSTNAME}" 2>&1 | grep "unknown host"
> + then
> + exit 1
> + fi
> + done
> + get_username
> + check_user_existence "${USERNAME}"
> + check_identity_file "${USERNAME}"
> + exit 0
> + ;;
> +getconfignames)
> + echo "hostlist identity_file"
> + exit 0
> + ;;
> +getinfo-devid)
> + echo "kdump check STONITH device"
> + exit 0
> + ;;
> +getinfo-devname)
> + echo "kdump check STONITH external device"
> + exit 0
> + ;;
> +getinfo-devdescr)
> + echo "ssh-based kdump checker"
> + echo "To check whether a target node is dumping or not."
> + exit 0
> + ;;
> +getinfo-devurl)
> + echo "kdump -> http://lse.sourceforge.net/kdump/"
> + echo "ssh -> http://openssh.org"
> + exit 0
> + ;;
> +getinfo-xml)
> + cat << SSHXML
> +<parameters>
> +<parameter name="hostlist" unique="1" required="1">
> +<content type="string" />
> +<shortdesc lang="en">
> +Hostlist
> +</shortdesc>
> +<longdesc lang="en">
> +The list of hosts that the STONITH device controls
> +</longdesc>
> +</parameter>
> +
> +<parameter name="identity_file" unique="1" required="0">
> +<content type="string" />
> +<shortdesc lang="en">
> +Identity file's full path for kdump check user
> +</shortdesc>
> +<longdesc lang="en">
> +The full path of kdump check user's identity file for ssh command.
> +The identity in the specified file have to be restricted to execute
> +only the following command.
> +"test -s /proc/vmcore"
> +Default: kdump check user's default identity file path.
> +NOTE: You can specify kdump check user name in /etc/kdump.conf.
> + The parameter name is "kdump_check_user".
> + Default user is "kdumpchecker".
> +</longdesc>
> +</parameter>
> +
> +</parameters>
> +SSHXML
> + exit 0
> + ;;
> +*)
> + exit 1
> + ;;
> +esac
> --- mkdumprd 2008-04-11 08:51:17.000000000 +0900
> +++ mkdumprd.v2 2008-10-07 22:20:44.000000000 +0900
> @@ -72,6 +72,10 @@
> bin=""
> KDUMP_POST=""
> extra_kdump_mods=""
> +KDUMP_CHECK_USER="kdumpchecker"
> +NETDUMP_FLG=false
> +NETWORK_DEVICE=""
> +UDEV_RULES=""
>
> vecho()
> {
> @@ -910,6 +914,7 @@
>
> #load nfs modules, if needed
> echo $config_val | grep -v "@" > /dev/null && findmodule nfs
> + NETDUMP_FLG=true
> ;;
> raw)
> USING_METHOD="raw"
> @@ -972,6 +977,18 @@
> extra_bins)
> bin="$bin $config_val"
> ;;
> + network_device)
> + NETWORK_DEVICE=$config_val
> + bin="$bin /usr/sbin/sshd"
> + ;;
> + kdump_check_user)
> + KDUMP_CHECK_USER=$config_val
> + [ $KDUMP_CHECK_USER = "root" ] && echo Please specify non-root
> user to kdump_check_user. && exit 1
> + ;;
> + udev_rules)
> + UDEV_RULES=$config_val
> + bin="$bin /sbin/udevd"
> + ;;
> extra_modules)
> extra_kdump_mods="$extra_kdump_mods $config_val"
> ;;
> @@ -1004,6 +1021,12 @@
> done < $KDUMP_CONFIG_FILE
> fi
>
> +if [ $NETDUMP_FLG = "false" -a "x$NETWORK_DEVICE" != "x" ]; then
> + [ ! -f /etc/sysconfig/network-scripts/ifcfg-$NETWORK_DEVICE ] && echo
> Device $NETWORK_DEVICE does not exist. && exit 1
> + handlenetdev $NETWORK_DEVICE
> + echo $NETWORK_DEVICE >> $MNTIMAGE/etc/iface_to_activate
> +fi
> +
> #if we are using makedumpfile here, then generate the config file
> #also only build this config if we don't have vmcoreinfo on this kernel
> if [ -n "$CORE_COLLECTOR" -a ! -e /sys/kernel/vmcoreinfo ]; then
> @@ -1492,6 +1515,12 @@
> emit " done"
> emit "fi"
>
> +if [ "x$NETWORK_DEVICE" != "x" -a "x$UDEV_RULES" != "x" -a $NETDUMP_FLG =
> "false" ]; then
> + emit "if [ -f /etc/udev/udev.conf ]; then"
> + emit " /sbin/udevd -d"
> + emit "fi"
> +fi
> +
> if [ -n "$vg_list" ]; then
> emit "echo Making device-mapper control node"
> emit "DM_MAJ=\`cat /proc/devices | grep misc | cut -d\" \" -f2\`"
> @@ -1821,6 +1850,12 @@
> ;;
> extra_modules)
> ;;
> + network_device)
> + ;;
> + kdump_check_user)
> + ;;
> + udev_rules)
> + ;;
> default)
> ;;
> link_delay)
> @@ -1828,6 +1863,59 @@
> path)
> ;;
> *)
> + if [ "x$NETWORK_DEVICE" != "x" -a $NETDUMP_FLG = "false"
> ]; then
> + mkdir -p $MNTIMAGE/etc/network/
> + mkdir -p $MNTIMAGE/etc/sysconfig
> + mkdir -p $MNTIMAGE/sys/class
> + mkdir -p $MNTIMAGE/proc/mounts
> + mkdir -p $MNTIMAGE/var/empty/sshd/etc
> + mkdir -p $MNTIMAGE/home/$KDUMP_CHECK_USER/.ssh
> +
> + grep "^\s*sshd" /etc/passwd >> $MNTIMAGE/etc/passwd
> + KDUMP_CHECK_USER_PASSWD=`grep
> "^\s*$KDUMP_CHECK_USER" /etc/passwd`
> + [ $? != 0 ] && echo User $KDUMP_CHECK_USER does not
> exist. && exit 1
> + echo $KDUMP_CHECK_USER_PASSWD | sed -e "s/bash/msh/"
> >> $MNTIMAGE/etc/passwd
> + KDUMP_CHECK_USER_HOME=`awk -F:
> /^\s*$KDUMP_CHECK_USER/'{print $6}' $MNTIMAGE/etc/passwd`
> +
> + cp -a $KDUMP_CHECK_USER_HOME/.ssh/authorized_keys
> $MNTIMAGE/$KDUMP_CHECK_USER_HOME/.ssh/.
> + cp -a /etc/ssh $MNTIMAGE/etc
> + [ ! -f /etc/ssh/sshd_config ] && echo
> /etc/ssh/sshd_config: No such file or directory. && exit 1
> + sed -e "{s/^\s*UsePAM/#UsePAM/}"
> /etc/ssh/sshd_config > $MNTIMAGE/etc/ssh/sshd_config
> + if [ "x$UDEV_RULES" != "x" ]; then
> + cp -a /lib/udev $MNTIMAGE/lib
> + cp -a /etc/udev $MNTIMAGE/etc
> + cp -a /etc/sysconfig/modules
> $MNTIMAGE/etc/sysconfig
> + rm -fr $MNTIMAGE/etc/udev/rules.d/*
> + UDEV_RULES_LIST=`echo $UDEV_RULES | tr ',' ' '`
> + for UDEV_RULE in $UDEV_RULES_LIST; do
> + [ ! -f /etc/udev/rules.d/$UDEV_RULE ] &&
> echo /etc/udev/rules.d/$UDEV_RULE: No such file or directory. && exit 1
> + cp -a /etc/udev/rules.d/$UDEV_RULE
> $MNTIMAGE/etc/udev/rules.d/$UDEV_RULE
> + done
> + MPATH_WAIT_PATH=`which mpath_wait`
> + [ $? != 0 ] && echo mpath_wait: No such file or
> directory. && exit 1
> + sed -e {s/bash/msh/} $MPATH_WAIT_PATH >
> $MNTIMAGE$MPATH_WAIT_PATH
> + chmod 755 $MNTIMAGE/$MPATH_WAIT_PATH
> + fi
> + NETWORK_DEVICE=""
> +
> + # bring up the network
> + emit "for i in \`ls /etc/ifcfg-*\`"
> + emit "do"
> + emit " NETDEV=\`echo \$i | cut -d\"-\" -f2\`"
> + emit " map_interface \$NETDEV"
> + emit "done"
> + emit "rename_interfaces"
> + emit "IFACE=\`cat /etc/iface_to_activate\`"
> + emit "ifup \$IFACE"
> + #lets make sure we're up
> + emit "IFADDR=\`ifconfig \$IFACE | awk '/inet addr/
> {print \$2}' | cut -d\":\" -f 2\`"
> + emit "if [ -z \"\$IFADDR\" ]"
> + emit "then"
> + emit " echo \"\$IFACE failed to come up\""
> + emit "fi"
> + emit "/usr/sbin/sshd"
> + fi
> +
> #test filesystem and directory creation
> kdump_chk "test -f /sbin/fsck.$config_opt" "Unsupported
> type $config_opt"
> tmnt=`mktemp -dq`
> @@ -1893,6 +1981,7 @@
> fi
> emit "fi"
> emit "umount /mnt"
> + emit "sync"
> emit "[ \$exitcode == 0 ] && $FINAL_ACTION"
> ;;
> esac
> Kdump check STONITH plugin "kdumpcheck"
> 1. Introduction
> This plugin's purpose is to avoid STONITH for a node which is doing kdump.
> It confirms whether the node is doing kdump or not when STONITH reset or
> off operation is executed.
> If the target node is doing kdump, this plugin considers that STONITH
> succeeded. If not, it considers that STONITH failed.
>
> NOTE: This plugin has no ability to shutdown or startup a node.
> So it has to be used with other STONITH plugin.
> Then, when this plugin failed, the next plugin which can kill a node
> is executed.
>
> 2. The way to check
> When STONITH reset or off is executed, kdumpcheck connects to the target
> node, and checks the size of /proc/vmcore.
> It judges that the target node is _not_ doing kdump when the size of
> /proc/vmcore on the node is zero, or the file doesn't exist.
> Then kdumpcheck returns "STONITH failed" to stonithd, and the next plugin
> is executed.
>
> 3. Expanding mkdumprd
> This plugin requires non-root user and ssh connection even on 2nd kernel.
> So, you need to apply mkdumprd_for_kdumpcheck.patch to /sbin/mkdumprd.
> This patch is tested with mkdumprd version 5.0.39.
> The patch adds the following functions:
> i) Start udevd with specified .rules files.
> ii) Bring the specified network interface up.
> iii) Start sshd.
> iv) Add the specified user to the 2nd kernel.
> The user is to check whether the node is doing kdump or not.
> v) Execute sync command after dumping.
>
> NOTE: i) to iv) expandings are only for the case that filesystem
> partition
> is specified as the location where the vmcore should be dumped.
>
> 4. Parameters
> kdumpcheck's parameters are the following.
> hostlist : The list of hosts that the STONITH device controls.
> delimiter is "," or " ".
> indispensable setting. (default:none)
> identity_file: a full-path of the private key file for the user
> who checks doing kdump.
> (default: $HOME/.ssh/id_rsa, $HOME/.ssh/id_dsa and
> $HOME/.ssh/identity)
>
> NOTE: To execute this plugin first, set the highest priority to this
> plugin
> in all STONITH resources.
>
> 5. How to Use
> To use this tool, do the following steps at all nodes in the cluster.
> 1) Add an user to check doing kdump.
> ex.)
> # useradd kdumpchecker
> # passwd kdumpchecker
> 2) Allow passwordless login from the node which will do STONITH to all
> target nodes for the user added at step 1).
> ex.)
> $ cd
> $ mkdir .ssh
> $ chmod 700 .ssh
> $ cd .ssh
> $ ssh-keygen (generate authentication keys with empty passphrase)
> $ scp id_rsa.pub [EMAIL PROTECTED]:"~/.ssh/."
> $ ssh [EMAIL PROTECTED]
> $ cd ~/.ssh
> $ cat id_rsa.pub >> authorized_keys
> $ chmod 600 autorized_keys
> $ rm id_rsa.pub
> 3) Limit the command that the user can execute.
> Describe the following commands in a line at the head of the user's
> public key in target node's authorized_keys file.
> [command="test -s /proc/vmcore"]
> And describe some options (like no-pty, no-port-forwarding and so on)
> according to your security policy.
> ex.)
> $ vi ~/.ssh/authorized_keys
> command="test -s
> /proc/vmcore",no-port-forwarding,no-X11-forwarding,
> no-agent-forwarding,no-pty ssh-rsa AAA..snip..== [EMAIL PROTECTED]
> 4) Add settings in /etc/kdump.conf.
> network_device : network interface name to check doing kdump.
> indispensable setting. (default: none)
> kdump_check_user : user name to check doing kdump.
> specify non-root user.
> (default: "kdumpchecker")
> udev_rules : .rules files' names.
> specify if you use udev for mapping devices.
> specified files have to be in
> /etc/udev/rules.d/.
> you can specify two or more files.
> delimiter is "," or " ". (default: none)
> ex.)
> # vi /etc/kdump.conf
> ext3 /dev/sda1
> network_device eth0
> kdump_check_user kdumpchecker
> udev_rules 10-if.rules
> 5) Apply the patch to /sbin/mkdumprd.
> # cd /sbin
> # patch -p 1 < mkdumprd_for_kdumpcheck.patch
> 6) Restart kdump service.
> # service kdump restart
> 7) Describe cib.xml to set STONITH plugin.
> (See "2. Parameters" and "6. Appendix")
>
> 6. Appendix
> A sample cib.xml.
> <clone id="clnStonith">
> <instance_attributes id="instance_attributes.id238245a">
> <nvpair id="clone0_clone_max" name="clone_max" value="2"/>
> <nvpair id="clone0_clone_node_max" name="clone_node_max" value="1"/>
> </instance_attributes>
> <group id="grpStonith">
> <instance_attributes id="instance_attributes.id2382455"/>
> <primitive id="grpStonith-kdumpcheck" class="stonith"
> type="external/kd
> umpcheck">
> <instance_attributes id="instance_attributes.id238240a">
> <nvpair id="nvpair.id238240b" name="hostlist"
> value="node1,node2"/>
> <nvpair id="nvpair.id238240c" name="priority" value="1"/>
> <nvpair id="nvpair.id2382408b" name="stonith-timeout" value="30s"/>
> </instance_attributes>
> <operations>
> <op id="grpStonith-kdumpcheck-start" name="start" interval="0"
> tim
> eout="300" on-fail="restart"/>
> <op id="grpStonith-kdumpcheck-monitor" name="monitor"
> interval="10"
> timeout="60" on-fail="restart"/>
> <op id="grpStonith-kdumpcheck-stop" name="stop" interval="0"
> timeou
> t="300" on-fail="block"/>
> </operations>
> <meta_attributes id="primitive-grpStonith-kdump-check.meta"/>
> </primitive>
> <primitive id="grpStonith-ssh" class="stonith" type="external/ssh">
> <instance_attributes id="instance_attributes.id2382402a">
> <nvpair id="nvpair.id2382408a" name="hostlist"
> value="node1,node2"/
> >
> <nvpair id="nvpair.id238066b" name="priority" value="2"/>
> <nvpair id="nvpair.id2382408c" name="stonith-timeout"
> value="60s"/>
> </instance_attributes>
> <operations>
> <op id="grpStonith-ssh-start" name="start" interval="0"
> timeout="30
> 0" on-fail="restart"/>
> <op id="grpStonith-ssh-monitor" name="monitor" interval="10"
> timeou
> t="60" on-fail="restart"/>
> <op id="grpStonith-ssh-stop" name="stop" interval="0"
> timeout="300"
> on-fail="block"/>
> </operations>
> <meta_attributes id="primitive-grpStonith-ssh.meta"/>
> </primitive>
> </group>
> </clone>
>
> _______________________________________________________
> Linux-HA-Dev: [email protected]
> http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
> Home Page: http://linux-ha.org/
_______________________________________________________
Linux-HA-Dev: [email protected]
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/