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.

If you're interested in, please give me your comments.
Any comments and suggestions are really appreciated.


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/

Reply via email to