[Pvfs2-cvs] commit by pcarns in pvfs2-1/examples/heartbeat: PVFS2 cib.xml.example pvfs2-ha-heartbeat-configure.sh Filesystem-qla-monitor PVFS2-notify apc-switched-pdu-hybrid-control.pl apc-switched-pdu-hybrid-monitor.pl apc-switched-pdu-hybrid-outlet-status.pl apc-switched-pdu-ssh-control.exp apc-switched-pdu-ssh-monitor.exp baytech-mgmt-control.exp baytech-mgmt-monitor.exp pvfs2-stonith-plugin qla-monitor.pl

CVS commit program cvs at parl.clemson.edu
Tue Jun 24 11:01:10 EDT 2008


Update of /projects/cvsroot/pvfs2-1/examples/heartbeat
In directory parlweb1:/tmp/cvs-serv6835/examples/heartbeat

Modified Files:
      Tag: small-file-branch
	PVFS2 cib.xml.example pvfs2-ha-heartbeat-configure.sh 
Removed Files:
      Tag: small-file-branch
	Filesystem-qla-monitor PVFS2-notify 
	apc-switched-pdu-hybrid-control.pl 
	apc-switched-pdu-hybrid-monitor.pl 
	apc-switched-pdu-hybrid-outlet-status.pl 
	apc-switched-pdu-ssh-control.exp 
	apc-switched-pdu-ssh-monitor.exp baytech-mgmt-control.exp 
	baytech-mgmt-monitor.exp pvfs2-stonith-plugin qla-monitor.pl 
Log Message:
reverse merge latest trunk changes to small-file-branch and update msgpair
usage where needed


Index: PVFS2
===================================================================
RCS file: /projects/cvsroot/pvfs2-1/examples/heartbeat/PVFS2,v
diff -p -u -r1.1.6.1 -r1.1.6.2
--- PVFS2	28 Jan 2008 21:18:27 -0000	1.1.6.1
+++ PVFS2	24 Jun 2008 15:01:10 -0000	1.1.6.2
@@ -13,17 +13,17 @@
 #
 # OCF parameters (required in cib):
 #  OCF_RESKEY_fsconfig
-#  OCF_RESKEY_serverconfig
 #  OCF_RESKEY_port
 #  OCF_RESKEY_pidfile
 #  OCF_RESKEY_ip
+#  OCF_RESKEY_alias
 
 # example values:
 #OCF_RESKEY_fsconfig=/root/simple.conf
-#OCF_RESKEY_serverconfig=/root/server.conf-localhost
 #OCF_RESKEY_port=3334
 #OCF_RESKEY_pidfile=/tmp/pvfs2-server.pid
-#OCF_RESKEY_ip=pvfs2ha0001
+#OCF_RESKEY_ip=virtual1
+#OCF_RESKEY_alias=virtual1
 
 VARRUN=/var/run
 
@@ -129,10 +129,10 @@ start_pvfs2() {
   ulimit -n 100000 && ulimit -c unlimited
 
   # try to create storage space (ok if it fails)
-  $PVFS2D $OCF_RESKEY_fsconfig $OCF_RESKEY_serverconfig -f
+  $PVFS2D $OCF_RESKEY_fsconfig -f
 
   # launch daemon
-  ocf_run $PVFS2D -p $OCF_RESKEY_pidfile $OCF_RESKEY_fsconfig $OCF_RESKEY_serverconfig
+  ocf_run $PVFS2D -p $OCF_RESKEY_pidfile -a $OCF_RESKEY_alias $OCF_RESKEY_fsconfig 
   if
     [ $? -ne 0 ]
   then
@@ -243,13 +243,6 @@ The full path name of file system config
 <shortdesc lang="en">fs config file path</shortdesc>
 </parameter>
 
-<parameter name="serverconfig" required="1">
-<longdesc lang="en">
-The full path name of server config file.
-</longdesc>
-<shortdesc lang="en">server config file path</shortdesc>
-</parameter>
-
 <parameter name="port" required="1">
 <longdesc lang="en">
 Port number that server will listen on.
@@ -271,6 +264,12 @@ Virtual ip address that the server will 
 <shortdesc lang="en">virtual IP address</shortdesc>
 </parameter>
 
+<parameter name="alias" required="1">
+<longdesc lang="en">
+PVFS server alias to be passed to -a argument.
+</longdesc>
+<shortdesc lang="en">PVFS server alias</shortdesc>
+</parameter>
 
 </parameters>
 
@@ -305,12 +304,6 @@ validate_all_pvfs2() {
 	ocf_log err "Port number $OCF_RESKEY_port is invalid!"
 	exit $OCF_ERR_ARGS
   fi
-
-# serverconfig: make sure the file exists
-if [ ! -f $OCF_RESKEY_serverconfig ]; then
-   ocf_log err "Configuration file $OCF_RESKEY_serverconfig not found!"
-   exit $OCF_ERR_CONFIGURED
-fi
 
 # fsconfig: make sure the file exists
 if [ ! -f $OCF_RESKEY_fsconfig ]; then

Index: cib.xml.example
===================================================================
RCS file: /projects/cvsroot/pvfs2-1/examples/heartbeat/cib.xml.example,v
diff -p -u -r1.1 -r1.1.6.1
--- cib.xml.example	7 Nov 2007 21:54:12 -0000	1.1
+++ cib.xml.example	24 Jun 2008 15:01:10 -0000	1.1.6.1
@@ -14,8 +14,6 @@
            <nvpair id="cib-bootstrap-options-stop-orphan-actions" name="stop-orphan-actions" value="true"/>
            <nvpair id="cib-bootstrap-options-remove-after-stop" name="remove-after-stop" value="false"/>
            <nvpair id="cib-bootstrap-options-short_resource_names" name="short_resource_names" value="true"/>
-           <nvpair id="cib-bootstrap-options-cluster-delay" name="cluster-delay" value="5min"/>
-           <nvpair id="cib-bootstrap-options-default-action-timeout" name="default-action-timeout" value="90s"/>
            <nvpair id="cib-bootstrap-options-is-managed-default" name="is-managed-default" value="true"/>
          </attributes>
        </cluster_property_set>
@@ -23,16 +21,6 @@
      <nodes/>
      <resources>
        <group id="server0">
-         <primitive id="server0_notify" class="ocf" type="PVFS2-notify" provider="external">
-           <instance_attributes id="server0_notify_iattr">
-             <attributes>
-               <nvpair id="server0_notify_firsthost" name="firsthost" value="node1"/>
-               <nvpair id="server0_notify_fsname" name="fsname" value="pvfs2-ha"/>
-               <nvpair id="server0_notify_conf_dir" name="conf_dir" value="/etc/pvfs2"/>
-               <nvpair id="server0_notify_title" name="title" value="server0"/>
-             </attributes>
-           </instance_attributes>
-         </primitive>
          <primitive id="server0_address" class="ocf" type="IPaddr" provider="heartbeat">
            <instance_attributes id="server0_addr_iattr">
              <attributes>
@@ -43,24 +31,21 @@
          <primitive id="server0_fs" class="ocf" type="Filesystem" provider="external">
            <instance_attributes id="server0_fs_iattr">
              <attributes>
-               <nvpair id="server0_fs_device" name="device" value="/dev/fooa1"/>
-               <nvpair id="server0_fs_directory" name="directory" value="/san_mounta1"/>
+               <nvpair id="server0_fs_device" name="device" value="-L label0"/>
+               <nvpair id="server0_fs_directory" name="directory" value="/san_mount0"/>
                <nvpair id="server0_fs_fstype" name="fstype" value="ext3"/>
                <nvpair id="server0_fs_options" name="options" value="rw"/>
              </attributes>
            </instance_attributes>
-           <operations>
-             <op id="server0_fs_monitor" name="monitor" interval="2s" timeout="12s"/>
-           </operations>
          </primitive>
          <primitive id="server0_daemon" class="ocf" type="PVFS2" provider="external">
            <instance_attributes id="server0_daemon_iattr">
              <attributes>
-               <nvpair id="server0_daemon_fsconfig" name="fsconfig" value="etc/pvfs2//pvfs2-fs.conf"/>
-               <nvpair id="server0_daemon_serverconfig" name="serverconfig" value="etc/pvfs2//pvfs2-srv.conf-virtualnode1_tcp3334"/>
+               <nvpair id="server0_daemon_fsconfig" name="fsconfig" value="/etc/pvfs2/pvfs2-fs.conf"/>
                <nvpair id="server0_daemon_port" name="port" value="3334"/>
-               <nvpair id="server0_daemon_pidfile" name="pidfile" value="/var/run/virtualnode1.pvfs2_ha_pid"/>
+               <nvpair id="server0_daemon_pidfile" name="pidfile" value="/var/run/virtual1.pvfs2_ha_pid"/>
                <nvpair id="server0_daemon_ip" name="ip" value="192.168.0.1"/>
+               <nvpair id="server0_daemon_alias" name="alias" value="virtual1"/>
              </attributes>
            </instance_attributes>
            <operations>
@@ -69,16 +54,6 @@
          </primitive>
        </group>
        <group id="server1">
-         <primitive id="server1_notify" class="ocf" type="PVFS2-notify" provider="external">
-           <instance_attributes id="server1_notify_iattr">
-             <attributes>
-               <nvpair id="server1_notify_firsthost" name="firsthost" value="node2"/>
-               <nvpair id="server1_notify_fsname" name="fsname" value="pvfs2-ha"/>
-               <nvpair id="server1_notify_conf_dir" name="conf_dir" value="/etc/pvfs2"/>
-               <nvpair id="server1_notify_title" name="title" value="server1"/>
-             </attributes>
-           </instance_attributes>
-         </primitive>
          <primitive id="server1_address" class="ocf" type="IPaddr" provider="heartbeat">
            <instance_attributes id="server1_addr_iattr">
              <attributes>
@@ -89,24 +64,21 @@
          <primitive id="server1_fs" class="ocf" type="Filesystem" provider="external">
            <instance_attributes id="server1_fs_iattr">
              <attributes>
-               <nvpair id="server1_fs_device" name="device" value="/dev/foob1"/>
-               <nvpair id="server1_fs_directory" name="directory" value="/san_mountb1"/>
+               <nvpair id="server1_fs_device" name="device" value="-L label1"/>
+               <nvpair id="server1_fs_directory" name="directory" value="/san_mount1"/>
                <nvpair id="server1_fs_fstype" name="fstype" value="ext3"/>
                <nvpair id="server1_fs_options" name="options" value="rw"/>
              </attributes>
            </instance_attributes>
-           <operations>
-             <op id="server1_fs_monitor" name="monitor" interval="2s" timeout="12s"/>
-           </operations>
          </primitive>
          <primitive id="server1_daemon" class="ocf" type="PVFS2" provider="external">
            <instance_attributes id="server1_daemon_iattr">
              <attributes>
-               <nvpair id="server1_daemon_fsconfig" name="fsconfig" value="etc/pvfs2//pvfs2-fs.conf"/>
-               <nvpair id="server1_daemon_serverconfig" name="serverconfig" value="etc/pvfs2//pvfs2-srv.conf-virtualnode2_tcp3334"/>
+               <nvpair id="server1_daemon_fsconfig" name="fsconfig" value="/etc/pvfs2/pvfs2-fs.conf"/>
                <nvpair id="server1_daemon_port" name="port" value="3334"/>
-               <nvpair id="server1_daemon_pidfile" name="pidfile" value="/var/run/virtualnode2.pvfs2_ha_pid"/>
+               <nvpair id="server1_daemon_pidfile" name="pidfile" value="/var/run/virtual2.pvfs2_ha_pid"/>
                <nvpair id="server1_daemon_ip" name="ip" value="192.168.0.2"/>
+               <nvpair id="server1_daemon_alias" name="alias" value="virtual2"/>
              </attributes>
            </instance_attributes>
            <operations>
@@ -115,15 +87,6 @@
          </primitive>
        </group>
        <group id="server2">
-         <primitive id="server2_notify" class="ocf" type="PVFS2-notify" provider="external">
-           <instance_attributes id="server2_notify_iattr">
-             <attributes>
-               <nvpair id="server2_notify_firsthost" name="firsthost" value="node3"/>
-               <nvpair id="server2_notify_fsname" name="fsname" value="pvfs2-ha"/>
-               <nvpair id="server2_notify_conf_dir" name="conf_dir" value="/etc/pvfs2"/>
-               <nvpair id="server2_notify_title" name="title" value="server2"/>
-             </attributes>
-           </instance_attributes>
          </primitive>
          <primitive id="server2_address" class="ocf" type="IPaddr" provider="heartbeat">
            <instance_attributes id="server2_addr_iattr">
@@ -135,24 +98,21 @@
          <primitive id="server2_fs" class="ocf" type="Filesystem" provider="external">
            <instance_attributes id="server2_fs_iattr">
              <attributes>
-               <nvpair id="server2_fs_device" name="device" value="/dev/fooc1"/>
-               <nvpair id="server2_fs_directory" name="directory" value="/san_mountc1"/>
+               <nvpair id="server2_fs_device" name="device" value="-L label2"/>
+               <nvpair id="server2_fs_directory" name="directory" value="/san_mount2"/>
                <nvpair id="server2_fs_fstype" name="fstype" value="ext3"/>
                <nvpair id="server2_fs_options" name="options" value="rw"/>
              </attributes>
            </instance_attributes>
-           <operations>
-             <op id="server2_fs_monitor" name="monitor" interval="2s" timeout="12s"/>
-           </operations>
          </primitive>
          <primitive id="server2_daemon" class="ocf" type="PVFS2" provider="external">
            <instance_attributes id="server2_daemon_iattr">
              <attributes>
-               <nvpair id="server2_daemon_fsconfig" name="fsconfig" value="etc/pvfs2//pvfs2-fs.conf"/>
-               <nvpair id="server2_daemon_serverconfig" name="serverconfig" value="etc/pvfs2//pvfs2-srv.conf-virtualnode3_tcp3334"/>
+               <nvpair id="server2_daemon_fsconfig" name="fsconfig" value="/etc/pvfs2/pvfs2-fs.conf"/>
                <nvpair id="server2_daemon_port" name="port" value="3334"/>
-               <nvpair id="server2_daemon_pidfile" name="pidfile" value="/var/run/virtualnode3.pvfs2_ha_pid"/>
+               <nvpair id="server2_daemon_pidfile" name="pidfile" value="/var/run/virtual3.pvfs2_ha_pid"/>
                <nvpair id="server2_daemon_ip" name="ip" value="192.168.0.3"/>
+               <nvpair id="server2_daemon_alias" name="alias" value="virtual3"/>
              </attributes>
            </instance_attributes>
            <operations>
@@ -161,15 +121,6 @@
          </primitive>
        </group>
        <group id="server3">
-         <primitive id="server3_notify" class="ocf" type="PVFS2-notify" provider="external">
-           <instance_attributes id="server3_notify_iattr">
-             <attributes>
-               <nvpair id="server3_notify_firsthost" name="firsthost" value="node4"/>
-               <nvpair id="server3_notify_fsname" name="fsname" value="pvfs2-ha"/>
-               <nvpair id="server3_notify_conf_dir" name="conf_dir" value="/etc/pvfs2"/>
-               <nvpair id="server3_notify_title" name="title" value="server3"/>
-             </attributes>
-           </instance_attributes>
          </primitive>
          <primitive id="server3_address" class="ocf" type="IPaddr" provider="heartbeat">
            <instance_attributes id="server3_addr_iattr">
@@ -181,24 +132,21 @@
          <primitive id="server3_fs" class="ocf" type="Filesystem" provider="external">
            <instance_attributes id="server3_fs_iattr">
              <attributes>
-               <nvpair id="server3_fs_device" name="device" value="/dev/food1"/>
-               <nvpair id="server3_fs_directory" name="directory" value="/san_mountd1"/>
+               <nvpair id="server3_fs_device" name="device" value="-L label3"/>
+               <nvpair id="server3_fs_directory" name="directory" value="/san_mount3"/>
                <nvpair id="server3_fs_fstype" name="fstype" value="ext3"/>
                <nvpair id="server3_fs_options" name="options" value="rw"/>
              </attributes>
            </instance_attributes>
-           <operations>
-             <op id="server3_fs_monitor" name="monitor" interval="2s" timeout="12s"/>
-           </operations>
          </primitive>
          <primitive id="server3_daemon" class="ocf" type="PVFS2" provider="external">
            <instance_attributes id="server3_daemon_iattr">
              <attributes>
-               <nvpair id="server3_daemon_fsconfig" name="fsconfig" value="etc/pvfs2//pvfs2-fs.conf"/>
-               <nvpair id="server3_daemon_serverconfig" name="serverconfig" value="etc/pvfs2//pvfs2-srv.conf-virtualnode4_tcp3334"/>
+               <nvpair id="server3_daemon_fsconfig" name="fsconfig" value="/etc/pvfs2/pvfs2-fs.conf"/>
                <nvpair id="server3_daemon_port" name="port" value="3334"/>
-               <nvpair id="server3_daemon_pidfile" name="pidfile" value="/var/run/virtualnode4.pvfs2_ha_pid"/>
+               <nvpair id="server3_daemon_pidfile" name="pidfile" value="/var/run/virtual4.pvfs2_ha_pid"/>
                <nvpair id="server3_daemon_ip" name="ip" value="192.168.0.4"/>
+               <nvpair id="server3_daemon_alias" name="alias" value="virtual4"/>
              </attributes>
            </instance_attributes>
            <operations>
@@ -206,25 +154,71 @@
            </operations>
          </primitive>
        </group>
-       <clone id="do_fencing">
-         <instance_attributes id="do_fencing_iattr">
+
+       <primitive id="fence0" class="stonith" type="external/ipmi" provider="heartbeat">
+         <operations>
+           <op id="fence0-monitor" name="monitor" interval="60s" timeout="20s" prereq="nothing"/>
+           <op id="fence0-start" name="start" timeout="20s" prereq="nothing"/>
+         </operations>
+
+         <instance_attributes id="ia-fence0">
            <attributes>
-             <nvpair name="clone_max" value="5" id="do_fencing_clone_max"/>
-             <nvpair name="clone_node_max" value="1" id="do_fencing_clone_node_max"/>
+             <nvpair id="fence0-hostname" name="hostname" value="node1"/>
+             <nvpair id="fence0-ipaddr" name="ipaddr" value="192.168.0.10"/>
+             <nvpair id="fence0-userid" name="userid" value="Administrator"/>
+             <nvpair id="fence0-passwd" name="passwd" value="password"/>
            </attributes>
          </instance_attributes>
-         <primitive id="child_do_fencing" class="stonith" type="external/pvfs2-stonith-plugin" provider="heartbeat">
-           <operations>
-             <op name="start" timeout="20s" prereq="nothing" id="child_do_fencing_start"/>
-           </operations>
-           <instance_attributes id="child_do_fencing_iattr">
-             <attributes>
-               <nvpair name="fs_name" value="pvfs2-ha" id="child_do_fencing_fs_name"/>
-               <nvpair name="fs_conf_dir" value="etc/pvfs2/" id="child_do_fencing_fs_conf_dir"/>
-             </attributes>
-           </instance_attributes>
-         </primitive>
-       </clone>
+       </primitive> 
+
+       <primitive id="fence1" class="stonith" type="external/ipmi" provider="heartbeat">
+         <operations>
+           <op id="fence1-monitor" name="monitor" interval="60s" timeout="20s" prereq="nothing"/>
+           <op id="fence1-start" name="start" timeout="20s" prereq="nothing"/>
+         </operations>
+
+         <instance_attributes id="ia-fence1">
+           <attributes>
+             <nvpair id="fence1-hostname" name="hostname" value="node2"/>
+             <nvpair id="fence1-ipaddr" name="ipaddr" value="192.168.0.11"/>
+             <nvpair id="fence1-userid" name="userid" value="Administrator"/>
+             <nvpair id="fence1-passwd" name="passwd" value="password"/>
+           </attributes>
+         </instance_attributes>
+       </primitive> 
+
+       <primitive id="fence2" class="stonith" type="external/ipmi" provider="heartbeat">
+         <operations>
+           <op id="fence2-monitor" name="monitor" interval="60s" timeout="20s" prereq="nothing"/>
+           <op id="fence2-start" name="start" timeout="20s" prereq="nothing"/>
+         </operations>
+
+         <instance_attributes id="ia-fence2">
+           <attributes>
+             <nvpair id="fence2-hostname" name="hostname" value="node3"/>
+             <nvpair id="fence2-ipaddr" name="ipaddr" value="192.168.0.12"/>
+             <nvpair id="fence2-userid" name="userid" value="Administrator"/>
+             <nvpair id="fence2-passwd" name="passwd" value="password"/>
+           </attributes>
+         </instance_attributes>
+       </primitive> 
+
+       <primitive id="fence3" class="stonith" type="external/ipmi" provider="heartbeat">
+         <operations>
+           <op id="fence3-monitor" name="monitor" interval="60s" timeout="20s" prereq="nothing"/>
+           <op id="fence3-start" name="start" timeout="20s" prereq="nothing"/>
+         </operations>
+
+         <instance_attributes id="ia-fence3">
+           <attributes>
+             <nvpair id="fence3-hostname" name="hostname" value="node4"/>
+             <nvpair id="fence3-ipaddr" name="ipaddr" value="192.168.0.13"/>
+             <nvpair id="fence3-userid" name="userid" value="Administrator"/>
+             <nvpair id="fence3-passwd" name="passwd" value="password"/>
+           </attributes>
+         </instance_attributes>
+       </primitive> 
+
      </resources>
      <constraints>
        <rsc_location id="run_server0" rsc="server0">

Index: pvfs2-ha-heartbeat-configure.sh
===================================================================
RCS file: /projects/cvsroot/pvfs2-1/examples/heartbeat/pvfs2-ha-heartbeat-configure.sh,v
diff -p -u -r1.1.6.1 -r1.1.6.2
--- pvfs2-ha-heartbeat-configure.sh	28 Jan 2008 21:18:27 -0000	1.1.6.1
+++ pvfs2-ha-heartbeat-configure.sh	24 Jun 2008 15:01:10 -0000	1.1.6.2
@@ -24,12 +24,13 @@ then
 fi
 
 # put mcast information in the middle (ordering is important)
-echo "logfacility user" > ${OUTDIR}/ha.cf
+echo "use_logd yes" > ${OUTDIR}/ha.cf
 echo "mcast eth0 ${MCAST} 3335 1 0" >> ${OUTDIR}/ha.cf
-echo "auto_failback off" >> ${OUTDIR}/ha.cf
-echo "use_logd no" >> ${OUTDIR}/ha.cf
-echo "respawn hacluster /usr/lib/heartbeat/cibmon -d" >> ${OUTDIR}/ha.cf
+echo "auto_failback yes" >> ${OUTDIR}/ha.cf
 echo "crm yes" >> ${OUTDIR}/ha.cf
+echo "keepalive 1" >> ${OUTDIR}/ha.cf
+echo "deadtime 10" >> ${OUTDIR}/ha.cf
+echo "initdead 80" >> ${OUTDIR}/ha.cf
 echo "compression bz2" >> ${OUTDIR}/ha.cf
 
 # shift arguments down

--- Filesystem-qla-monitor	2008-06-24 11:01:10.000000000 -0400
+++ /dev/null	2004-06-24 14:04:38.000000000 -0400
@@ -1,833 +0,0 @@
-#!/bin/sh
-#
-# Support:      linux-ha at lists.linux-ha.org
-# License:      GNU General Public License (GPL)
-# 
-# Filesystem
-#      Description: Manages a Filesystem on a shared storage medium.
-#  Original Author: Eric Z. Ayers (eric.ayers at compgen.com)
-# Original Release: 25 Oct 2000
-#
-# Modified to support monitoring of a QLogic adapter, 2007
-# Relies on underlying scripts named fs-instance-alarm.pl and
-# fs-power-control.pl to take action in the event of monitoring failure
-#
-# usage: ./Filesystem {start|stop|status|monitor|validate-all|meta-data}
-#
-#	  OCF parameters are as below:
-#		OCF_RESKEY_device
-#		OCF_RESKEY_directory
-#		OCF_RESKEY_fstype
-#		OCF_RESKEY_options
-#		OCF_RESKEY_fsname
-#		OCF_RESKEY_conf_dir
-#
-#OCF_RESKEY_device    : name of block device for the filesystem. e.g. /dev/sda1, /dev/md0
-#			Or a -U or -L option for mount, or an NFS mount specification
-#OCF_RESKEY_directory : the mount point for the filesystem
-#OCF_RESKEY_fstype    : optional name of the filesystem type. e.g. ext2
-#OCF_RESKEY_options   : options to be given to the mount command via -o
-#OCF_RESKEY_fsname    : file system name (PVFS2)
-#OCF_RESKEY_conf_dir  : file system conf directory (PVFS2)
-#
-#
-# An example usage in /etc/ha.d/haresources: 
-#       node1  10.0.0.170 Filesystem::/dev/sda1::/data1::ext2
-#  or
-#       node1  10.0.0.170 Filesystem::-Ldata1::/data1::ext2
-#  or
-#       node1  10.0.0.170 Filesystem::server:/data1::/data1::nfs::ro
-#
-# This assumes you want to manage a filesystem on a shared (scsi) bus.
-# Do not put this filesystem in /etc/fstab.  This script manages all of
-# that for you.
-#
-# If you are interested in High Availability, you will probably also want
-# some sort of external hardware RAID controller in front of the actual 
-# disks.  I don't mean a RAID controller embedded in the host controller -
-# it has to be an external controller.
-#
-# It can also be an internal RAID controller if the controller supports
-# failover.  IBM's ServeRAID controller does this, and it automatically
-# prohibits concurrent access too, so it's pretty cool in this application.
-#
-# There is a script for software RAID-1 included in this directory.  Right 
-# now, I wouldn't recommend using software RAID (see notes in the Raid1 script)
-#
-# NOTE: There is no locking (such as a SCSI reservation) being done here.
-#       I would if the SCSI driver could properly maintain the reservation,
-#       which it cannot, even with the 'scsi reservation' patch submitted
-#       earlier this year by James Bottomley.  The patch minimizes the
-#       bus resets caused by a RESERVATION_CONFLICT return, and helps the 
-#       reservation stay when 2 nodes contend for a reservation, 
-#       but it does not attempt to recover the reservation in the 
-#       case of a bus reset.  
-#
-#       What all this means is that if 2 nodes mount the same file system
-#       read-write, the filesystem is going to become corrupted.
-#
-#	As a result, you should use this together with the stonith option
-#	and redundant, independent communications paths.
-#
-#	If you don't do this, don't blame us when you scramble your disk.
-# 
-#	Note:  the ServeRAID controller does prohibit concurrent acess
-#	In this case, you don't actually need STONITH, but redundant comm is
-#	still an excellent idea.
-#
-
-#######################################################################
-# Initialization:
-
-# newer versions of heartbeat have moved the ocf-shellfuncs  file
-if [ -f /usr/lib/ocf/resource.d/heartbeat/.ocf-shellfuncs ] ; then
-. /usr/lib/ocf/resource.d/heartbeat/.ocf-shellfuncs
-else
-. /usr/lib/heartbeat/ocf-shellfuncs
-fi
-
-#######################################################################
-
-# Utilities used by this script
-MODPROBE=/sbin/modprobe
-FSCK=/sbin/fsck
-FUSER=/sbin/fuser
-MOUNT=/bin/mount
-UMOUNT=/bin/umount
-BLOCKDEV=/sbin/blockdev
-
-check_util () {
-    if [ ! -x "$1" ] ; then
-	ocf_log err "Setup problem: Couldn't find utility $1"
-	exit $OCF_ERR_GENERIC
-    fi
-}
-
-usage() {
-	cat <<-EOT
-	usage: $0 {start|stop|status|monitor|validate-all|meta-data}
-	EOT
-}
-
-meta_data() {
-	cat <<END
-<?xml version="1.0"?>
-<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
-<resource-agent name="Filesystem">
-<version>1.0</version>
-
-<longdesc lang="en">
-Resource script for Filesystem. It manages a Filesystem on a shared storage medium. 
-</longdesc>
-<shortdesc lang="en">Filesystem resource agent</shortdesc>
-
-<parameters>
-<parameter name="device" unique="0" required="1">
-<longdesc lang="en">
-The name of block device for the filesystem, or -U, -L options for mount, or NFS mount specification.
-</longdesc>
-<shortdesc lang="en">block device</shortdesc>
-<content type="string" default="" />
-</parameter>
-
-<parameter name="directory" unique="0" required="1">
-<longdesc lang="en">
-The mount point for the filesystem.
-</longdesc>
-<shortdesc lang="en">mount point</shortdesc>
-<content type="string" default="" />
-</parameter>
-
-<parameter name="fsname" unique="0" required="1">
-<longdesc lang="en">
-Name of PVFS2 file system 
-</longdesc>
-<shortdesc lang="en">File system</shortdesc>
-<content type="string" default="" />
-</parameter>
-
-<parameter name="conf_dir" unique="0" required="1">
-<longdesc lang="en">
-Path to file system conf directory
-</longdesc>
-<shortdesc lang="en">File system conf directory</shortdesc>
-<content type="string" default="" />
-</parameter>
-
-<parameter name="fstype" unique="0" required="1">
-<longdesc lang="en">
-The optional type of filesystem to be mounted.
-</longdesc>
-<shortdesc lang="en">filesystem type</shortdesc>
-<content type="string" default="" />
-</parameter>
-
-<parameter name="options" unique="0">
-<longdesc lang="en">
-Any extra options to be given as -o options to mount.
-</longdesc>
-<shortdesc lang="en">options</shortdesc>
-<content type="string" default="" />
-</parameter>
-
-<parameter name="ocfs2_cluster" unique="0">
-<longdesc lang="en">
-The name (UUID) of the OCFS2 cluster this filesystem is part of,
-iff this is an OCFS2 resource and there's more than one cluster. You
-should not need to specify this.
-</longdesc>
-<shortdesc lang="en">OCFS2 cluster name/UUID</shortdesc>
-<content type="string" default="" />
-</parameter>
-
-<parameter name="ocfs2_configfs" unique="0">
-<longdesc lang="en">
-Mountpoint of the cluster hierarchy below configfs. You should not
-need to specify this.
-</longdesc>
-<shortdesc lang="en">OCFS2 configfs root</shortdesc>
-<content type="string" default="" />
-</parameter>
-</parameters>
-
-<actions>
-<action name="start" timeout="60" />
-<action name="stop" timeout="60" />
-<action name="notify" timeout="60" />
-<action name="status" depth="0" timeout="10" interval="10" start-delay="10" />
-<action name="monitor" depth="0" timeout="10" interval="10" start-delay="10" />
-<action name="validate-all" timeout="5" />
-<action name="meta-data" timeout="5" />
-</actions>
-</resource-agent>
-END
-}
-
-#
-#	Make sure the kernel does the right thing with the FS buffers
-#	This function should be called after unmounting and before mounting
-#	It may not be necessary in 2.4 and later kernels, but it shouldn't hurt
-#	anything either...
-#
-#	It's really a bug that you have to do this at all...
-#
-flushbufs() {
-  if
-    [ "$BLOCKDEV" != "" -a -x "$BLOCKDEV" -a "$blockdevice" = "yes" ]
-  then
-    $BLOCKDEV --flushbufs $1
-    return $?
-  fi
-  
-  return 0
-}
-
-# Take advantage of /proc/mounts if present, use portabel mount command
-# otherwise. Normalize format to "dev mountpoint fstype".
-list_mounts() {
-  if [ -f "/proc/mounts" -a -r "/proc/mounts" ]; then
-    cut -d' ' -f1,2,3 </proc/mounts
-  else
-    $MOUNT | cut -d' ' -f1,3,5
-  fi
-}
-
-determine_blockdevice() {
-  if [ $blockdevice == "yes" ]; then
-    return
-  fi
-  
-  # Get the current real device name, if possible.
-  # (specified devname could be -L or -U...)
-  case "$FSTYPE" in
-    nfs|smbfs|cifs) ;;
-    *)	DEVICE=`list_mounts | grep " $MOUNTPOINT " | cut -d' ' -f1`
-    	if [ -b "$DEVICE" ]; then
-      	  blockdevice=yes
-	fi
-	;;
-  esac
-}
-
-# Lists all filesystems potentially mounted under a given path,
-# excluding the path itself.
-list_submounts() {
-  list_mounts | grep " $1/" | cut -d' ' -f2 | sort -r
-}
-
-ocfs2_cleanup() {
-	# We'll never see the post-stop notification. We're gone now,
-	# have unmounted, and thus should remove the membership.
-	#
-	# (Do so regardless of whether we were unmounted already,
-	# because the admin might have manually unmounted but not
-	# cleared up the membership directory. Bad admin, no cookie.)
-	#
-	if [ ! -d "$OCFS2_FS_ROOT" ]; then
-		ocf_log info "$OCFS2_FS_ROOT: Filesystem membership already gone."
-	else
-		ocf_log info "$OCFS2_FS_ROOT: Removing membership directory."
-		rm -rf $OCFS2_FS_ROOT/
-	fi
-}
-
-ocfs2_init()
-{
-	# Check & initialize the OCFS2 specific variables.
-	if [ -z "$OCF_RESKEY_CRM_meta_clone_max" ]; then
-		ocf_log err "ocfs2 must be run as a clone."
-		exit $OCF_ERR_GENERIC
-	fi
-
-	if [ $blockdevice = "no" ]; then
-		ocf_log err "$DEVICE: ocfs2 needs a block device instead."
-		exit $OCF_ERR_GENERIC
-	fi
-	
-	for f in "$OCF_RESKEY_ocfs2_configfs" /sys/kernel/config/cluster /configfs/cluster ; do
-		if [ -n "$f" -a -d "$f" ]; then
-			OCFS2_CONFIGFS="$f"
-			break
-		fi
-	done
-	if [ ! -d "$OCFS2_CONFIGFS" ]; then
-		ocf_log err "ocfs2 needs configfs mounted."
-		exit $OCF_ERR_GENERIC
-	fi
-
-	OCFS2_UUID=$(mounted.ocfs2 -d $DEVICE|tail -1|awk '{print $3}'|tr -d -- -|tr a-z A-Z)
-	if [ -z "$OCFS2_UUID" -o "$OCFS2_UUID" = "UUID" ]; then
-		ocf_log err "$DEVICE: Could not determine ocfs2 UUID."
-		exit $OCF_ERR_GENERIC
-	fi
-	
-	if [ -n "$OCF_RESKEY_ocfs2_cluster" ]; then
-		OCFS2_CLUSTER=$(echo $OCF_RESKEY_ocfs2_cluster | tr a-z A-Z)
-	else
-		OCFS2_CLUSTER=$(find "$OCFS2_CONFIGFS" -maxdepth 1 -mindepth 1 -type d -printf %f 2>/dev/null)
-		set -- $OCFS2_CLUSTER
-		local n="$#"
-		if [ $n -gt 1 ]; then
-			ocf_log err "$OCFS2_CLUSTER: several clusters found."
-			exit $OCF_ERR_GENERIC
-		fi
-		if [ $n -eq 0 ]; then
-			ocf_log err "$OCFS2_CONFIGFS: no clusters found."
-			exit $OCF_ERR_GENERIC
-		fi
-	fi
-
-	OCFS2_CLUSTER_ROOT="$OCFS2_CONFIGFS/$OCFS2_CLUSTER"
-	if [ ! -d "$OCFS2_CLUSTER_ROOT" ]; then
-		ocf_log err "$OCFS2_CLUSTER: Cluster doesn't exist. Maybe o2cb hasn't been run?"
-		exit $OCF_ERR_GENERIC
-	fi
-	
-	OCFS2_FS_ROOT=$OCFS2_CLUSTER_ROOT/heartbeat/$OCFS2_UUID
-}
-
-#
-# START: Start up the filesystem
-#
-Filesystem_start()
-{
-	if [ "$FSTYPE" = "ocfs2" ]; then
-		# "start" now has the notification data available; that
-		# we're being started means we didn't get the
-		# pre-notification, because we weren't running, so
-		# process the information now first.
-		ocf_log info "$OCFS2_UUID: Faking pre-notification on start."
-		OCF_RESKEY_CRM_meta_notify_type="pre"
-		OCF_RESKEY_CRM_meta_notify_operation="start"
-		Filesystem_notify
-	fi		
-
-	# See if the device is already mounted.
-	if Filesystem_status >/dev/null 2>&1 ; then
-	    ocf_log info "Filesystem $MOUNTPOINT is already mounted."
-	    return $OCF_SUCCESS
-	fi
-
-	# Insert SCSI module
-	# TODO: This probably should go away. Why should the filesystem
-	# RA magically load a kernel module?
-	$MODPROBE scsi_hostadapter >/dev/null 2>&1
-
-	if [ -z $FSTYPE ]; then
-	    : No $FSTYPE specified, rely on the system has the right file-system support already 
-	else
-	    # Insert Filesystem module
-	    $MODPROBE $FSTYPE >/dev/null 2>&1
-	    grep -e "$FSTYPE"'$' /proc/filesystems >/dev/null
-	    if [ $? != 0  ] ; then
-		ocf_log err "Couldn't find filesystem $FSTYPE in /proc/filesystems"
-		return $OCF_ERR_ARGS
-	    fi
-	fi
-
-	# Check the filesystem & auto repair.  
-	# NOTE: Some filesystem types don't need this step...  Please modify
-	#       accordingly
-
-    if [ $blockdevice = "yes" ]; then
-	if [ ! -b "$DEVICE" ] ; then
-		ocf_log err "Couldn't find device [$DEVICE]. Expected /dev/??? to exist"
-		exit $OCF_ERR_ARGS
-	fi
-
-	if
-	  case $FSTYPE in
-	    ext3|reiserfs|reiser4|nss|xfs|jfs|vfat|fat|nfs|cifs|smbfs|ocfs2)	false;;
-	    *)				true;;
-	  esac
-        then
-	  ocf_log info  "Starting filesystem check on $DEVICE"
-	  if [ -z $FSTYPE ]; then
-		$FSCK -a $DEVICE
-	  else
-		$FSCK -t $FSTYPE -a $DEVICE
-	  fi
-	
-	  # NOTE: if any errors at all are detected, it returns non-zero
-	  # if the error is >= 4 then there is a big problem
-	  if
-	    [ $? -ge 4 ]
-	  then
-	    ocf_log err "Couldn't sucessfully fsck filesystem for $DEVICE"
-	    return $OCF_ERR_GENERIC	
-	  fi	
-	fi
-    fi
-
-	if [ ! -d "$MOUNTPOINT" ] ; then
-		ocf_log err "Couldn't find directory  [$MOUNTPOINT] to use as a mount point"
-		exit $OCF_ERR_ARGS
-	fi
-
-	flushbufs $DEVICE
-	# Mount the filesystem.
-	if [ -z $FSTYPE ]; then
-	  $MOUNT $options $DEVICE $MOUNTPOINT
-	else
-	  $MOUNT -t $FSTYPE $options $DEVICE $MOUNTPOINT
-        fi
-
-        if [ $? -ne 0 ]; then
-	  ocf_log err "Couldn't mount filesystem $DEVICE on $MOUNTPOINT"
-	  if [ "$FSTYPE" = "ocfs2" ]; then
-	  	ocfs2_cleanup
-	  fi
-	  return $OCF_ERR_GENERIC
-	fi
-
-	return 0
-}
-# end of Filesystem_start
-
-Filesystem_notify() {
-	# Process notifications; this is the essential glue level for
-	# giving user-space membership events to a cluster-aware
-	# filesystem. Right now, only OCFS2 is supported.
-	#
-	# When we get a pre-start notification, we set up all the nodes
-	# which will be active in our membership for the filesystem.
-	# (For the resource to be started, this happens at the time of
-	# the actual 'start' operation.)
-	#
-	# At a post-start, actually there's nothing to do for us really,
-	# but no harm done in re-syncing either.
-	#
-	# pre-stop is meaningless; we can't remove any node yet, it
-	# first needs to unmount.
-	#
-	# post-stop: the node is removed from the membership of the
-	# other nodes.
-	# 
-	# Note that this expects that the base cluster is already
-	# active; ie o2cb has been started and populated
-	# $OCFS2_CLUSTER_ROOT/node/ already. This can be achieved by
-	# simply having o2cb run on all nodes by the CRM too.  This
-	# probably ought to be mentioned somewhere in the to be written
-	# documentation. ;-)
-	#
-
-	if [ "$FSTYPE" != "ocfs2" ]; then
-		# One of the cases which shouldn't occur; it should have
-		# been caught much earlier. Still, you know ...
-		ocf_log err "$DEVICE: Notification received for non-ocfs2 mount."
-		return $OCF_ERR_GENERIC
-	fi
-
-	local n_type="$OCF_RESKEY_CRM_meta_notify_type"
-	local n_op="$OCF_RESKEY_CRM_meta_notify_operation"
-	local n_active="$OCF_RESKEY_CRM_meta_notify_active_uname"
-	local n_stop="$OCF_RESKEY_CRM_meta_notify_stop_uname"
-	local n_start="$OCF_RESKEY_CRM_meta_notify_start_uname"
-
-	ocf_log info "$OCFS2_UUID: notify: $n_type for $n_op"
-	ocf_log info "$OCFS2_UUID: notify active: $n_active"
-	ocf_log info "$OCFS2_UUID: notify stop: $n_stop"
-	ocf_log info "$OCFS2_UUID: notify start: $n_start"
-
-	case "$n_type" in
-	pre)
-		case "$n_op" in
-		stop)
-			ocf_log info "$OCFS2_UUID: ignoring pre-notify for stop."
-			return $infoUCCESS
-			;;
-		start)
-			# These are about to become active; prepare to
-			# communicate with them.
-			n_active="$n_active $n_start"
-			;;
-		esac
-		;;
-	post)
-		case "$n_op" in
-		stop)
-			# remove unames from notify_stop_uname; these have been
-			# stopped and can no longer be considered active.
-			for UNAME in "$n_stop"; do
-				n_active="${n_active//$UNAME/}"
-			done
-			;;
-		start)
-			if [ "$n_op" = "start" ]; then
-				ocf_log info "$OCFS2_UUID: ignoring post-notify for start."
-				return $OCF_SUCCESS
-			fi
-			;;
-		esac
-		;;
-	esac
-	
-	ocf_log info "$OCFS2_UUID: post-processed active: $n_active"
-
-	local n_myself=${HA_CURHOST:-$(uname -n | tr A-Z a-z)}
-	ocf_log info "$OCFS2_UUID: I am node $n_myself."
-
-	case " $n_active " in
-	*" $n_myself "*) ;;
-	*)	ocf_log err "$OCFS2_UUID: $n_myself (local) not on active list!"
-		return $OCF_ERR_GENERIC
-		;;
-	esac
-
-	if [ -d "$OCFS2_FS_ROOT" ]; then
-	entry_prefix=$OCFS2_FS_ROOT/
-	for entry in $OCFS2_FS_ROOT/* ; do
-		n_fs="${entry##$entry_prefix}"
-#		ocf_log info "$OCFS2_UUID: Found current node $n_fs"
-		case " $n_active " in
-		*" $n_fs "*)
-			# Construct a list of nodes which are present
-			# already in the membership.
-			n_exists="$n_exists $n_fs"
-			ocf_log info "$OCFS2_UUID: Keeping node: $n_fs"
-			;;
-		*)
-			# Node is in the membership currently, but not on our 
-			# active list. Must be removed.
-			if [ "$n_op" = "start" ]; then
-				ocf_log warn "$OCFS2_UUID: Removing nodes on start"
-			fi
-			ocf_log info "$OCFS2_UUID: Removing dead node: $n_fs"
-			if ! rm -f $entry ; then
-				ocf_log err "$OCFS2_UUID: Removal of $n_fs failed!"
-			fi
-			;;
-		esac
-	done
-	else
-		ocf_log info "$OCFS2_UUID: heartbeat directory doesn't exist yet, creating."
-		mkdir -p $OCFS2_FS_ROOT
-	fi
-
-	ocf_log info "$OCFS2_UUID: Existing node list: $n_exists"
-	
-	# (2)
-	for entry in $n_active ; do
-#		ocf_log info "$OCFS2_UUID: Expected active node: $entry"
-		case " $n_exists " in
-		*" $entry "*)
-			ocf_log info "$OCFS2_UUID: Already active: $entry"
-			;;
-		*)
-			if [ "$n_op" = "stop" ]; then
-				ocf_log warn "$OCFS2_UUID: Adding nodes on stop"
-			fi
-			ocf_log info "$OCFS2_UUID: Activating node: $entry"
-			if ! ln -s $OCFS2_CLUSTER_ROOT/node/$entry $OCFS2_FS_ROOT/$entry ; then
-				ocf_log err "$OCFS2_CLUSTER_ROOT/node/$entry: failed to link"
-			fi
-			;;
-		esac
-	done
-}
-
-#
-# STOP: Unmount the filesystem
-#
-Filesystem_stop()
-{
-  # See if the device is currently mounted
-  Filesystem_status >/dev/null 2>&1
-  if [ $? -ne $OCF_NOT_RUNNING ]; then
-    # Determine the real blockdevice this is mounted on (if
-    # possible) prior to unmounting.
-    determine_blockdevice
-    
-    # For networked filesystems, there's merit in trying -f:
-    case "$FSTYPE" in
-      nfs|cifs|smbfs) umount_force="-f" ;;
-    esac
-    
-    # Umount all sub-filesystems mounted under $MOUNTPOINT/ too.
-    for SUB in `list_submounts $MOUNTPOINT` $MOUNTPOINT; do
-      ocf_log info "Trying to unmount $MOUNTPOINT"
-      for sig in SIGTERM SIGTERM SIGTERM SIGKILL SIGKILL SIGKILL; do
-      	if $UMOUNT $umount_force $SUB ; then
-          rc=$OCF_SUCCESS
-      	  ocf_log info "unmounted $SUB successfully"
-	  break
-      	else
-          rc=$OCF_ERR_GENERIC
-          ocf_log err "Couldn't unmount $SUB; trying cleanup with $sig"
-          # fuser returns a non-zero return code if none of the
-          # specified files is accessed or in case of a fatal 
-          # error.
-          if $FUSER -$sig -m -k $SUB ; then
-	    ocf_log info "Some processes on $SUB were signalled"
-	  else
-	    ocf_log info "No processes on $SUB were signalled"
-          fi
-          sleep 1
-      	fi
-      done
-      
-      if [ $rc -ne $OCF_SUCCESS ]; then
-      	ocf_log err "Couldn't unmount $SUB, giving up!"
-      fi
-    done
-  else
-    # Already unmounted, wonderful.
-    rc=$OCF_SUCCESS
-  fi
-  
-  flushbufs $DEVICE
-  
-  if [ "$FSTYPE" = "ocfs2" ]; then
-    ocfs2_cleanup
-  fi
-  
-  return $rc
-}
-# end of Filesystem_stop
-
-#
-# STATUS: is the file system mounted and the SAN path alive?
-#
-Filesystem_status_qla_monitor()
-{
-  Filesystem_status >/dev/null 2>&1
-  ORIG_RET=$?
-  if [ $ORIG_RET -eq $OCF_SUCCESS ]; then
-    # the fs is mounted.  Are the paths ok?
-    /usr/bin/qla-monitor.pl --device $DEVICE
-    if [ $? -ne 0 ]; then
-      # log as much as we can
-      ocf_log info "Error: $DEVICE is dead."
-      echo "Error: $DEVICE is dead on node `hostname`, failing over" >> /var/log/pvfs2/pvfs2-failover.log;
-      /usr/bin/fs-instance-alarm.pl --fs-name $fsname --ce `hostname` --type PVFS2_HA --msg "$DEVICE is dead, failing over."
-      /usr/bin/fs-power-control.pl --fs-name $fsname --conf-dir $conf_dir --host `hostname` --command reboot
-      # shoot ourselves in the head
-      return $OCF_ERR_GENERIC
-    else
-      return $ORIG_RET
-    fi    
-  fi
-  return $ORIG_RET
-}
-# end of Filesystem_status_qla_monitor
-
-#
-# STATUS: is the filesystem mounted or not?
-#
-Filesystem_status()
-{
-	if
-	  list_mounts | grep -q " $MOUNTPOINT " >/dev/null 2>&1
-        then
-          rc=$OCF_SUCCESS
-          msg="$MOUNTPOINT is mounted (running)"
-        else
-          rc=$OCF_NOT_RUNNING
-          msg="$MOUNTPOINT is unmounted (stopped)"
-        fi
-
-	# TODO: For ocfs2, or other cluster filesystems, should we be
-	# checking connectivity to other nodes here, or the IO path to
-	# the storage?
-	
-        case "$OP" in
-	  status)	ocf_log info "$msg";;
-	esac
-        return $rc
-}
-# end of Filesystem_status
-
-#
-# VALIDATE_ALL: Are the instance parameters valid?
-#	FIXME!!  The only part that's useful is the return code.
-#	This code always returns $OCF_SUCCESS (!)
-#
-Filesystem_validate_all()
-{
-	if [ -n $MOUNTPOINT -a ! -d $MOUNTPOINT ]; then
-	    ocf_log warn "Mountpoint $MOUNTPOINT does not exist"
-	fi
-
-# Check if the $FSTYPE is workable
-# NOTE: Without inserting the $FSTYPE module, this step may be imprecise
-# TODO: This is Linux specific crap.
-	if [ ! -z $FSTYPE ]; then
-	    cut -f2 /proc/filesystems |grep -q ^$FSTYPE$
-	    if [ $? -ne 0 ]; then
-		modpath=/lib/modules/`uname -r` 
-		moddep=$modpath/modules.dep
-		# Do we have $FSTYPE in modules.dep?
-		cut -d' ' -f1 $moddep |grep -q "^$modpath.*$FSTYPE\.k\?o:$"
-		if [ $? -ne 0 ]; then
-		    ocf_log info "It seems we do not have $FSTYPE support"
-		fi
-	    fi
-	fi
-
-#TODO: How to check the $options ?
-
-	return $OCF_SUCCESS
-}
-
-# Check the arguments passed to this script
-if
-  [ $# -ne 1 ]
-then
-  usage
-  exit $OCF_ERR_ARGS
-fi
-
-if 
-  [ -z "$OCF_RESKEY_fsname" ]
-then
-  ocf_log err "Filesystem-qla-monitor must specify fsname!"
-#  usage
-  exit $OCF_ERR_GENERIC
-fi
-
-if 
-  [ -z "$OCF_RESKEY_conf_dir" ]
-then
-  ocf_log err "Filesystem-qla-monitor must specify conf_dir!"
-#  usage
-  exit $OCF_ERR_GENERIC
-fi
-
-# Check the OCF_RESKEY_ environment variables...
-DEVICE=$OCF_RESKEY_device
-FSTYPE=$OCF_RESKEY_fstype
-if [ ! -z "$OCF_RESKEY_options" ]; then
-	options="-o $OCF_RESKEY_options"
-fi
-fsname=$OCF_RESKEY_fsname
-conf_dir=$OCF_RESKEY_conf_dir
-
-OP=$1
-
-# These operations do not require instance parameters
-case $OP in
-  meta-data)		meta_data
-			exit $OCF_SUCCESS
-			;;
-  usage)		usage
-			exit $OCF_SUCCESS
-			;;
-esac
-
-blockdevice=no
-case $DEVICE in
-  "")	ocf_log err "Please set OCF_RESKEY_device to the device to be managed"
-	exit $OCF_ERR_ARGS
-	;;
-  -*) # Oh... An option to mount instead...  Typically -U or -L
-	;;
-  [^/]*:/*)	# An NFS filesystem specification...
-	;;
-  //[^/]*/*)	# An SMB filesystem specification...
-	;;
-  *)	if [ ! -b "$DEVICE"  -a "X$OP" != Xstart ] ; then
-	  ocf_log warn "Couldn't find device [$DEVICE]. Expected /dev/??? to exist"
-	fi
-	blockdevice=yes
-	;;
-esac
-
-case $FSTYPE in
-  ocfs2)
-	ocfs2_init
-  ;;
-  nfs)
-	: # this is kind of safe too
-  ;;
-  *) 
-	if [ -n "$OCF_RESKEY_CRM_meta_clone_max" ]; then
-		ocf_log err "DANGER! $FSTYPE on $DEVICE is NOT cluster-aware!"
-		ocf_log err "DO NOT RUN IT AS A CLONE!"
-		ocf_log err "Politely refusing to proceed to avoid data corruption."
-		exit $OCF_ERR_GENERIC	
-	fi
-  ;;
-esac
-
-# It is possible that OCF_RESKEY_directory has one or even multiple trailing "/".
-# But the output of `mount` and /proc/mounts do not.
-if [ -z $OCF_RESKEY_directory ]; then
-    if [ X$OP = "Xstart" -o $blockdevice = "no" ]; then
-	ocf_log err "Please specify the directory"
-	exit $OCF_ERR_ARGS 
-    fi
-else
-    MOUNTPOINT=$(echo $OCF_RESKEY_directory | sed 's/\/*$//')
-    : ${MOUNTPOINT:=/}
-    # At this stage, $MOUNTPOINT does not contain trailing "/" unless it is "/"
-    # TODO: / mounted via Filesystem sounds dangerous. On stop, we'll
-    # kill the whole system. Is that a good idea?
-fi
-	
-# Check to make sure the utilites are found
-check_util $MODPROBE
-check_util $FSCK
-check_util $FUSER
-check_util $MOUNT
-check_util $UMOUNT
-
-if [ "$OP" != "monitor" ]; then
-	ocf_log info "Running $OP for $DEVICE on $MOUNTPOINT"
-fi
-
-case $OP in
-  start)		Filesystem_start
-			;;
-  notify)		Filesystem_notify
-			;;
-  stop)			Filesystem_stop
-			;;
-  status|monitor)	Filesystem_status_qla_monitor
-			;;
-  validate-all)		Filesystem_validate_all
-			;;
-  *)			usage
-			exit $OCF_ERR_UNIMPLEMENTED
-			;;
-esac
-exit $?

--- PVFS2-notify	2008-06-24 11:01:13.000000000 -0400
+++ /dev/null	2004-06-24 14:04:38.000000000 -0400
@@ -1,260 +0,0 @@
-#!/bin/sh
-#
-# Resource script for PVFS2_notify
-#
-# Provides a generic hook for sending notifications if a PVFS2 resource is
-# failed over to another node.
-#
-# Based on MailTo script by Alan Robertson <alanr at unix.sh>
-#
-# Description: Logs a message whenever a resource group starts or stops.
-#
-#	  OCF parameters are as below:
-#               OCF_RESKEY_conf_dir
-#               OCF_RESKEY_title
-#               OCF_RESKEY_firsthost
-#
-# License:  GNU General Public License (GPL)
-
-VARRUN=/var/run
-MAILTOFILE=$VARRUN/PVFS2_notify
-#######################################################################
-# Initialization:
-
-# newer versions of heartbeat have moved the ocf-shellfuncs  file
-if [ -f /usr/lib/ocf/resource.d/heartbeat/.ocf-shellfuncs ] ; then
-. /usr/lib/ocf/resource.d/heartbeat/.ocf-shellfuncs
-else
-. /usr/lib/heartbeat/ocf-shellfuncs
-fi
-
-#######################################################################
-
-ARGS="$0 $*"
-
-us=`uname -n`
-
-usage() {
-  echo "Usage: $0 {start|stop|status|monitor|meta-data|validate-all}"
-}
-
-meta_data() {
-	cat <<END
-<?xml version="1.0"?>
-<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
-<resource-agent name="PVFS2_notify">
-<version>1.0</version>
-
-<longdesc lang="en">
-This is a resource agent for PVFS2_notify. It logs or performs notification when a takeover occurs.
-</longdesc>
-<shortdesc lang="en">PVFS2_notify resource agent</shortdesc>
-
-<parameters>
-<parameter name="firsthost" unique="0">
-<longdesc lang="en">
-Original host for this resource
-</longdesc>
-<shortdesc lang="en">Original host for this resource</shortdesc>
-<content type="string" default="" />
-</parameter>
-
-<parameter name="title" unique="0">
-<longdesc lang="en">
-Title/identifier for the notification.
-</longdesc>
-<shortdesc lang="en">Subject</shortdesc>
-<content type="string" default="" />
-</parameter>
-
-<parameter name="conf_dir" unique="0">
-<longdesc lang="en">
-Configuration directory for file system (PVFS2)
-</longdesc>
-<shortdesc lang="en">Configuration Directory</shortdesc>
-<content type="string" default="" />
-</parameter>
-
-<parameter name="fsname" unique="0">
-<longdesc lang="en">
-Name of file system (PVFS2)
-</longdesc>
-<shortdesc lang="en">Name of file system</shortdesc>
-<content type="string" default="" />
-</parameter>
-
-</parameters>
-
-<actions>
-<action name="start" timeout="10" />
-<action name="stop" timeout="10" />
-<action name="status" depth="0" timeout="10" interval="10" start-delay="10" />
-<action name="monitor" depth="0" timeout="10" interval="10" start-delay="10" />
-<action name="meta-data" timeout="5" />
-<action name="validate-all" timeout="5" />
-</actions>
-</resource-agent>
-END
-}
-
-MailProgram() {
-	mail -s "$1" "$email"  <<EOF
-        $Subject
- 
-        Command line was:
-        $ARGS
-EOF
-	return $?
-}
-
-SubjectLine() {
-  case $1 in
-    ??*)	echo $1;;
-    *)		echo "Resource Group";;
-  esac
-}
-
-
-PVFS2_notifyStart() {
-	if [ -f ${conf_dir}/pvfs2-notify-quiet.flag ]
-	then
-		rm ${conf_dir}/pvfs2-notify-quiet.flag
-		touch $MAILTOFILE
-		return 0
-	fi
-
-	if [ "$us" == "$firsthost" ]
-	then 
-		Subject="`SubjectLine $title` starting at `date` on its normal compute element $us"
-	else
-		Subject="`SubjectLine $title` starting at `date` on failover compute element $us (resource normally runs on $firsthost)"
-		`/usr/bin/fs-instance-alarm.pl --fs-name $fsname --ce $firsthost --type PVFS2_HA --msg "$title from $firsthost is starting on failover ce $us"`
-	fi
-
-	#MailProgram "$Subject" $1
-	logger -t PVFS2 "$Subject"
-	
-	touch $MAILTOFILE
-	return $?
-}
-
-PVFS2_notifyStop () {
-	if [ -f ${conf_dir}/pvfs2-notify-quiet.flag ]
-	then
-		rm ${conf_dir}/pvfs2-notify-quiet.flag
-		rm -f $MAILTOFILE
-		return 0
-	fi
-
-	Subject="`SubjectLine $title` stopping at `date` on $us"
-
-	#MailProgram "$Subject" $1
-	logger -t PVFS2 "$Subject"
-	rm -f $MAILTOFILE
-	return $?
-}
-
-PVFS2_notifyStatus () {
-	ocf_log warn "Don't stat/monitor me! PVFS2_notify is a pseudo resource agent, so the status reported may be incorrect"
-
-	if [ -f $MAILTOFILE ]; then
-		echo "running"
-		return $OCF_SUCCESS
-	else
-		echo "stopped"
-		return $OCF_NOT_RUNNING
-	fi
-}
-
-PVFS2_notifyValidateAll () {
-
-# $email may be a list of mail addresses separated by "," and " " and "\t"
-# normalize it for ease of parse
-#	local local_email=`echo $email | tr ",\t" " " | tr -s " "`
-
-#	ocf_log info "[$local_email]"
-#	for item in "$local_email"
-#	do
-#	    case $item in
-#		*?@?*)
-#		;; #possible valid email address
-#		*)
-#		getent passwd $item >/dev/null
-#		if [ $? -eq 0 ]; then
-#		: OK, mail to $item at localhost.localdomain
-#		else
-#		    ocf_log err "Invalid email address [$email]"
-#		    exit $OCF_ERR_ARGS
-#		fi
-#		;;
-#	    esac
-#	done
-
-# Any title is OK
-
-	return $OCF_SUCCESS
-}
-
-# 
-# See how we were called.
-#
-#	The order in which heartbeat provides arguments to resource
-#	scripts is broken.  It should be fixed.
-#
-
-if
-  ( [ $# -ne 1 ] )
-then
-  usage
-  exit $OCF_ERR_GENERIC
-fi
-
-case $1 in
-  meta-data)		meta_data
-			exit $OCF_SUCCESS
-			;;
-	#	Not quite sure what to do with this one...
-	#	We aren't a continuously running service - so it's not clear
-	#
-  status|monitor)	PVFS2_notifyStatus
-			exit $?
-			;;
-  usage)		usage
-			exit $OCF_SUCCESS
-			;;
-  *)			;;
-esac
-
-if 
-  [ -z "$OCF_RESKEY_conf_dir" ]
-then
-  ocf_log err "PVFS2-notify must specify conf_dir!"
-#  usage
-  exit $OCF_ERR_GENERIC
-fi
-
-if 
-  [ -z "$OCF_RESKEY_fsname" ]
-then
-  ocf_log err "PVFS2-notify must specify fsname!"
-#  usage
-  exit $OCF_ERR_GENERIC
-fi
-
-conf_dir=$OCF_RESKEY_conf_dir
-fsname=$OCF_RESKEY_fsname
-title=$OCF_RESKEY_title
-firsthost=$OCF_RESKEY_firsthost
-
-case $1 in
-  start)		PVFS2_notifyStart
-			;;
-  stop)			PVFS2_notifyStop
-			;;
-  validate-all)		PVFS2_notifyValidateAll
-			;;
-  *)			usage
-			exit $OCF_ERR_UNIMPLEMENTED
-			;;
-esac
-exit $?

--- apc-switched-pdu-hybrid-control.pl	2008-06-24 11:01:13.000000000 -0400
+++ /dev/null	2004-06-24 14:04:38.000000000 -0400
@@ -1,138 +0,0 @@
-#!/usr/bin/perl 
-
-# requires APC MIB file, which is available for download from APC's web site
-
-# this script will first attempt to use SNMP to send power control commands,
-# and then fail back to using SSH
-
-use strict;
-use Getopt::Long;
-use File::Find;
-use File::Path;
-use POSIX qw(setsid);
-use Socket;
-
-my $host;
-my $ssh_user;
-my $ssh_pass; 
-my $snmp_user;
-my $snmp_pass;
-my $outlet;
-my $cmd;
-
-my $snmp_command;
-
-&process_args;
-
-if($cmd eq "on")
-{
-   $snmp_command = "snmpset -v3 -a MD5 -l authNoPriv -u $snmp_user -A $snmp_pass -m \"/var/lib/filesystems/powernet387.mib\" $host PowerNet-MIB::rPDUOutletControlOutletCommand.$outlet = 1";
-}
-elsif($cmd eq "off")
-{
-   $snmp_command = "snmpset -v3 -a MD5 -l authNoPriv -u $snmp_user -A $snmp_pass -m \"/var/lib/filesystems/powernet387.mib\" $host PowerNet-MIB::rPDUOutletControlOutletCommand.$outlet = 2";
-}
-elsif($cmd eq "reboot")
-{
-   $snmp_command = "snmpset -v3 -a MD5 -l authNoPriv -u $snmp_user -A $snmp_pass -m \"/var/lib/filesystems/powernet387.mib\" $host PowerNet-MIB::rPDUOutletControlOutletCommand.$outlet = 3";
-}
-else
-{
-   die("Error: $cmd is not a valid outlet command.\n");
-}
-
-# try snmp first
-my $snmp_output = `$snmp_command 2>&1`;
-if ( $? == 0 )
-{
-   exit 0;
-}
-
-# fall back to ssh
-my $ssh_command = "/usr/bin/apc-switched-pdu-ssh-control.exp $host $ssh_user $ssh_pass $outlet $cmd";
-
-my $ssh_output = `$ssh_command 2>&1`;
-if ( $? == 0 )
-{
-   exit 0;
-}
-
-# if we reach this point, then neither worked
-print "Error: failed to contact APC unit.\n";
-print "SNMP output: $snmp_output";
-print "SSH output: $ssh_output";
-
-exit 1;
-
-sub process_args
-{
-   # Parse the command line options
-   # For a description of the command line options see &print_help
-   use vars qw( $opt_help $opt_host $opt_ssh_user $opt_ssh_pass $opt_snmp_user $opt_snmp_pass $opt_outlet $opt_cmd);
-
-   Getopt::Long::Configure( "no_ignore_case", "bundling");
-   GetOptions( "help",
-               "host=s",
-               "ssh-user=s",
-               "ssh-pass=s",
-               "snmp-user=s",
-               "snmp-pass=s",
-               "outlet=i",
-               "cmd=s");
-
-   if ($opt_help)
-   {
-      &print_help;
-      exit(0);
-   }
-
-   if(!$opt_host || !$opt_ssh_user || !$opt_ssh_pass || 
-      !$opt_snmp_user || !$opt_snmp_pass || !$opt_outlet || !$opt_cmd)
-   {
-      &print_help;
-      die "Error: missing arguments.\n";
-   }
-
-   $host = $opt_host;
-   $ssh_user = $opt_ssh_user;
-   $ssh_pass = $opt_ssh_pass; 
-   $snmp_user = $opt_snmp_user;
-   $snmp_pass = $opt_snmp_pass;
-   $outlet = $opt_outlet;
-   $cmd = $opt_cmd;
-}
-
-
-# --------------- print help information ------------------------------
-sub print_help {
-
-   print <<EOF;
-
-This script will control a single outlet on an APC power strip.  It will 
-first attempt communication via SNMP and then fall back to ssh if that fails.
-
-usage: apc-switched-pdu-hybrid-control.pl <options>
-
-options:
-   --help                   print this help and exit
-   --host        <STRING>   hostname of APC unit
-   --ssh-user    <STRING>   ssh username for APC unit
-   --ssh-pass    <STRING>   ssh password for APC unit
-   --snmp-user   <STRING>   SNMP username for APC unit
-   --snmp-pass   <STRING>   SNMP authentication pass phrase (MD5) for APC unit
-   --outlet      <INTEGER>  APC outlet to control
-   --cmd         <on|off|reboot> control command to send (on, off, or reboot)
-
-EOF
-}
-
-# Local variables:
-#  c-basic-offset: 3
-#  perl-indent-level: 3
-#  tab-width: 3
-#  indent-tabs-mode: nil
-#  shiftwidth: 3
-# End:
-#
-# vim: ts=3 expandtab
-

--- apc-switched-pdu-hybrid-monitor.pl	2008-06-24 11:01:13.000000000 -0400
+++ /dev/null	2004-06-24 14:04:38.000000000 -0400
@@ -1,116 +0,0 @@
-#!/usr/bin/perl 
-
-# requires APC MIB file, which is available for download from APC's web site
-
-# this script will first attempt to use SNMP to monitor a power strip,
-# and then fail back to using SSH
-
-use strict;
-use Getopt::Long;
-use File::Find;
-use File::Path;
-use POSIX qw(setsid);
-use Socket;
-
-my $host;
-my $ssh_user;
-my $ssh_pass; 
-my $snmp_user;
-my $snmp_pass;
-
-&process_args;
-
-# try snmp first
-my $snmp_command = "snmpstatus -v3 -a MD5 -l authNoPriv -u $snmp_user -A $snmp_pass $host";
-
-my $snmp_output = `$snmp_command 2>&1`;
-if ( $? == 0 )
-{
-   # print "Success, snmp\n";
-   exit 0;
-}
-
-# fall back to ssh
-my $ssh_command = "/usr/bin/apc-switched-pdu-ssh-monitor.exp $host $ssh_user $ssh_pass";
-
-my $ssh_output = `$ssh_command 2>&1`;
-if ( $? == 0 )
-{
-   # print "Success, ssh\n";
-   exit 0;
-}
-
-# if we reach this point, then neither worked
-print "Error: failed to contact APC unit.\n";
-print "SNMP output: $snmp_output";
-print "SSH output: $ssh_output";
-
-exit 1;
-
-sub process_args
-{
-   # Parse the command line options
-   # For a description of the command line options see &print_help
-   use vars qw( $opt_help $opt_host $opt_ssh_user $opt_ssh_pass $opt_snmp_user $opt_snmp_pass);
-
-   Getopt::Long::Configure( "no_ignore_case", "bundling");
-   GetOptions( "help",
-               "host=s",
-               "ssh-user=s",
-               "ssh-pass=s",
-               "snmp-user=s",
-               "snmp-pass=s");
-
-   if ($opt_help)
-   {
-      &print_help;
-      exit(0);
-   }
-
-   if(!$opt_host || !$opt_ssh_user || !$opt_ssh_pass || 
-      !$opt_snmp_user || !$opt_snmp_pass)
-   {
-      &print_help;
-      die "Error: missing arguments.\n";
-   }
-
-   $host = $opt_host;
-   $ssh_user = $opt_ssh_user;
-   $ssh_pass = $opt_ssh_pass; 
-   $snmp_user = $opt_snmp_user;
-   $snmp_pass = $opt_snmp_pass;
-}
-
-
-# --------------- print help information ------------------------------
-sub print_help {
-
-   print <<EOF;
-
-This script will check an APC power control device to see if it is 
-responding.  It will first attempt communication via SNMP and then fall 
-back to ssh if that fails.
-
-usage: apc-switched-pdu-hybrid-monitor.pl <option>
-
-options:
-   --help                   print this help and exit
-   --host        <STRING>   hostname of APC unit
-   --ssh-user    <STRING>   ssh username for APC unit
-   --ssh-pass    <STRING>   ssh password for APC unit
-   --snmp-user   <STRING>   SNMP username for APC unit
-   --snmp-pass   <STRING>   SNMP authentication pass phrase (MD5) for APC unit
-
-EOF
-}
-
-# Local variables:
-#  c-basic-offset: 3
-#  perl-indent-level: 3
-#  tab-width: 3
-#  indent-tabs-mode: nil
-#  shiftwidth: 3
-# End:
-#
-# vim: ts=3 expandtab
-

--- apc-switched-pdu-hybrid-outlet-status.pl	2008-06-24 11:01:13.000000000 -0400
+++ /dev/null	2004-06-24 14:04:38.000000000 -0400
@@ -1,124 +0,0 @@
-#!/usr/bin/perl 
-
-# requires APC MIB file, which is available for download from APC's web site
-
-# this script will first attempt to use SNMP to send power control commands,
-# and then fail back to using SSH
-
-use strict;
-use Getopt::Long;
-use File::Find;
-use File::Path;
-use POSIX qw(setsid);
-use Socket;
-
-my $host;
-my $ssh_user;
-my $ssh_pass; 
-my $snmp_user;
-my $snmp_pass;
-my $outlet;
-
-my $snmp_command;
-
-&process_args;
-
-$snmp_command = "snmpget -v3 -a MD5 -l authNoPriv -u $snmp_user -A $snmp_pass -m \"/var/lib/filesystems/powernet387.mib\" $host PowerNet-MIB::rPDUOutletControlOutletCommand.$outlet";
-
-my $snmp_output = `$snmp_command 2>&1`;
-if ( $? == 0 )
-{
-   if($snmp_output =~ /immediateOn/)
-   {
-      print "On\n";
-   }
-   elsif($snmp_output =~ /immediateOff/)
-   {
-      print "Off\n";
-   }
-   else
-   {
-      print "Unknown\n";
-   }
-
-   exit 0;
-}
-
-# no fall back to ssh implemented in this script
-
-print "Error: failed to contact APC unit.\n";
-print "SNMP output: $snmp_output";
-print "SSH unsupported in this utility.\n";
-
-exit 1;
-
-sub process_args
-{
-   # Parse the command line options
-   # For a description of the command line options see &print_help
-   use vars qw( $opt_help $opt_host $opt_ssh_user $opt_ssh_pass $opt_snmp_user $opt_snmp_pass $opt_outlet);
-
-   Getopt::Long::Configure( "no_ignore_case", "bundling");
-   GetOptions( "help",
-               "host=s",
-               "ssh-user=s",
-               "ssh-pass=s",
-               "snmp-user=s",
-               "snmp-pass=s",
-               "outlet=i");
-
-   if ($opt_help)
-   {
-      &print_help;
-      exit(0);
-   }
-
-   if(!$opt_host || !$opt_ssh_user || !$opt_ssh_pass || 
-      !$opt_snmp_user || !$opt_snmp_pass || !$opt_outlet)
-   {
-      &print_help;
-      die "Error: missing arguments.\n";
-   }
-
-   $host = $opt_host;
-   $ssh_user = $opt_ssh_user;
-   $ssh_pass = $opt_ssh_pass; 
-   $snmp_user = $opt_snmp_user;
-   $snmp_pass = $opt_snmp_pass;
-   $outlet = $opt_outlet;
-}
-
-
-# --------------- print help information ------------------------------
-sub print_help {
-
-   print <<EOF;
-
-This script will check the status of a single outlet on an APC power strip.  
-It will only attempt communication via SNMP at this time (although it accepts
-arguments for ssh authentication for future use).
-
-usage: apc-switched-pdu-hybrid-outlet-status.pl <options>
-
-options:
-   --help                   print this help and exit
-   --host        <STRING>   hostname of APC unit
-   --ssh-user    <STRING>   ssh username for APC unit
-   --ssh-pass    <STRING>   ssh password for APC unit
-   --snmp-user   <STRING>   SNMP username for APC unit
-   --snmp-pass   <STRING>   SNMP authentication pass phrase (MD5) for APC unit
-   --outlet      <INTEGER>  APC outlet to control
-
-EOF
-}
-
-# Local variables:
-#  c-basic-offset: 3
-#  perl-indent-level: 3
-#  tab-width: 3
-#  indent-tabs-mode: nil
-#  shiftwidth: 3
-# End:
-#
-# vim: ts=3 expandtab
-

--- apc-switched-pdu-ssh-control.exp	2008-06-24 11:01:13.000000000 -0400
+++ /dev/null	2004-06-24 14:04:38.000000000 -0400
@@ -1,217 +0,0 @@
-#!/usr/bin/expect -f
-
-# expect script to login to a baytech management module and control power
-# to one of its outlets
-
-# gather command line arguments into variables
-set host [lrange $argv 0 0]   
-set user [lrange $argv 1 1] 
-set password [lrange $argv 2 2] 
-set outlet [lrange $argv 3 3]
-set command [lrange $argv 4 4]
-
-# complain if we don't get exactly 5 arguments
-if {$argc!=5} {
-	send_user "Usage: apc-switched-pdu-ssh-control.exp <host> <user> <password> <outlet> <cmd>\n"
-	send_user "   NOTE: <cmd> may be \"on\" \"off\" or \"reboot\"\n"
-	exit 1
-}
-
-set apc_command ""
-
-if { [string compare $command "on"] == 0 } {
-	set apc_command "1"
-}
-if { [string compare $command "off"] == 0 } {
-	set apc_command "2"
-}
-if { [string compare $command "reboot"] == 0 } {
-	set apc_command "3"
-}
-
-if { [string compare $apc_command ""] == 0 } {
-	send_error "Error: <cmd> must be one of on|off|reboot.\n"
-	exit 1
-}
-
-# use a 30 second timeout
-set timeout 30 
-
-# this disables showing interaction on stdout.  It should be commented
-# if you are trying to debug this script and want to see what it is doing
-log_user 0
-
-# delete old log file and start a new one
-#system rm -f /tmp/expect.log
-#log_file -a /tmp/expect.log
-
-# open ssh connection.  Turn off strict host checking so ssh doesn't ask us 
-# if it is ok to connect to this hostname
-spawn ssh "-oStrictHostKeyChecking no" $user@$host 
-
-# Look for passwod prompt
-expect {
-	"*?assword:*" {}
-	default {
-		# password prompt never showed up
-		send_user "failed to ssh to host $host\n"
-		exit 1
-	}
-}
-
-# Send password aka $password 
-send -- "$password\r"
-
-# look for top level prompt
-expect {
-	"> *" {}
-	default {
-		# our user name and password did not work
-		send_user "Error: host $host failed to accept username and password\n"
-		exit 1
-	}
-}
-
-send -- "1\r"
-
-expect {
-	"> *" {}
-	default {
-		# our user name and password did not work
-		send_user "Error: unable to control outlet\n"
-		exit 1
-	}
-}
-
-send -- "2\r"
-
-expect {
-	"> *" {}
-	default {
-		# our user name and password did not work
-		send_user "Error: unable to control outlet\n"
-		exit 1
-	}
-}
-
-send -- "1\r"
-
-while {1} {
-        expect {
-                "*to continue*" {send -- "\r"}
-                "> " {break }
-                default {}
-        }
-}
-
-send -- "$outlet\r"
-
-expect {
-	"> *" {}
-	default {
-		# our user name and password did not work
-		send_user "Error: unable to control outlet\n"
-		exit 1
-	}
-}
-
-send -- "1\r"
-
-expect {
-	"> *" {}
-	default {
-		# our user name and password did not work
-		send_user "Error: unable to control outlet\n"
-		exit 1
-	}
-}
-
-
-send -- "$apc_command\r"
-
-expect {
-	"*to continue*" {}
-	default {
-		# our user name and password did not work
-		send_user "Error: unable to control outlet\n"
-		exit 1
-	}
-}
-
-send -- "YES\r"
-
-while {1} {
-        expect {
-                "*to continue*" {send -- "\r"}
-                "> " {break }
-                default {}
-        }
-}
-
-send -- \003
-
-expect {
-	"> *" {}
-	default {
-		# our user name and password did not work
-		send_user "Error: unable to control outlet\n"
-		exit 1
-	}
-}
-
-send -- \003
-
-expect {
-	"> *" {}
-	default {
-		# our user name and password did not work
-		send_user "Error: unable to control outlet\n"
-		exit 1
-	}
-}
-
-send -- \003
-
-while {1} {
-        expect {
-                "*to continue*" {send -- "\r"}
-                "> " {break }
-                default {}
-        }
-}
-
-send -- \003
-
-expect {
-	"> *" {}
-	default {
-		# our user name and password did not work
-		send_user "Error: unable to control outlet\n"
-		exit 1
-	}
-}
-
-send -- \003
-
-expect {
-	"> *" {}
-	default {
-		# our user name and password did not work
-		send_user "Error: unable to control outlet\n"
-		exit 1
-	}
-}
-
-# send logout command
-send -- "4\r"
-
-expect {
-        eof {}
-        default {
-                send_user "Error: could not log out cleanly\n"
-                close
-                wait
-                exit 1
-        }
-}
-

--- apc-switched-pdu-ssh-monitor.exp	2008-06-24 11:01:13.000000000 -0400
+++ /dev/null	2004-06-24 14:04:38.000000000 -0400
@@ -1,65 +0,0 @@
-#!/usr/bin/expect -f
-
-# expect script to login to a baytech management module and control power
-# to one of its outlets
-
-# gather command line arguments into variables
-set host [lrange $argv 0 0]   
-set user [lrange $argv 1 1] 
-set password [lrange $argv 2 2] 
-
-# complain if we don't get exactly 5 arguments
-if {$argc!=3} {
-	send_user "Usage: apc-switched-pdu-ssh-monitor.exp <host> <user> <password>\n"
-	exit 1
-}
-
-# use a 30 second timeout
-set timeout 30 
-
-# this disables showing interaction on stdout.  It should be commented
-# if you are trying to debug this script and want to see what it is doing
-log_user 0
-
-# delete old log file and start a new one
-#system rm -f /tmp/expect.log
-#log_file -a /tmp/expect.log
-
-# open ssh connection.  Turn off strict host checking so ssh doesn't ask us 
-# if it is ok to connect to this hostname
-spawn ssh "-oStrictHostKeyChecking no" $user@$host 
-
-# Look for passwod prompt
-expect {
-	"*?assword:*" {}
-	default {
-		# password prompt never showed up
-		send_user "failed to ssh to host $host\n"
-		exit 1
-	}
-}
-
-# Send password aka $password 
-send -- "$password\r"
-# look for top level prompt
-expect {
-	"*> *" {}
-	default {
-		# our user name and password did not work
-		send_user "Error: host $host failed to accept username and password\n"
-		exit 1
-	}
-}
-
-# send logout command
-send -- "4\r"
-
-expect {
-        eof {}
-        default {
-                send_user "Error: could not log out cleanly\n"
-                close
-                wait
-                exit 1
-        }
-}

--- baytech-mgmt-control.exp	2008-06-24 11:01:13.000000000 -0400
+++ /dev/null	2004-06-24 14:04:38.000000000 -0400
@@ -1,119 +0,0 @@
-#!/usr/bin/expect -f
-
-# expect script to login to a baytech management module and control power
-# to one of its outlets
-
-# gather command line arguments into variables
-set host [lrange $argv 0 0]   
-set user [lrange $argv 1 1] 
-set password [lrange $argv 2 2] 
-set strip [lrange $argv 3 3]
-set outlet [lrange $argv 4 4]
-set command [lrange $argv 5 5]
-
-# complain if we don't get exactly 5 arguments
-if {$argc!=6} {
-	send_user "Usage: baytech.exp <host> <user> <password> <strip> <outlet> <cmd>\n"
-	send_user "   NOTE: <cmd> may be \"on\" \"off\" or \"reboot\"\n"
-	exit 1
-}
-
-set bay_command ""
-
-if { [string compare $command "on"] == 0 } {
-	set bay_command "On"
-}
-if { [string compare $command "off"] == 0 } {
-	set bay_command "Off"
-}
-if { [string compare $command "reboot"] == 0 } {
-	set bay_command "Reboot"
-}
-
-if { [string compare $bay_command ""] == 0 } {
-	send_error "Error: <cmd> must be one of on|off|reboot.\n"
-	exit 1
-}
-
-# use a 15 second timeout
-set timeout 15
-
-# this disables showing interaction on stdout.  It should be commented
-# if you are trying to debug this script and want to see what it is doing
-log_user 0
-
-# delete old log file and start a new one
-#system rm -f /tmp/expect.log
-#log_file -a /tmp/expect.log
-
-# open ssh connection.  Turn off strict host checking so ssh doesn't ask us 
-# if it is ok to connect to this hostname
-spawn ssh "-oStrictHostKeyChecking no" $user@$host 
-
-# Look for passwod prompt
-expect {
-	"*?assword:*" {}
-	default {
-		# password prompt never showed up
-		send_user "failed to ssh to host $host\n"
-		exit 1
-	}
-}
-
-# Send password aka $password 
-send -- "$password\r"
-# look for top level prompt
-expect {
-	"*Enter Request*" {}
-	default {
-		# our user name and password did not work
-		send_user "Error: host $host failed to accept username and password\n"
-		exit 1
-	}
-}
-
-# send strip name, wait, and then send an extra carriage return
-# (for some reason the Baytech will not always continue to the next screen on
-# its own)
-send -- "$strip\r"
-sleep 5
-send -- "\r"
-
-# wait for prompt for particular strip, then send command to power on 
-expect {
-	"*RPC-28A>*" {}
-	default {
-		send_user "Error: failed to select strip $strip\n"
-		exit 1
-	}
-}
-send -- "$bay_command $outlet\r"
-
-# wait for the Y/N confirmation and send a Y
-expect {
-	"*Y/N*" {}
-	default {
-		send_user "Error: failed to issue command for outlet $outlet\n"
-		exit 1
-	}
-}
-
-send -- "Y\r"
-
-# wait for command to complete 
-expect {
-	"*RPC-28A>*" {}
-	default {
-		send_user "Error: failed to confirm command for outlet $outlet\n"
-		exit 1
-	}
-}
-
-# Ordinarily we would now send some sort of "logout" command and then expect 
-# eof.  For some reason the Baytech devices will not let us logout gracefully 
-# however, so we instead just close the connection and return after waiting
-# for the result
-
-close
-wait
-

--- baytech-mgmt-monitor.exp	2008-06-24 11:01:13.000000000 -0400
+++ /dev/null	2004-06-24 14:04:38.000000000 -0400
@@ -1,59 +0,0 @@
-#!/usr/bin/expect -f
-
-# expect script to login to a baytech management module and control power
-# to one of its outlets
-
-# gather command line arguments into variables
-set host [lrange $argv 0 0]   
-set user [lrange $argv 1 1] 
-set password [lrange $argv 2 2] 
-
-# complain if we don't get exactly 5 arguments
-if {$argc!=3} {
-	send_user "Usage: baytech.exp <host> <user> <password>\n"
-	exit 1
-}
-
-# use a 15 second timeout
-set timeout 15
-
-# this disables showing interaction on stdout.  It should be commented
-# if you are trying to debug this script and want to see what it is doing
-log_user 0
-
-# delete old log file and start a new one
-#system rm -f /tmp/expect.log
-#log_file -a /tmp/expect.log
-
-# open ssh connection.  Turn off strict host checking so ssh doesn't ask us 
-# if it is ok to connect to this hostname
-spawn ssh "-oStrictHostKeyChecking no" $user@$host 
-
-# Look for passwod prompt
-expect {
-	"*?assword:*" {}
-	default {
-		# password prompt never showed up
-		send_user "failed to ssh to host $host\n"
-		exit 1
-	}
-}
-
-# Send password aka $password 
-send -- "$password\r"
-# look for top level prompt
-expect {
-	"*Enter Request*" {}
-	default {
-		# our user name and password did not work
-		send_user "Error: host $host failed to accept username and password\n"
-		exit 1
-	}
-}
-
-# send logout command
-send -- "T\r"
-
-close
-wait
-

--- pvfs2-stonith-plugin	2008-06-24 11:01:13.000000000 -0400
+++ /dev/null	2004-06-24 14:04:38.000000000 -0400
@@ -1,91 +0,0 @@
-#!/bin/sh
-#
-# External STONITH module for power control of PVFS2 servers
-
-case $1 in
-gethosts)
-	/usr/bin/fs-power-gethosts.pl --fs-name $fs_name
-	exit 0
-	;;
-on)
-	/usr/bin/fs-power-control.pl --fs-name $fs_name --conf-dir $fs_conf_dir --host $2 --command on
-	RETVAL=$?
-        if [ $RETVAL -ne 0 ]; then
-	  exit 1
-	fi
-	exit 0
-	;;
-off)
-	/usr/bin/fs-power-control.pl --fs-name $fs_name --conf-dir $fs_conf_dir --host $2 --command off
-	RETVAL=$?
-        if [ $RETVAL -ne 0 ]; then
-	  exit 1
-	fi
-	exit 0
-	;;
-reset)
-	/usr/bin/fs-power-control.pl --fs-name $fs_name --conf-dir $fs_conf_dir --host $2 --command reboot
-	RETVAL=$?
-        if [ $RETVAL -ne 0 ]; then
-	  exit 1
-	fi
-	exit 0
-	;;
-status)
-	/usr/bin/fs-power-monitor.pl --conf-dir $fs_conf_dir --fs-name $fs_name
-	RETVAL=$?
-        if [ $RETVAL -ne 0 ]; then
-	  exit 1
-	fi
-	exit 0
-	;;
-getconfignames)
-	echo "fs_name"
-	echo "fs_conf_dir"
-	exit 0
-	;;
-getinfo-devid)
-	echo "PVFS2 stonith device"
-	exit 0
-	;;
-getinfo-devname)
-	echo "PVFS2 stonith device"
-	exit 0
-	;;
-getinfo-devdescr)
-	echo "Power control for PVFS2 servers"
-	exit 0
-	;;
-getinfo-devurl)
-	echo "NONE"
-	exit 0
-	;;
-getinfo-xml)
-	cat << XML
-<parameters>
-<parameter name="fs_name" unique="1" required="1">
-<content type="string" />
-<shortdesc lang="en">
-file system name
-</shortdesc>
-<longdesc lang="en">
-Name of the file system that this device is being used with
-</longdesc>
-</parameter>
-<parameter name="fs_conf_dir" unique="1" required="1">
-<content type="string" />
-<shortdesc lang="en">
-file system configuration directory
-</shortdesc>
-<longdesc lang="en">
-Path to the shared configuration directory for the file system
-</longdesc>
-</parameter>
-</parameters>
-XML
-	exit 0
-	;;
-*)
-	exit 1
-	;;
-esac

--- qla-monitor.pl	2008-06-24 11:01:13.000000000 -0400
+++ /dev/null	2004-06-24 14:04:38.000000000 -0400
@@ -1,97 +0,0 @@
-#!/usr/bin/perl 
-
-use strict;
-use Getopt::Long;
-use File::Find;
-use File::Path;
-use POSIX qw(setsid);
-use Socket;
-
-my $device = undef;
-my $mon_device = undef;
-
-&process_args;
-
-# strip path and partition off of device name 
-if($device =~ /\/+dev\/+([a-zA-Z]+)[1234567890]*/)
-{
-   $mon_device = $1;
-}
-else
-{
-   print "Error: poorly formated device name.\n";
-   exit 1;
-}
-
-my $devcount = `powermt display dev=$mon_device 2>&1 |grep -c -E "(qla)|(lpfc)"`;
-if ($devcount < 1)
-{
-   print "Error: could not find device $mon_device.\n";
-   exit 1;
-}
-chomp($devcount);
-
-my $deadcount = `powermt display dev=$mon_device 2>&1 |grep -E "(qla)|(lpfc)" | grep -c dead`;
-chomp($deadcount);
-
-if($devcount == $deadcount)
-{
-   print "Error: all paths for device $device are dead.\n";
-   exit 1;
-}
-
-exit 0;
-
-sub process_args
-{
-   # Parse the command line options
-   # For a description of the command line options see &print_help
-   use vars qw( $opt_help $opt_device);
-
-   Getopt::Long::Configure( "no_ignore_case", "bundling");
-   GetOptions( "help",
-               "device=s");
-
-   if ($opt_help)
-   {
-      &print_help;
-      exit(0);
-   }
-
-   if($opt_device)
-   {
-      $device = $opt_device;
-   }
-   else
-   {
-      &print_help;
-      die "Error: must specify device.\n";
-   }
-}
-
-# --------------- print help information ------------------------------
-sub print_help {
-
-   print <<EOF;
-
-This script will check a QLogic or Emulex SAN device to see if it is operating correctly.
-
-usage: qla-monitor.pl --device <SAN device>
-
-options:
-   --help                        Print this help and exit.
-   --device           <STRING>   SAN device (such as /dev/emcpowera1).
-
-EOF
-}
-
-# Local variables:
-#  c-basic-offset: 3
-#  perl-indent-level: 3
-#  tab-width: 3
-#  indent-tabs-mode: nil
-#  shiftwidth: 3
-# End:
-#
-# vim: ts=3 expandtab
-



More information about the Pvfs2-cvs mailing list