
dejanmm at fastmail
Oct 8, 2008, 8:14 AM
Post #2 of 11
(3257 views)
Permalink
|
|
Re: A STONITH plugin for checking whether the target node is kdumping or not.
[In reply to]
|
|
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 kdumpchecker [at] target_nod:"~/.ssh/." > $ ssh kdumpchecker [at] target_nod > $ 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..== kdumpchecker [at] node > 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: Linux-HA-Dev [at] lists > http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev > Home Page: http://linux-ha.org/ _______________________________________________________ Linux-HA-Dev: Linux-HA-Dev [at] lists http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev Home Page: http://linux-ha.org/
|