[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