initial commit
This commit is contained in:
507
chapter21/SSAidentify.ksh
Executable file
507
chapter21/SSAidentify.ksh
Executable file
@@ -0,0 +1,507 @@
|
||||
#!/bin/ksh
|
||||
#
|
||||
# SCRIPT: SSAidentify.ksh
|
||||
#
|
||||
# AUTHOR: Randy Michael
|
||||
#
|
||||
# DATE: 11/7/2007
|
||||
#
|
||||
# REV: 2.5.A
|
||||
#
|
||||
# PURPOSE: This script is used to turn on, or off, the
|
||||
# identify lights on the system's SSA disks
|
||||
#
|
||||
# REV LIST:
|
||||
# 11/27/2007: Added code to allow the user to turn on/off
|
||||
# individual pdisk lights
|
||||
#
|
||||
# 12/10/2007: Added code to accept a combination of pdisks
|
||||
# and hdisks. For each hdisk passed the script translates
|
||||
# the hdisk# into the associated pdisk#(s).
|
||||
#
|
||||
# 12/10/2007: Added code to ALLOW using the currently VARIED ON
|
||||
# Volume Group's disks (-v switch), as opposed to ALL DEFINED SSA disks,
|
||||
# which is the default behavior. Very helpful in a HACMP environment.
|
||||
#
|
||||
# 12/11/2007: Added the "twirl" function to give the user feedback
|
||||
# during long processing periods, i.e. translating a few hundred
|
||||
# hdisks into associated pdisks. The twirl function is just a rotating
|
||||
# cursor and it twirls during the translation processing.
|
||||
|
||||
|
||||
# set -x # Uncomment to debug this script
|
||||
|
||||
SCRIPTNAME=$(basename $0)
|
||||
|
||||
##############################################
|
||||
|
||||
function usage
|
||||
{
|
||||
echo "\nUSAGE ERROR...
|
||||
\nMAN PAGE ==> $SCRIPTNAME -?
|
||||
\nTo Turn ALL Lights Either ON or OFF:
|
||||
\nUSAGE: SSAidentify.ksh [-v] [on] [off]
|
||||
EXAMPLE: SSAidentify.ksh -v on
|
||||
\nWill turn ON ALL of the system's currently VARIED ON
|
||||
SSA identify lights. NOTE: The default is all DEFINED SSA disks
|
||||
\nTo Turn SPECIFIC LIGHTS Either ON or OFF Using EITHER
|
||||
the pdisk#(s) AND/OR the hdisk#(s):
|
||||
\nUSAGE: SSAidentify.ksh [on] [off] pdisk{#1} [hdisk{#2}]...
|
||||
EXAMPLE: SSAidentify.ksh on hdisk36 pdisk44 pdisk47
|
||||
\nWill turn ON the lights to all of the associated pdisk#(s)
|
||||
that hdisk36 translates to and PDISKS pdisk44 and pdisk47.
|
||||
\nNOTE: Can use all pdisks, all hdisks or BOTH hdisk
|
||||
and pdisk together if you want..."
|
||||
exit 1
|
||||
}
|
||||
|
||||
##############################################
|
||||
|
||||
function man_page
|
||||
{
|
||||
MAN_FILE="/tmp/man_file.out"
|
||||
>$MAN_FILE
|
||||
|
||||
# Text for the man page...
|
||||
|
||||
echo "\n\t\tMAN PAGE FOR SSAidentify.ksh SHELL SCRIPT\n
|
||||
This script is used to turn on, or off, the system's SSA disk drive
|
||||
identification lights. You can use this script in the following ways:\n
|
||||
To turn on/off ALL DEFINED SSA drive identification lights, ALL VARIED-ON SSA
|
||||
drive identification lights (-v switch), AN INDIVIDUAL SSA drive identification
|
||||
light or A LIST OF SSA drive identification lights.\n
|
||||
SSA disk drives can be specified by EITHER the pdisk OR the hdisk, or
|
||||
a COMBINATION OF BOTH. The script translates all hdisks into the
|
||||
associated pdisk(s) using the system's /usr/sbin/ssaxlate command and turns
|
||||
the SSA identification light on/off using the system's /usr/sbin/ssaidentify
|
||||
command.\n
|
||||
|
||||
This script has four switches that control its' action:\n
|
||||
-? - Displays this man page.\n
|
||||
on - Turns the SSA identify light(s) ON.\n
|
||||
off - Turns the SSA identify light(s) OFF.\n
|
||||
-v - Specifies to only act on SSA disks which are in currently varied-on
|
||||
volume groups. The default action is to act on ALL DEFINED SSA disks.\n
|
||||
NOTE: This switch is ignored for turning on/off individual SSA drive lights,
|
||||
only valid when turning on/off ALL lights. This option is very helpful in an
|
||||
HACMP environment since ALL DEFINED, the default action, will turn on/off all
|
||||
of the SSA drive lights even if the SSA disk is in a volume group which is not
|
||||
currently varied-on. This can be confusing in an HA cluster.\n
|
||||
Using this script is very straight forward. The following examples show the
|
||||
correct use of this script:\n" >> $MAN_FILE
|
||||
echo "\nUSAGE: SSAidentify.ksh [-v] [on] [off] [pdisk#/hdisk#] [pdisk#/hdisk# list]
|
||||
\n\nTo Turn ALL Lights Either ON or OFF:
|
||||
\nUSAGE: SSAidentify.ksh [-v] [on] [off]
|
||||
\nEXAMPLE: $SCRIPTNAME on
|
||||
\nWill turn ON ALL of the system's DEFINED SSA identify lights.
|
||||
This is the default.
|
||||
EXAMPLE: SSAidentify.ksh -v on
|
||||
\nWill turn ON ALL of the system's currently VARIED ON
|
||||
SSA identify lights. OVERRIDES THE DEFAULT ACTION OF ALL DEFINED SSA DISKS
|
||||
\nTo Turn SPECIFIC LIGHTS Either ON or OFF Using EITHER
|
||||
the pdisk#(s) AND/OR the hdisk#(s):
|
||||
\nUSAGE: $SCRIPTNAME [on] [off] pdisk{#1} [hdisk{#2}]...
|
||||
\nEXAMPLE: $SCRIPTNAME on hdisk36 pdisk44 pdisk47
|
||||
\nWill turn ON the lights to all of the associated pdisk#(s)
|
||||
that hdisk36 translates to and PDISKS pdisk44 and pdisk47.
|
||||
\nNOTE: Can use all pdisks, all hdisks or BOTH hdisk
|
||||
and pdisk together if you want...\n\n" >> $MAN_FILE
|
||||
|
||||
more $MAN_FILE
|
||||
|
||||
# End of man_page function
|
||||
}
|
||||
|
||||
##############################################
|
||||
|
||||
function cleanup
|
||||
{
|
||||
echo "\n...Exiting on a trapped signal...EXITING STAGE LEFT...\n"
|
||||
|
||||
kill $TWIRL_PID
|
||||
|
||||
# End of cleanup function
|
||||
}
|
||||
|
||||
##############################################
|
||||
|
||||
function twirl
|
||||
{
|
||||
TCOUNT="0" # For each TCOUNT the line twirls one increment
|
||||
|
||||
while : # Loop forever...until you break out of the loop
|
||||
do
|
||||
TCOUNT=$(expr ${TCOUNT} + 1) # Increment the TCOUNT
|
||||
case ${TCOUNT} in
|
||||
"1") echo '-'"\b\c"
|
||||
sleep 1
|
||||
;;
|
||||
"2") echo '\\'"\b\c"
|
||||
sleep 1
|
||||
;;
|
||||
"3") echo "|\b\c"
|
||||
sleep 1
|
||||
;;
|
||||
"4") echo "/\b\c"
|
||||
sleep 1
|
||||
;;
|
||||
*) TCOUNT="0" ;; # Reset the TCOUNT to "0", zero.
|
||||
esac
|
||||
done
|
||||
# End of twirl finction
|
||||
}
|
||||
|
||||
############################################
|
||||
|
||||
function kill_twirl
|
||||
{
|
||||
kill `jobs -p` 2>/dev/null
|
||||
# End of kill_twirl function
|
||||
}
|
||||
|
||||
############################################
|
||||
function all_defined_pdisks
|
||||
|
||||
{
|
||||
# TURN ON/OFF ALL LIGHTS:
|
||||
# Loop through each of the system.s pdisks by using the "lsdev"
|
||||
# command with the "-Cc pdisk" switch while using "awk" to extract
|
||||
# out the actual pdisk number. We will either
|
||||
# turn the identifier lights on or off, specified by the
|
||||
# $SWITCH variable:
|
||||
#
|
||||
# Turn lights on: -y
|
||||
# Turn lights off: -n
|
||||
#
|
||||
# as the $SWITCH value to the "ssaidentify" command, as used below...
|
||||
|
||||
echo "\nTurning $STATE ALL of the system.s pdisks...Please Wait...\n"
|
||||
|
||||
for PDISK in $(lsdev -Cc pdisk -s ssar -H | awk .{print $1}. | grep pdisk)
|
||||
do
|
||||
echo "Turning $STATE ==> $PDISK"
|
||||
ssaidentify -l $PDISK -${SWITCH} || echo "Turning $STATE $PDISK Failed"
|
||||
done
|
||||
echo "\n...TASK COMPLETE...\n"
|
||||
|
||||
}
|
||||
|
||||
############################################
|
||||
|
||||
function all_varied_on_pdisks
|
||||
{
|
||||
trap 'kill -9 $TWIRL_PID; return 1' 1 2 3 15
|
||||
|
||||
cat /dev/null > $HDISKFILE
|
||||
|
||||
echo "\nGathering a list of Varied on system SSA disks...Please wait...\c"
|
||||
|
||||
VG_LIST=$(lsvg -o) # Get the list of Varied ON Volume Groups
|
||||
|
||||
for VG in $(echo $VG_LIST)
|
||||
do
|
||||
lspv | grep $VG >> $HDISKFILE # List of Varied ON PVs
|
||||
done
|
||||
|
||||
twirl & # Gives the user some feedback during long processing times...
|
||||
|
||||
TWIRL_PID=$!
|
||||
|
||||
echo "\nTranslating hdisk(s) into the associated pdisk(s)...Please Wait... \c"
|
||||
|
||||
for DISK in $(cat $HDISKFILE) # Translate hdisk# into pdisk#(s)
|
||||
do
|
||||
# Checking for an SSA disk
|
||||
/usr/sbin/ssaxlate -l $DISK # 2>/dev/null 1>/dev/null
|
||||
|
||||
if (($? == 0))
|
||||
then
|
||||
/usr/sbin/ssaxlate -l $DISK >> $PDISKFILE # Add to pdisk List
|
||||
fi
|
||||
done
|
||||
|
||||
kill -9 $TWIRL_PID # Kill the user feedback function...
|
||||
echo "\b "
|
||||
|
||||
echo "\nTurning $STATE all VARIED-ON system pdisks...Please Wait...\n"
|
||||
|
||||
for PDISK in $(cat $PDISKFILE)
|
||||
do # Act on each pdisk individually...
|
||||
echo "Turning $STATE ==> $PDISK"
|
||||
/usr/sbin/ssaidentify -l $PDISK -${SWITCH} || echo "Turning $STATE $PDISK Failed"
|
||||
done
|
||||
|
||||
echo "\n\t...TASK COMPLETE...\n"
|
||||
}
|
||||
|
||||
############################################
|
||||
|
||||
function list_of_disks
|
||||
{
|
||||
# TURN ON/OFF INDIVDUAL LIGHTS:
|
||||
# Loop through each of the disks that was passed to this script
|
||||
# via the positional parameters greater than $1, i.e., $2, $3, $4...
|
||||
# We first determine if each of the parameters is a pdisk or an hdisk.
|
||||
# For each hdisk passed to the script we first need to translate
|
||||
# the hdisk definition into a pdisk definition. This script has
|
||||
# been set up to accept a combination of hdisks and pdisks.
|
||||
#
|
||||
# We will either turn the identifier lights on or off, specified by
|
||||
# the $SWITCH variable for each pdisk#:
|
||||
#
|
||||
# Turn lights on: -y
|
||||
# Turn lights off: -n
|
||||
#
|
||||
# as the $SWITCH value to the "ssaidentify" command.
|
||||
|
||||
echo "\n"
|
||||
|
||||
# The disks passed to this script can be all hdisks, all pdisks
|
||||
# or a combination of pdisks and hdisks; it just does not matter.
|
||||
# We translate each hdisk into the associated pdisk(s).
|
||||
|
||||
echo "\nTurning $STATE individual SSA disk lights...\n"
|
||||
|
||||
for PDISK in $PDISKLIST
|
||||
do
|
||||
# Is it a real pdisk??
|
||||
if [ -c /dev/${PDISK} ] 2>/dev/null
|
||||
then # Yep - act on it...
|
||||
|
||||
/usr/sbin/ssaidentify -l $PDISK -${SWITCH}
|
||||
if [ $? -eq 0 ]
|
||||
then
|
||||
/usr/bin/ssaxlate -l $PDISK -${SWITCH}
|
||||
if (($? == 0))
|
||||
then
|
||||
echo "Light on $PDISK is $STATE"
|
||||
else
|
||||
echo "Turning $STATE $PDISK Failed"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "\nERROR: $PDISK is not a defined device on $THISHOST\n"
|
||||
fi
|
||||
done
|
||||
|
||||
echo "\n...TASK COMPLETE...\n"
|
||||
}
|
||||
|
||||
############################################
|
||||
############# BEGINNING OF MAIN ############
|
||||
############################################
|
||||
|
||||
# Set a trap...
|
||||
|
||||
# Remember...Cannot trap a "kill -9" !!!
|
||||
|
||||
trap 'cleanup; exit 1' 1 2 3 15
|
||||
|
||||
##############################################
|
||||
|
||||
# Check for the correct number of arguments (1)
|
||||
|
||||
if (($# == 0))
|
||||
then
|
||||
usage
|
||||
fi
|
||||
|
||||
##############################################
|
||||
|
||||
# See if the system has any pdisks defined before proceeding
|
||||
|
||||
PCOUNT=$(lsdev -Cc pdisk -s ssar | grep -c pdisk)
|
||||
|
||||
if ((PCOUNT == 0))
|
||||
then
|
||||
echo "\nERROR: This system has no SSA disks defined\n"
|
||||
echo "\t\t...EXITING...\n"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
##############################################
|
||||
|
||||
# Make sure that the ssaidentify program is
|
||||
# executable on this system...
|
||||
|
||||
if [ ! -x /usr/sbin/ssaidentify ]
|
||||
then
|
||||
echo "\nERROR: /usr/sbin/ssaidentify is NOT an executable"
|
||||
echo "program on $THISHOST"
|
||||
echo "\n...EXITING...\n"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
##############################################
|
||||
|
||||
# Make sure that the ssaxlate program is
|
||||
# executable on this system...
|
||||
|
||||
if [ ! -x /usr/sbin/ssaxlate ]
|
||||
then
|
||||
echo "\nERROR: /usr/sbin/ssaxlate is NOT an executable"
|
||||
echo "program on $THISHOST"
|
||||
echo "\n...EXITING...\n"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
##############################################
|
||||
##############################################
|
||||
#
|
||||
# Okay, we should have valid data at this point
|
||||
# Let.s do a light show.
|
||||
#
|
||||
##############################################
|
||||
##############################################
|
||||
|
||||
# Always use the UPPERCASED value for the $STATE, $MODE,
|
||||
# and $PASSED variables...
|
||||
|
||||
typeset -u MODE
|
||||
MODE="DEFINED_DISKS"
|
||||
typeset -u STATE
|
||||
STATE=UNKNOWN
|
||||
typeset -u PASSED
|
||||
|
||||
# Use lowercase for the argument list
|
||||
typeset -l ARGUMENT
|
||||
|
||||
# Grab the system hostname
|
||||
|
||||
THISHOST=$(hostname)
|
||||
|
||||
# Define the hdisk and pdisk FILES
|
||||
|
||||
HDISKFILE="/tmp/disklist.out"
|
||||
>$HDISKFILE
|
||||
PDISKFILE="/tmp/pdisklist.identify"
|
||||
>$PDISKFILE
|
||||
|
||||
# Define the hdisk and pdisk list VARIABLES
|
||||
|
||||
HDISKLIST=
|
||||
PDISKLIST=
|
||||
|
||||
# Use getopts to parse the command-line arguments
|
||||
|
||||
while getopts ":vV" ARGUMENT 2>/dev/null
|
||||
do
|
||||
case $ARGUMENT in
|
||||
v|V) MODE="VARIED_ON"
|
||||
;;
|
||||
\?) man_page
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
##############################################
|
||||
|
||||
# Decide if we are to turn the lights on or off...
|
||||
|
||||
(echo $@ | grep -i -w on >/dev/null) && STATE=ON
|
||||
(echo $@ | grep -i -w off >/dev/null) && STATE=OFF
|
||||
|
||||
case $STATE in
|
||||
|
||||
ON)
|
||||
# Turn all of the lights ON...
|
||||
SWITCH="y"
|
||||
;;
|
||||
OFF)
|
||||
# Turn all of the lights OFF...
|
||||
SWITCH="n"
|
||||
;;
|
||||
*)
|
||||
# Unknown Option...
|
||||
echo "\nERROR: Please indicate the action to turn lights ON or OFF\n"
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
##############################################
|
||||
##############################################
|
||||
########## PLAY WITH THE LIGHTS ##############
|
||||
##############################################
|
||||
##############################################
|
||||
|
||||
if (($# == 1)) && [[ $MODE = "DEFINED_DISKS" ]]
|
||||
then
|
||||
# This function will turn all lights on/off
|
||||
|
||||
all_defined_pdisks
|
||||
|
||||
elif [[ $MODE = "VARIED_ON" ]] && (($# = 2))
|
||||
then
|
||||
# This function will turn on/off SSA disk lights
|
||||
# in currently varied-on volume groups only
|
||||
|
||||
all_varied_on_pdisks
|
||||
|
||||
# Now check for hdisk and pdisk arguments
|
||||
|
||||
elif [ $MODE = DEFINED_DISKS ] && (echo $@ | grep disk >/dev/null) \
|
||||
&& (($# >= 2))
|
||||
then
|
||||
# If we are here we must have a list of hdisks
|
||||
# and/or pdisks
|
||||
|
||||
# Look for hdisks and pdisks in the command-line arguments
|
||||
|
||||
for DISK in $(echo $@ | grep disk)
|
||||
do
|
||||
case $DISK in
|
||||
hdisk*) HDISKLIST="$HDISKLIST $DISK"
|
||||
;;
|
||||
pdisk*) PDISKLIST="$PDISKLIST $DISK"
|
||||
;;
|
||||
*) : # No-Op - Do nothing
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ ! -z "$HDISKLIST" ]] # Check for hdisks to convert to pdisks
|
||||
then
|
||||
|
||||
# We have some hdisks that need to be converted to pdisks
|
||||
# so start converting the hdisks to pdisks
|
||||
|
||||
# Give the user some feedback
|
||||
|
||||
echo "\nConverting hdisks to pdisk definitions"
|
||||
echo "\n ...Please be patient...\n"
|
||||
|
||||
# Start converting the hdisks to pdisks
|
||||
|
||||
for HDISK in $HDISKLIST
|
||||
do
|
||||
PDISK=$(ssaxlate -l $HDISK)
|
||||
if (($? == 0))
|
||||
then
|
||||
echo "$HDISK translates to ${PDISK}"
|
||||
else
|
||||
echo "ERROR: hdisk to pdisk translation FAILED for $HDISK"
|
||||
fi
|
||||
|
||||
# Build a list of pdisks
|
||||
# Add pdisk to the pdisk list
|
||||
|
||||
PDISKLIST="$PDISKLIST $PDISK"
|
||||
done
|
||||
fi
|
||||
|
||||
if [[ -z "$PDISKLIST" ]]
|
||||
then
|
||||
echo "\nERROR: You must specify at least one hdisk or pdisk\n"
|
||||
man_page
|
||||
exit 1
|
||||
else
|
||||
# Turn on/off the SSA identification lights
|
||||
|
||||
list_of_disks
|
||||
fi
|
||||
fi
|
||||
|
||||
##############################################
|
||||
# END OF SCRIPT #
|
||||
##############################################
|
||||
26
chapter21/function_all_defined_pdisks
Executable file
26
chapter21/function_all_defined_pdisks
Executable file
@@ -0,0 +1,26 @@
|
||||
function all_defined_pdisks
|
||||
|
||||
{
|
||||
# TURN ON/OFF ALL LIGHTS:
|
||||
# Loop through each of the system.s pdisks by using the "lsdev"
|
||||
# command with the "-Cc pdisk" switch while using "awk" to extract
|
||||
# out the actual pdisk number. We will either
|
||||
# turn the identifier lights on or off, specified by the
|
||||
# $SWITCH variable:
|
||||
#
|
||||
# Turn lights on: -y
|
||||
# Turn lights off: -n
|
||||
#
|
||||
# as the $SWITCH value to the "ssaidentify" command, as used below...
|
||||
|
||||
echo "\nTurning $STATE ALL of the system.s pdisks...Please Wait...\n"
|
||||
|
||||
for PDISK in $(lsdev -Cc pdisk -s ssar -H | awk .{print $1}. | grep pdisk)
|
||||
do
|
||||
echo "Turning $STATE ==> $PDISK"
|
||||
ssaidentify -l $PDISK -${SWITCH} || echo "Turning $STATE $PDISK Failed"
|
||||
done
|
||||
echo "\n...TASK COMPLETE...\n"
|
||||
|
||||
}
|
||||
|
||||
46
chapter21/function_all_varied_on_pdisks
Executable file
46
chapter21/function_all_varied_on_pdisks
Executable file
@@ -0,0 +1,46 @@
|
||||
function all_varied_on_pdisks
|
||||
{
|
||||
trap 'kill -9 $TWIRL_PID; return 1' 1 2 3 15
|
||||
|
||||
cat /dev/null > $HDISKFILE
|
||||
|
||||
echo "\nGathering a list of Varied on system SSA disks...Please wait...\c"
|
||||
|
||||
VG_LIST=$(lsvg -o) # Get the list of Varied ON Volume Groups
|
||||
|
||||
for VG in $(echo $VG_LIST)
|
||||
do
|
||||
lspv | grep $VG >> $HDISKFILE # List of Varied ON PVs
|
||||
done
|
||||
|
||||
twirl & # Gives the user some feedback during long processing times...
|
||||
|
||||
TWIRL_PID=$!
|
||||
|
||||
echo "\nTranslating hdisk(s) into the associated pdisk(s)...Please Wait... \c"
|
||||
|
||||
for DISK in $(cat $HDISKFILE) # Translate hdisk# into pdisk#(s)
|
||||
do
|
||||
# Checking for an SSA disk
|
||||
/usr/sbin/ssaxlate -l $DISK # 2>/dev/null 1>/dev/null
|
||||
|
||||
if (($? == 0))
|
||||
then
|
||||
/usr/sbin/ssaxlate -l $DISK >> $PDISKFILE # Add to pdisk List
|
||||
fi
|
||||
done
|
||||
|
||||
kill -9 $TWIRL_PID # Kill the user feedback function...
|
||||
echo "\b "
|
||||
|
||||
echo "\nTurning $STATE all VARIED-ON system pdisks...Please Wait...\n"
|
||||
|
||||
for PDISK in $(cat $PDISKFILE)
|
||||
do # Act on each pdisk individually...
|
||||
echo "Turning $STATE ==> $PDISK"
|
||||
/usr/sbin/ssaidentify -l $PDISK -${SWITCH} || echo "Turning $STATE $PDISK Failed"
|
||||
done
|
||||
|
||||
echo "\n\t...TASK COMPLETE...\n"
|
||||
}
|
||||
|
||||
51
chapter21/function_list_of_disks
Executable file
51
chapter21/function_list_of_disks
Executable file
@@ -0,0 +1,51 @@
|
||||
function list_of_disks
|
||||
{
|
||||
# TURN ON/OFF INDIVDUAL LIGHTS:
|
||||
# Loop through each of the disks that was passed to this script
|
||||
# via the positional parameters greater than $1, i.e., $2, $3, $4...
|
||||
# We first determine if each of the parameters is a pdisk or an hdisk.
|
||||
# For each hdisk passed to the script we first need to translate
|
||||
# the hdisk definition into a pdisk definition. This script has
|
||||
# been set up to accept a combination of hdisks and pdisks.
|
||||
#
|
||||
# We will either turn the identifier lights on or off, specified by
|
||||
# the $SWITCH variable for each pdisk#:
|
||||
#
|
||||
# Turn lights on: -y
|
||||
# Turn lights off: -n
|
||||
#
|
||||
# as the $SWITCH value to the "ssaidentify" command.
|
||||
|
||||
echo "\n"
|
||||
|
||||
# The disks passed to this script can be all hdisks, all pdisks
|
||||
# or a combination of pdisks and hdisks; it just does not matter.
|
||||
# We translate each hdisk into the associated pdisk(s).
|
||||
|
||||
echo "\nTurning $STATE individual SSA disk lights...\n"
|
||||
|
||||
for PDISK in $PDISKLIST
|
||||
do
|
||||
# Is it a real pdisk??
|
||||
if [ -c /dev/${PDISK} ] 2>/dev/null
|
||||
then # Yep - act on it...
|
||||
|
||||
/usr/sbin/ssaidentify -l $PDISK -${SWITCH}
|
||||
if [ $? -eq 0 ]
|
||||
then
|
||||
/usr/bin/ssaxlate -l $PDISK -${SWITCH}
|
||||
if (($? == 0))
|
||||
then
|
||||
echo "Light on $PDISK is $STATE"
|
||||
else
|
||||
echo "Turning $STATE $PDISK Failed"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "\nERROR: $PDISK is not a defined device on $THISHOST\n"
|
||||
fi
|
||||
done
|
||||
|
||||
echo "\n...TASK COMPLETE...\n"
|
||||
}
|
||||
|
||||
55
chapter21/function_man_page
Executable file
55
chapter21/function_man_page
Executable file
@@ -0,0 +1,55 @@
|
||||
function man_page
|
||||
{
|
||||
MAN_FILE="/tmp/man_file.out"
|
||||
>$MAN_FILE
|
||||
|
||||
# Text for the man page...
|
||||
|
||||
echo "\n\t\tMAN PAGE FOR SSAidentify.ksh SHELL SCRIPT\n
|
||||
This script is used to turn on, or off, the system's SSA disk drive
|
||||
identification lights. You can use this script in the following ways:\n
|
||||
To turn on/off ALL DEFINED SSA drive identification lights, ALL VARIED-ON SSA
|
||||
drive identification lights (-v switch), AN INDIVIDUAL SSA drive identification
|
||||
light or A LIST OF SSA drive identification lights.\n
|
||||
SSA disk drives can be specified by EITHER the pdisk OR the hdisk, or
|
||||
a COMBINATION OF BOTH. The script translates all hdisks into the
|
||||
associated pdisk(s) using the system's /usr/sbin/ssaxlate command and turns
|
||||
the SSA identification light on/off using the system's /usr/sbin/ssaidentify
|
||||
command.\n
|
||||
|
||||
This script has four switches that control its' action:\n
|
||||
-? - Displays this man page.\n
|
||||
on - Turns the SSA identify light(s) ON.\n
|
||||
off - Turns the SSA identify light(s) OFF.\n
|
||||
-v - Specifies to only act on SSA disks which are in currently varied-on
|
||||
volume groups. The default action is to act on ALL DEFINED SSA disks.\n
|
||||
NOTE: This switch is ignored for turning on/off individual SSA drive lights,
|
||||
only valid when turning on/off ALL lights. This option is very helpful in an
|
||||
HACMP environment since ALL DEFINED, the default action, will turn on/off all
|
||||
of the SSA drive lights even if the SSA disk is in a volume group which is not
|
||||
currently varied-on. This can be confusing in an HA cluster.\n
|
||||
Using this script is very straight forward. The following examples show the
|
||||
correct use of this script:\n" >> $MAN_FILE
|
||||
echo "\nUSAGE: SSAidentify.ksh [-v] [on] [off] [pdisk#/hdisk#] [pdisk#/hdisk# list]
|
||||
\n\nTo Turn ALL Lights Either ON or OFF:
|
||||
\nUSAGE: SSAidentify.ksh [-v] [on] [off]
|
||||
\nEXAMPLE: $SCRIPTNAME on
|
||||
\nWill turn ON ALL of the system's DEFINED SSA identify lights.
|
||||
This is the default.
|
||||
EXAMPLE: SSAidentify.ksh -v on
|
||||
\nWill turn ON ALL of the system's currently VARIED ON
|
||||
SSA identify lights. OVERRIDES THE DEFAULT ACTION OF ALL DEFINED SSA DISKS
|
||||
\nTo Turn SPECIFIC LIGHTS Either ON or OFF Using EITHER
|
||||
the pdisk#(s) AND/OR the hdisk#(s):
|
||||
\nUSAGE: $SCRIPTNAME [on] [off] pdisk{#1} [hdisk{#2}]...
|
||||
\nEXAMPLE: $SCRIPTNAME on hdisk36 pdisk44 pdisk47
|
||||
\nWill turn ON the lights to all of the associated pdisk#(s)
|
||||
that hdisk36 translates to and PDISKS pdisk44 and pdisk47.
|
||||
\nNOTE: Can use all pdisks, all hdisks or BOTH hdisk
|
||||
and pdisk together if you want...\n\n" >> $MAN_FILE
|
||||
|
||||
more $MAN_FILE
|
||||
|
||||
# End of man_page function
|
||||
}
|
||||
|
||||
26
chapter21/function_twirl
Executable file
26
chapter21/function_twirl
Executable file
@@ -0,0 +1,26 @@
|
||||
function twirl
|
||||
{
|
||||
TCOUNT="0" # For each TCOUNT the line twirls one increment
|
||||
|
||||
while : # Loop forever...until you break out of the loop
|
||||
do
|
||||
TCOUNT=$(expr ${TCOUNT} + 1) # Increment the TCOUNT
|
||||
case ${TCOUNT} in
|
||||
"1") echo '-'"\b\c"
|
||||
sleep 1
|
||||
;;
|
||||
"2") echo '\\'"\b\c"
|
||||
sleep 1
|
||||
;;
|
||||
"3") echo "|\b\c"
|
||||
sleep 1
|
||||
;;
|
||||
"4") echo "/\b\c"
|
||||
sleep 1
|
||||
;;
|
||||
*) TCOUNT="0" ;; # Reset the TCOUNT to "0", zero.
|
||||
esac
|
||||
done
|
||||
# End of twirl finction
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user